Utiliser Apache Sqoop pour échanger des données entre Apache Hadoop sur HDInsight et Azure SQL Database
Apprenez à utiliser Apache Sqoop pour échanger des données entre un cluster Apache Hadoop dans Azure HDInsight et Azure SQL Database ou Microsoft SQL Server. Les étapes décrites dans ce document utilisent la commande sqoop
directement à partir du nœud principal du cluster Hadoop. Vous utilisez SSH pour vous connecter au nœud principal et exécutez les commandes décrites dans ce document. Cet article est la suite de Utiliser Apache Sqoop avec Hadoop dans HDInsight.
Prérequis
Avoir effectué Configurer un environnement de test dans Utiliser Apache Sqoop avec Hadoop dans HDInsight.
Un client SSH. Pour plus d’informations, consultez Se connecter à HDInsight (Apache Hadoop) à l’aide de SSH.
Vous êtes familiarisé avec Sqoop. Pour plus d’informations, consultez le Guide de l’utilisateur Sqoop.
Configurer
Utilisez la commande ssh pour vous connecter à votre cluster. Modifiez la commande ci-dessous en remplaçant CLUSTERNAME par le nom de votre cluster, puis entrez la commande :
ssh sshuser@CLUSTERNAME-ssh.azurehdinsight.net
Pour faciliter l’utilisation, définissez des variables. Remplacez
PASSWORD
,MYSQLSERVER
etMYDATABASE
par les valeurs pertinentes, puis entrez les commandes suivantes :export PASSWORD='PASSWORD' export SQL_SERVER="MYSQLSERVER" export DATABASE="MYDATABASE" export SERVER_CONNECT="jdbc:sqlserver://$SQL_SERVER.database.windows.net:1433;user=sqluser;password=$PASSWORD" export SERVER_DB_CONNECT="jdbc:sqlserver://$SQL_SERVER.database.windows.net:1433;user=sqluser;password=$PASSWORD;database=$DABATASE"
Exportation de Sqoop
De Hive vers SQL.
Pour vérifier que Sqoop peut voir votre base de données, entrez la commande ci-dessous dans votre connexion SSH ouverte. Cette commande retourne une liste de bases de données.
sqoop list-databases --connect $SERVER_CONNECT
Entrez la commande suivante pour afficher une liste des tables de la base de données spécifiée :
sqoop list-tables --connect $SERVER_DB_CONNECT
Pour exporter des données depuis la table Hive
hivesampletable
vers la tablemobiledata
dans votre base de données, entrez la commande ci-dessous dans votre connexion SSH ouverte :sqoop export --connect $SERVER_DB_CONNECT \ -table mobiledata \ --hcatalog-table hivesampletable
Pour vérifier que les données ont été exportées, exécutez les requêtes suivantes à partir de votre connexion SSH pour voir les données exportées :
sqoop eval --connect $SERVER_DB_CONNECT \ --query "SELECT COUNT(*) from dbo.mobiledata WITH (NOLOCK)" sqoop eval --connect $SERVER_DB_CONNECT \ --query "SELECT TOP(10) * from dbo.mobiledata WITH (NOLOCK)"
Importation de Sqoop
De SQL vers le stockage Azure.
Entrez la commande ci-dessous dans votre connexion SSH ouverte pour importer des données de la table
mobiledata
dans SQL vers le répertoirewasbs:///tutorials/usesqoop/importeddata
sur HDInsight. Les champs dans les données sont séparés par un caractère de tabulation et les lignes se terminent par un caractère de nouvelle ligne.sqoop import --connect $SERVER_DB_CONNECT \ --table mobiledata \ --target-dir 'wasb:///tutorials/usesqoop/importeddata' \ --fields-terminated-by '\t' \ --lines-terminated-by '\n' -m 1
Vous pouvez aussi spécifier une table Hive :
sqoop import --connect $SERVER_DB_CONNECT \ --table mobiledata \ --target-dir 'wasb:///tutorials/usesqoop/importeddata2' \ --fields-terminated-by '\t' \ --lines-terminated-by '\n' \ --create-hive-table \ --hive-table mobiledata_imported2 \ --hive-import -m 1
Une fois l’importation terminée, entrez la commande suivante dans votre connexion SSH ouverte pour lister les données dans le nouveau répertoire :
hadoop fs -tail /tutorials/usesqoop/importeddata/part-m-00000
Utilisez beeline pour vérifier que la table a été créée dans Hive.
Se connecter
beeline -u 'jdbc:hive2://headnodehost:10001/;transportMode=http'
Exécutez les requêtes suivantes l’une après l’autre et examinez la sortie :
show tables; describe mobiledata_imported2; SELECT COUNT(*) FROM mobiledata_imported2; SELECT * FROM mobiledata_imported2 LIMIT 10;
Quittez beeline en exécutant
!exit
.
Limites
Exportation en bloc : avec HDInsight sous Linux, le connecteur Sqoop utilisé pour exporter des données vers SQL ne prend pas en charge les insertions en bloc.
Traitement par lots : avec HDInsight sous Linux, lorsque vous utilisez le commutateur
-batch
pour effectuer des insertions, Sqoop effectue plusieurs insertions plutôt qu’un traitement par lots des opérations d’insertion.
Points importants à prendre en compte
HDInsight et SQL Server doivent figurer sur le même réseau Azure Virtual Network.
Pour découvrir un exemple, consultez le document Procédure de connexion du service HDInsight à votre réseau local.
Pour découvrir plus d’informations sur l’utilisation de HDInsight avec un Réseau virtuel Azure, voir le document sur la procédure d’extension du service HDInsight avec Réseau virtuel Azure. Pour plus d’informations sur Azure Virtual Network, voir Présentation du réseau virtuel.
Le serveur SQL Server doit également être configuré pour autoriser l’authentification SQL. Pour plus d’informations, consultez le document Choisir un mode d’authentification.
Vous devez configurer SQL Server pour qu’il accepte les connexions à distance.
Étapes suivantes
Vous maîtrisez à présent l’utilisation de Sqoop. Pour plus d'informations, consultez les rubriques suivantes :
- Utiliser Apache Oozie avec HDInsight : Utilisez l’action Sqoop dans un workflow Oozie.
- Analyser des données sur les retards de vol avec HDInsight : Utilisez Interactive Query pour analyser des données sur les retards de vol, puis utilisez Sqoop pour exporter ces données vers une base de données dans Azure.
- Chargez des données dans HDInsight : Découvrez d’autres méthodes pour charger des données dans HDInsight ou le stockage Blob Azure.