Comment utiliser une base de données PostgreSQL comme metastore externe pour Hive sur Amazon EMR ?
Je souhaite utiliser un Amazon Relational Database Service (Amazon RDS) pour l'instance de base de données PostgreSQL comme metastore externe pour Apache Hive sur Amazon EMR.
Solution
Avant de commencer, notez les points suivants :
- Cette solution suppose qu'une base de données PostgreSQL est déjà active.
- Si vous utilisez Amazon EMR version 5.7 ou une version antérieure, téléchargez le pilote JDBC PostgreSQL. Ensuite, ajoutez le pilote au chemin de la bibliothèque Hive (/usr/lib/hive/lib). Les versions 5.8.0 d'Amazon EMR et versions ultérieures sont fournies avec le pilote JDBC PostgreSQL dans le chemin de la bibliothèque Hive.
Pour configurer une instance de base de données PostgreSQL comme metastore externe pour Hive, procédez comme suit :
1. Créez une instance de bases de données Amazon RDS for PostgreSQL et créez la base de données. Notez que vous pouvez le faire lors de la création de l'instance de bases de données à partir d'Amazon RDS dans la console AWS. Vous pouvez spécifier le nom de la base de données dans le champ Nom de base de données initial sous Configuration supplémentaire. Vous pouvez également connecter l'instance de base de données PostgreSQL, puis créer la base de données.
2. Modifiez le groupe de sécurité de l'instance de base de données pour autoriser les connexions sur le port 5432 entre votre base de données et le groupe de sécurité ElasticMapReduce-master. Pour plus d'informations, consultez Groupes de sécurité VPC.
3. Lancez un cluster Amazon EMR sans métastore externe. Amazon EMR utilise la base de données MySQL par défaut dans ce cas.
4. Connectez-vous au nœud principal en utilisant SSH.
5. Remplacez la configuration Hive par les propriétés suivantes.
Remplacez les valeurs suivantes dans l'exemple :
mypostgresql.testabcd1111.us-west-2.rds.amazonaws.com par le point de terminaison de votre instance de base de données
mypgdb par le nom de votre base de données PostgreSQL
database_username par le nom d'utilisateur de l'instance de base de données
database_password par le mot de passe de l'instance de base de données
[hadoop@ip-X-X-X-X ~]$ sudo vi /etc/hive/conf/hive-site.xml <property> <name>javax.jdo.option.ConnectionURL</name> <value>jdbc:postgresql://mypostgresql.testabcd1111.us-west-2.rds.amazonaws.com:5432/mypgdb</value> <description>PostgreSQL JDBC driver connection URL</description> </property> <property> <name>javax.jdo.option.ConnectionDriverName</name> <value>org.postgresql.Driver</value> <description>PostgreSQL metastore driver class name</description> </property> <property> <name>javax.jdo.option.ConnectionUserName</name> <value>database_username</value> <description>the username for the DB instance</description> </property> <property> <name>javax.jdo.option.ConnectionPassword</name> <value>database_password</value> <description>the password for the DB instance</description> </property>
6. Exécutez les commandes suivantes pour créer le schéma PostgreSQL :
[hadoop@ip-X-X-X-X ~]$ cd /usr/lib/hive/bin/ [hadoop@ip-X-X-X-X bin]$ ./schematool -dbType postgres -initSchema Metastore connection URL: jdbc:postgresql://mypostgresql.testabcd1111.us-west-2.rds.amazonaws.com:5432/mypgdb Metastore Connection Driver : org.postgresql.Driver Metastore connection User: test Starting metastore schema initialization to 2.3.0 Initialization script hive-schema-2.3.0.postgres.sql Initialization script completed schemaTool completed
7. Arrêtez et démarrez les services Hive pour appliquer les paramètres mis à jour :
[hadoop@ip-X-X-X-X bin]$ sudo initctl list |grep -i hive hive-server2 start/running, process 11818 hive-hcatalog-server start/running, process 12708 [hadoop@ip-X-X-X-X9 bin]$ sudo stop hive-server2 hive-server2 stop/waiting [hadoop@ip-X-X-X-X bin]$ sudo stop hive-hcatalog-server hive-hcatalog-server stop/waiting [hadoop@ip-X-X-X-X bin]$ sudo start hive-server2 hive-server2 start/running, process 18798 [hadoop@ip-X-X-X-X bin]$ sudo start hive-hcatalog-server hive-hcatalog-server start/running, process 19614
Vous pouvez choisir d'automatiser les étapes 5 à 7 du processus précédent en exécutant le script bash suivant (hive_postgres_emr_step.sh) en tant que tâche d’étape dans le cluster EMR.
## Automated Bash script to update the hive-site.xml and restart Hive ## Parameters rds_db_instance_endpoint='<rds_db_instance_endpoint>' rds_db_instance_port='<rds_db_instance_port>' rds_db_name='<rds_db_name>' rds_db_instance_username='<rds_db_instance_username>' rds_db_instance_password='<rds_db_instance_username>' ############################# Copying the original hive-site.xml sudo cp /etc/hive/conf/hive-site.xml /tmp/hive-site.xml ############################# Changing the JDBC URL old_jdbc=`grep "javax.jdo.option.ConnectionURL" -A +3 -B 1 /tmp/hive-site.xml | grep "<value>" | xargs` sudo sed -i "s|$old_jdbc|<value>jdbc:postgresql://$rds_db_instance_endpoint:$rds_db_instance_port/$rds_db_name</value>|g" /tmp/hive-site.xml ############################# Changing the Driver name old_driver_name=`grep "javax.jdo.option.ConnectionDriverName" -A +3 -B 1 /tmp/hive-site.xml | grep "<value>" | xargs` sudo sed -i "s|$old_driver_name|<value>org.postgresql.Driver</value>|g" /tmp/hive-site.xml ############################# Changing the database user old_db_username=`grep "javax.jdo.option.ConnectionUserName" -A +3 -B 1 /tmp/hive-site.xml | grep "<value>" | xargs` sudo sed -i "s|$old_db_username|<value>$rds_db_instance_username</value>|g" /tmp/hive-site.xml ############################# Changing the database password and description connection_password=`grep "javax.jdo.option.ConnectionPassword" -A +3 -B 1 /tmp/hive-site.xml | grep "<value>" | xargs` sudo sed -i "s|$connection_password|<value>$rds_db_instance_password</value>|g" /tmp/hive-site.xml old_password_description=`grep "javax.jdo.option.ConnectionPassword" -A +3 -B 1 /tmp/hive-site.xml | grep "<description>" | xargs` new_password_description='<description>the password for the DB instance</description>' sudo sed -i "s|$password_description|$new_password_description|g" /tmp/hive-site.xml ############################# Moving hive-site to backup sudo mv /etc/hive/conf/hive-site.xml /etc/hive/conf/hive-site.xml_bkup sudo mv /tmp/hive-site.xml /etc/hive/conf/hive-site.xml ############################# Init Schema for Postgres /usr/lib/hive/bin/schematool -dbType postgres -initSchema ############################# Restart Hive ## Check Amazon Linux version and restart Hive OS_version=`uname -r` if [[ "$OS_version" == *"amzn2"* ]]; then echo "Amazon Linux 2 instance, restarting Hive..." sudo systemctl stop hive-server2 sudo systemctl stop hive-hcatalog-server sudo systemctl start hive-server2 sudo systemctl start hive-hcatalog-server elif [[ "$OS_version" == *"amzn1"* ]]; then echo "Amazon Linux 1 instance, restarting Hive" sudo stop hive-server2 sudo stop hive-hcatalog-server sudo start hive-server2 sudo start hive-hcatalog-server else echo "ERROR: OS version different from AL1 or AL2." fi echo "--------------------COMPLETED--------------------"
Veillez à remplacer les valeurs suivantes dans le script :
- rds_db_instance_endpoint par le point de terminaison de votre instance de base de données
- rds_db_instance_port avec le port par le port de votre instance de bases de données
- rds_db_name par le nom de votre base de données PostgreSQL
- rds_db_instance_username par le nom d'utilisateur de l'instance de base de données
- rds_db_instance_password par le mot de passe de l'instance de base de données
Chargez le script sur Amazon S3. Vous pouvez exécuter le script en tant que tâche d’étape à l'aide de la console Amazon EMR, de AWS Command Line Interface (AWS CLI) ou de l'API. Pour utiliser la console Amazon EMR afin d'exécuter le script, procédez comme suit :
1. Ouvrez la console Amazon EMR.
2. Sur la page Liste des clusters, sélectionnez le lien correspondant à votre cluster.
3. Sur la page Détails du cluster, choisissez l'onglet Steps (Étapes).
4. Dans l'onglet Steps (Étapes), choisissez Add step (Ajouter une étape).
5. Dans la boîte de dialogue Ajouter une étape, conservez les valeurs par défaut pour Step type (Type d'étape) et Name (Nom).
6. Pour JAR location (emplacement du fichier JAR), saisissez ce qui suit :
command-runner.jar
7. Pour Arguments, saisissez ce qui suit :
bash -c "aws s3 cp s3://example_bucket/script/hive_postgres_emr_step.sh .; chmod +x hive_postgres_emr_step.sh; ./hive_postgres_emr_step.sh"
Remplacez l'emplacement S3 de la commande par l'emplacement où vous avez stocké le script.
8. Choisissez Add (Ajouter) pour exécuter la tâche d’étape.
Une fois la tâche d'étape terminée, procédez comme suit pour vérifier les mises à jour de la configuration de Hive :
1. Connectez-vous au shell Hive, puis créez une table Hive.
Remarque : assurez-vous de remplacer test_postgres dans l’exemple par le nom de votre table Hive.
[hadoop@ip-X-X-X-X bin]$ hive Logging initialized using configuration in file:/etc/hive/conf.dist/hive-log4j2.properties Async: true hive> show databases; OK default Time taken: 0.569 seconds, Fetched: 1 row(s) hive> create table test_postgres(a int,b int); OK Time taken: 0.708 seconds
2. Installez PostgreSQL :
[hadoop@ip-X-X-X-X bin]$ sudo yum install postgresql
3. Connectez-vous à l'instance de base de données PostgreSQL en utilisant la ligne de commande.
Remplacez les valeurs suivantes dans la commande :
mypostgresql.testabcd1111.us-west-2.rds.amazonaws.com par le point de terminaison de votre instance de base de données
mypgdb par le nom de votre base de données PostegreSQL
database_username par le nom d'utilisateur de l'instance de base de données
[hadoop@ip-X-X-X-X bin]$ psql --host=mypostgresql.testabcd1111.us-west-2.rds.amazonaws.com --port=5432 --username=database_username --password --dbname=mypgdb
4. Lorsque vous y êtes invité, saisissez le mot de passe de l'instance de base de données.
5. Exécutez la commande suivante pour vérifier que vous pouvez accéder à la table Hive que vous avez créée :
mypgdb=> select * from "TBLS"; TBL_ID | CREATE_TIME | DB_ID | LAST_ACCESS_TIME | OWNER | RETENTION | SD_ID | TBL_NAME | TBL_TYPE | VIEW_EXPANDED_TEXT | VIEW_ORIGINAL_TEXT | IS_REWRITE_ENABLED --------+-------------+-------+------------------+--------+-----------+-------+---------------+---------------+--------------------+--------------------+-------------------- 1 | 1555014961 | 1 | 0 | hadoop | 0 | 1 | test_postgres | MANAGED_TABLE | | | f (1 row)
Votre cluster Amazon EMR utilise maintenant la base de données PostgreSQL comme metastore externe pour Hive.
Informations connexes
Configuration d'un metastore externe pour Hive
Connexion à une instance de base de données exécutant le moteur de base de données PostgreSQL
Contenus pertinents
- demandé il y a un anlg...
- demandé il y a 8 moislg...
- demandé il y a 3 moislg...
- demandé il y a un anlg...
- demandé il y a un anlg...
- AWS OFFICIELA mis à jour il y a 2 ans
- AWS OFFICIELA mis à jour il y a un an
- AWS OFFICIELA mis à jour il y a 2 ans