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

Configurer

  1. 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
    
  2. Pour faciliter l’utilisation, définissez des variables. Remplacez PASSWORD, MYSQLSERVERet MYDATABASE 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.

  1. 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
    
  2. 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
    
  3. Pour exporter des données depuis la table Hive hivesampletable vers la table mobiledata 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
    
  4. 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.

  1. Entrez la commande ci-dessous dans votre connexion SSH ouverte pour importer des données de la table mobiledata dans SQL vers le répertoire wasbs:///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
    
  2. 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
    
  3. 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
    
  4. Utilisez beeline pour vérifier que la table a été créée dans Hive.

    1. Se connecter

      beeline -u 'jdbc:hive2://headnodehost:10001/;transportMode=http'
      
    2. 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;
      
    3. 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

Étapes suivantes

Vous maîtrisez à présent l’utilisation de Sqoop. Pour plus d'informations, consultez les rubriques suivantes :