introduction
Il s’agit du quatrième didacticiel de notre série Premiers pas avec Presto. Pour récapituler, voici les 3 premiers tutoriels :
Presto 101 : Installer et configurer Presto localement
Presto 102 : Exécution d’un cluster Presto à trois nœuds sur un ordinateur portable
Presto 103 : Exécuter un cluster Presto sur GCP
Presto est un moteur SQL de requête parallèle distribué open source qui s’exécute sur un cluster de nœuds. Dans ce didacticiel, nous allons vous montrer comment exécuter Presto avec Hive Metastore sur un ordinateur portable.
Presto est un moteur 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 base de données réside dans ce qu’on appelle un catalogue. Deux catalogues populaires ont vu le jour. Du monde Hadoop – le Hive Metastore continue d’être largement utilisé. Notez que ceci est différent du moteur de requête Hive. Il s’agit du catalogue du système, où résident les informations sur les schémas de table et leurs emplacements. Dans AWS, le catalogue Glue est également très populaire.
Le Hive Metastore est 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 d’un système de fichiers lors de l’utilisation de HDFS ou d’objets immuables dans des magasins d’objets comme AWS S3. Ce didacticiel simplifie le processus d’un scénario d’ordinateur portable pour vous aider à démarrer.
É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
Ahana a développé un bac à sable pour PrestoDB qui peut être téléchargé à partir du 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
3ef606708339: Pull complete
979857535547: Pull complete
Digest: sha256:d7f4f0a34217d52aefad622e97dbcc16ee60ecca7b78f840d87c141ba7137254
Status: Downloaded newer image for ahanaio/prestodb-sandbox:latestdocker.io/ahanaio/prestodb-sandbox:latest
Étape 3:
Démarrez l’instance du bac à sable PrestoDB et nommez-la en tant que coordinateur
#docker run -d -p 8080:8080 -it --net presto_network --name coordinator
ahanaio/prestodb-sandbox
db74c6f7c4dda975f65226557ba485b1e75396d527a7b6da9db15f0897e6d47f
É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=8080discovery-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 et configurer Hive sur le conteneur coordinateur.
Installer wget procps et tar
# yum install -y wget procps tar less
Étape 9 :
Téléchargez et installez les packages Hive et Hadoop, définissez HOME et PATH pour JAVA, HIVE et HADOOP
#HIVE_BIN=https://downloads.apache.org/hive/hive-3.1.2/apache-hive-3.1.2-bin.tar.gz
#HADOOP_BIN=https://dlcdn.apache.org/hadoop/common/hadoop-3.3.1/hadoop-3.3.1.tar.gz
#wget --quiet ${HIVE_BIN}
#wget --quiet ${HADOOP_BIN}
#tar -xf apache-hive-3.1.2-bin.tar.gz -C /opt
#tar -xf hadoop-3.3.1.tar.gz -C /opt
#mv /opt/apache-hive-3.1.2-bin /opt/hive
#mv /opt/hadoop-3.3.1 /opt/hadoop
#export JAVA_HOME=/usr
#export HIVE_HOME=/opt/hive
#export HADOOP_HOME=/opt/hadoop
#export PATH=$PATH:${HADOOP_HOME}:${HADOOP_HOME}/bin:$HIVE_HOME:/bin:.
#cd /opt/hive
Étape 10 :
Téléchargez les fichiers jar supplémentaires nécessaires pour fonctionner avec S3
#wget https://repo1.maven.org/maven2/com/amazonaws/aws-java-sdk-core/1.10.6/aws-java-sdk-core-1.10.6.jar
#wget https://repo1.maven.org/maven2/com/amazonaws/aws-java-sdk-s3/1.10.6/aws-java-sdk-s3-1.10.6.jar
#wget https://repo1.maven.org/maven2/org/apache/hadoop/hadoop-aws/2.8.4/hadoop-aws-2.8.4.jar
#cp aws-java-sdk-core-1.10.6.jar /opt/hadoop/share/hadoop/tools/lib/
#cp aws-java-sdk-s3-1.10.6.jar /opt/hadoop/share/hadoop/tools/lib/
#cp hadoop-aws-2.8.4.jar /opt/hadoop/share/hadoop/tools/lib/
echo « exporter
HIVE_AUX_JARS_PATH=${HADOOP_HOME}/share/hadoop/tools/lib/aws-java-sdk-core-1.10.6.jar:${HADOOP_HOME}/share/hadoop/tools/lib/aws-java-sdk-s3
1.10.6.jar:${HADOOP_HOME}/share/hadoop/tools/lib/hadoop-aws-2.8.4.jar" >>/opt/hive/conf/hive-env.sh
Étape 11 :
Configurer et démarrer la ruche
cp /opt/hive/conf/hive-default.xml.template /opt/hive/conf/hive-site.xml
mkdir -p /opt/hive/hcatalog/var/log
bin/schematool -dbType derby -initSchema
bin/hcatalog/sbin/hcat_server.sh start
Étape 12 :
Créez le fichier /opt/presto-server/etc/catalog/hive.properties, ajoutez le point de terminaison de la ruche à presto, ce fichier doit être ajouté sur les conteneurs de coordinateur et de travail.
Si vous choisissez de valider à l’aide du compartiment AWS S3, fournissez des informations d’identification de sécurité pour le même.
connector.name=hive-hadoop2
hive.metastore.uri=thrift://localhost:9083
hive.s3.aws-access-key=<Your AWS Key>
hive.s3.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 hive comme catalogue
bash-4.2# presto-cli --server localhost:8080 --catalog hive
Étape 15 :
Créez un schéma à l’aide de l’emplacement local ou S3.
presto:default> create schema tpch with (location='file:///root');
CREATE SCHEMA
presto:default> use tpch;
Si vous avez accès au compartiment S3, utilisez la commande de création suivante en utilisant s3 comme destination
presto:default> create schema tpch with (location='s3a://bucket_name');
CREATE SCHEMA
presto:default> use tpch;
Étape 16 :
Hive a l’option de créer deux types de table, ils sont
- Tables gérées
- Tables externes
Les tables gérées sont étroitement associées aux données sur la destination, ce qui signifie que si vous supprimez une table, les données associées seront également supprimées.
Les tables externes sont faiblement couplées aux données, ce qui signifie qu’elles conservent un pointeur vers les données. Ainsi, la suppression de la table ne supprimera pas les données de l’emplacement externe.
La sémantique transactionnelle (ACID) n’est prise en charge que sur les tables gérées.
Nous allons créer une table gérée sous le schéma hive.tpch
Créer une table sous le schéma hive.tpch
presto:tpch> create table hive.tpch.lineitem with (format="PARQUET") AS SELECT * FROM tpch.sf1.lineitem;
CREATE TABLE: 6001215 rows
Query 20210921_051649_00015_uvkq7, FINISHED, 2 nodes
Splits: 19 total, 19 done (100.00%)
1:48 [6M rows, 0B] [55.4K rows/s, 0B/s]
Étape 17 :
Faites une table desc pour voir la table.
presto> desc hive.tpch.lineitem
-> ;
Column | Type | Extra | Comment
---------------+-------------+-------+---------
orderkey | bigint | |
partkey | bigint | |
suppkey | bigint | |
linenumber | integer | |
quantity | double | |
extendedprice | double | |
discount | double | |
tax | double | |
returnflag | varchar(1) | |
linestatus | varchar(1) | |
shipdate | date | |
commitdate | date | |
receiptdate | date | |
shipinstruct | varchar(25) | |
shipmode | varchar(10) | |
comment | varchar(44) | |
(16 rows)
Query 20210922_224518_00002_mfm8x, FINISHED, 4 nodes
Splits: 53 total, 53 done (100.00%)
0:08 [16 rows, 1.04KB] [1 rows/s, 129B/s]
Sommaire
Dans ce didacticiel, nous fournissons des étapes pour utiliser Presto avec Hive Metastore en tant que catalogue sur un ordinateur portable. De plus, AWS Glue peut également être utilisé comme catalogue pour PrestoDB.