introduction
Il s’agit du 5e didacticiel de notre série Premiers pas avec Presto. Pour récapituler, voici les 4 premiers tutoriels :
Presto est un moteur SQL de requêtes parallèles distribuées open source qui s’exécute sur un cluster de nœuds. Dans ce didacticiel, nous allons vous montrer comment exécuter Presto avec AWS Glue en tant que catalogue sur un ordinateur portable.
Nous avons mentionné dans le tutoriel Presto 104 pourquoi nous utilisons un catalogue. Pour rappel, Presto est un moteur de base de données désagrégé. Cela signifie que Presto possède la partie supérieure de la pile de base de données – l’analyseur SQL, le compilateur, l’optimiseur, le planificateur, le moteur d’exécution – mais il n’a pas d’autres composants de la base de données – cela inclut le catalogue système. Dans le monde des lacs de données, le catalogue système où réside le schéma de la base de données est un catalogue. Deux catalogues populaires ont vu le jour : le catalogue Hive Metastore et AWS Glue.
Colle AWS est une plate-forme informatique sans serveur basée sur les événements fournie par AWS. AWS Glue fournit un service d’intégration de données qui facilite la découverte, la préparation et la combinaison de données pour l’analyse, l’apprentissage automatique et le développement d’applications. Le catalogue AWS Glue effectue le mappage entre les tables et colonnes de la base de données et les objets ou fichiers qui résident dans le lac de données. Il peut s’agir de fichiers ou d’objets immuables dans AWS S3.
Dans ce didacticiel, nous nous concentrerons sur l’utilisation de Presto avec AWS Glue sur votre ordinateur portable.
Ce document simplifie le processus d’un scénario d’ordinateur portable pour vous aider à démarrer. Pour les charges de travail de production réelles, vous pouvez essayer Ahana Cloud qui est un service géré pour Presto sur AWS et est pré-intégré avec un catalogue AWS Glue.
Étapes de mise en œuvre
Étape 1:
Créez un espace de noms réseau Docker, afin que les conteneurs puissent communiquer entre eux à l’aide de l’espace de noms réseau.
C:Usersrupendran>docker network create presto_networkd0d03171c01b5b0508a37d968ba25638e6b44ed4db36c1eff25ce31dc435415b
Étape 2:
Ahanaio a développé un bac à sable pour prestodb qui peut être téléchargé à partir de docker hub, utilisez la commande ci-dessous pour télécharger le bac à sable prestodb, qui est fourni avec tous les packages nécessaires pour exécuter prestodb.
C:Usersprestodb>docker pull ahanaio/prestodb-sandbox
Using default tag: latest
latest: Pulling from ahanaio/prestodb-sandbox
da5a05f6fddb: Pull complete
e8f8aa933633: Pull complete
b7cf38297b9f: Pull complete
a4205d42b3be: Pull complete
81b659bbad2f: Pull complete
ef606708339: Pull complete
979857535547: Pull complete
Digest: sha256:d7f4f0a34217d52aefad622e97dbcc16ee60ecca7b78f840d87c141ba7137254
Status: Downloaded newer image for ahanaio/prestodb-sandbox:latest
docker.io/ahanaio/prestodb-sandbox:latest
Étape 3:
Démarrez l’instance du sandbox prestodb et nommez-la en tant que coordinateur
#docker run -d -p 8080:8080 -it --net presto_network --name coordinator
ahanaio/prestodb-sandboxd
b74c6f7c4dda975f65226557ba485b1e75396d527a7b6da9db15f0897e6d47f
Étape 4:
Nous souhaitons uniquement que le coordinateur s’exécute sur ce conteneur sans le nœud de travail. Modifions donc le fichier config.properties et définissons le node-scheduler.include-cooridinator sur false.
sh-4.2# cat etc/config.properties
coordinator=true
node-scheduler.include-coordinator=false
http-server.http.port=8080
discovery-server.enabled=true
discovery.uri=http://localhost:8080
sh-4.2#
Étape 5 :
Redémarrez le coordinateur en cours d’exécution du conteneur Docker. Depuis que nous avons mis à jour le fichier de configuration pour exécuter cette instance uniquement en tant que coordinateur Presto et avons arrêté le service de travail.
# docker restart coordinator
Étape 6 :
Créez trois autres conteneurs en utilisant ahanaio/prestodb-sandbox
user@presto:~$docker run -d -p 8081:8081 -it --net presto_network --name worker1
ahanaio/prestodb-sandbox
user@presto:~$docker run -d -p 8082:8082 -it --net presto_network --name worker2
ahanaio/prestodb-sandbox
user@presto:~$docker run -d -p 8083:8083 -it --net presto_network --name worker3
ahanaio/prestodb-sandbox
Étape 7 :
Modifiez le fichier etc/config.properties dans chacun des trois conteneurs de travail et définissez le coordinateur sur false, http-server.http.port sur 8081/8082/8083 respectivement pour chaque travailleur et enfin discovery.uri doit pointer vers le coordinateur.
sh-4.2# cat etc/config.properties
coordinator=false
http-server.http.port=8081
discovery.uri=http://coordinator:8080
Étape 8 :
Nous allons maintenant installer aws-cli et configurer AWS glue sur le coordinateur et les conteneurs de travail.
Étape 9 :
Créer un utilisateur de colle et l’attacher à la stratégie AmazonS3FullAccess et AWSGlueConsoleFull Access
aws iam create-user --user-name glueuser
{
"User": {
"Path": "https://dzone.com/",
"UserName": "glueuser",
"UserId": "AXXXXXXXXXXXXXXXX",
"Arn": "arn:aws:iam::XXXXXXXXXX:user/glueuser",
"CreateDate": "2021-10-07T01:07:28+00:00"
}
}
aws iam list-policies | grep AmazonS3FullAccess
"PolicyName": "AmazonS3FullAccess",
"Arn": "arn:aws:iam::aws:policy/AmazonS3FullAccess",
aws iam list-policies | grep AWSGlueConsoleFullAccess
"PolicyName": "AWSGlueConsoleFullAccess",
"Arn": "arn:aws:iam::aws:policy/AWSGlueConsoleFullAccess",
aws iam attach-user-policy --user-name glueuser --policy-arn "arn:aws:iam::aws:policy/AmazonS3FullAccess"
aws iam attach-user-policy --user-name glueuser --policy-arn "arn:aws:iam::aws:policy/AmazonS3FullAccess"
Étape 10 :
Créer une clé d’accès
% aws iam create-access-key --user-name glueuser
{
"AccessKey": {
"UserName": "glueuser",
"AccessKeyId": "XXXXXXXXXXXXXXXXXX",
"Status": "Active",
"SecretAccessKey": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
"CreateDate": "2021-10-13T01:50:45+00:00"
}
}
Étape 11 :
Exécutez aws configure et entrez l’accès et la clé secrète configurés.
aws configure
AWS Access Key ID [None]: XXXXXXXXXXXXXAWS
Secret Access Key [None]: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Default region name [None]:
Default output format [None]
Étape 12 :
Créez le fichier /opt/presto-server/etc/catalog/glue.properties, ajoutez les propriétés AWS Glue à presto, ce fichier doit être ajouté sur les conteneurs de coordinateur et de travail. Ajoutez les clés d’accès et secrètes AWS générées à l’étape précédente à hive.metastore.glue.aws-access-key et hive.metastore.glue.aws-secret-key.
connector.name=hive-hadoop2
hive.metastore=glue
hive.non-managed-table-writes-enabled=true
hive.metastore.glue.region=us-east-2
hive.metastore.glue.aws-access-key=<your AWS key>
hive.metastore.glue.aws-secret-key=<your AWS Secret Key>
Étape 13 :
Redémarrez le coordinateur et tous les conteneurs de nœuds de calcul
#docker restart coordinator
#docker restart worker1
#docker restart worker2
#docker restart worker3
Étape 14 :
Exécutez le presto-cli et utilisez de la colle comme catalogue
bash-4.2# presto-cli --server localhost:8080 --catalog glue
Étape 15 :
Créez un schéma à l’aide de l’emplacement S3.
presto:default> create schema glue.demo with (location= 's3://Your_Bucket_Name/demo');
CREATE SCHEMA
presto:default> use demo;
Étape 16 :
Créer une table sous le schéma glue.demo
presto:demo> create table glue.demo.part with (format="parquet") AS select * from tpch.tiny.part;
CREATE TABLE: 2000 rows
Query 20211013_034514_00009_6hkhg, FINISHED, 1 node
Splits: 19 total, 19 done (100.00%)
0:06 [2K rows, 0B] [343 rows/s, 0B/s]
Étape 17 :
Exécutez l’instruction select sur la table nouvellement créée.
presto:demo> select * from glue.demo.part limit 10;
partkey | name | mfgr | brand
---------+------------------------------------------+----------------+---------
1 | goldenrod lavender spring chocolate lace | Manufacturer#1 | Brand#13
2 | blush thistle blue yellow saddle | Manufacturer#1 | Brand#13
3 | spring green yellow purple cornsilk | Manufacturer#4 | Brand#42
4 | cornflower chocolate smoke green pink | Manufacturer#3 | Brand#34
5 | forest brown coral puff cream | Manufacturer#3 | Brand#32
6 | bisque cornflower lawn forest magenta | Manufacturer#2 | Brand#24
7 | moccasin green thistle khaki floral | Manufacturer#1 | Brand#11
8 | misty lace thistle snow royal | Manufacturer#4 | Brand#44
9 | thistle dim navajo dark gainsboro | Manufacturer#4 | Brand#43
10 | linen pink saddle puff powder | Manufacturer#5 | Brand#54
Sommaire
Dans ce didacticiel, nous fournissons des étapes pour utiliser Presto avec AWS Glue en tant que catalogue sur un ordinateur portable.