Importieren und Exportieren von Daten zwischen Apache Hadoop unter HDInsight und Azure SQL-Datenbank mithilfe von Apache Sqoop

Erfahren Sie, wie Sie Apache Sqoop zum Importieren und Exportieren von Daten zwischen einem Apache Hadoop-Cluster unter Azure HDInsight und Azure SQL-Datenbank oder Microsoft SQL Server verwenden. Die Schritte in diesem Artikel verwenden den Befehl sqoop direkt vom Hauptknoten des Hadoop-Clusters aus. Sie können SSH verwenden, um die Verbindung zum Hauptknoten herzustellen und die Befehle in diesem Artikel auszuführen. Dieser Artikel ist eine Fortsetzung von Verwenden von Apache Sqoop mit Hadoop in HDInsight.

Voraussetzungen

Einrichten

  1. Verwenden Sie einen ssh-Befehl zum Herstellen der Verbindung mit dem Cluster. Bearbeiten Sie den folgenden Befehl, indem Sie CLUSTERNAME durch den Namen Ihres Clusters ersetzen, und geben Sie den Befehl dann ein:

    ssh sshuser@CLUSTERNAME-ssh.azurehdinsight.net
    
  2. Legen Sie zur Verbesserung der Benutzerfreundlichkeit Variablen fest. Ersetzen Sie PASSWORD, MYSQLSERVER und MYDATABASE durch die entsprechenden Werte, und geben Sie dann die folgenden Befehle ein:

    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"
    

Sqoop-Export

Aus Hive in SQL.

  1. Geben Sie den folgenden Befehl in der geöffneten SSH-Verbindung ein, um sicherzustellen, dass Sqoop Ihre Datenbank sehen kann. Dieser Befehl gibt eine Liste von Datenbanken zurück.

    sqoop list-databases --connect $SERVER_CONNECT
    
  2. Geben Sie den folgenden Befehl ein, um eine Liste von Tabellen für die angegebene Datenbank anzuzeigen:

    sqoop list-tables --connect $SERVER_DB_CONNECT
    
  3. Geben Sie den folgenden Befehl in Ihre offene SSH-Verbindung ein, um Daten aus der Hive-Tabelle hivesampletable in die Tabelle mobiledata in Ihre Datenbank zu exportieren:

    sqoop export --connect $SERVER_DB_CONNECT \
    -table mobiledata \
    --hcatalog-table hivesampletable
    
  4. Verwenden Sie die folgenden Abfragen über Ihre SSH-Verbindung, um die exportierten Daten anzuzeigen und zu überprüfen, ob die Daten exportiert wurden:

    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)"
    

Sqoop-Import

Aus SQL in Azure Storage.

  1. Geben Sie den folgenden Befehl in der geöffneten SSH-Verbindung ein, um Daten aus der Tabelle mobiledata in SQL in das Verzeichnis wasbs:///tutorials/usesqoop/importeddata in HDInsight zu importieren. In den Daten sind die Felder durch ein Tabstoppzeichen getrennt und die Zeilen durch ein Zeilenumbruchzeichen abgeschlossen.

    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. Alternativ können Sie auch eine Hive-Tabelle festlegen:

    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. Nachdem der Import abgeschlossen ist, geben Sie in der geöffneten SSH-Verbindung den folgenden Befehl ein, um die Daten im neuen Verzeichnis aufzulisten:

    hadoop fs -tail /tutorials/usesqoop/importeddata/part-m-00000
    
  4. Verwenden Sie Beeline, um zu überprüfen, ob die Tabelle in Hive erstellt wurde.

    1. Verbinden

      beeline -u 'jdbc:hive2://headnodehost:10001/;transportMode=http'
      
    2. Führen Sie alle der folgenden Abfragen einzeln aus, und überprüfen Sie die Ausgabe:

      show tables;
      describe mobiledata_imported2;
      SELECT COUNT(*) FROM mobiledata_imported2;
      SELECT * FROM mobiledata_imported2 LIMIT 10;
      
    3. Beenden Sie Beeline mit dem Befehl !exit.

Einschränkungen

  • Massenexport: Bei Linux-basiertem HDInsight unterstützt der zum Exportieren von Daten nach SQL verwendete Sqoop-Connector keine Masseneinfügung.

  • Batchverarbeitung: Wenn Sie in Linux-basiertem HDInsight zum Ausführen von Einfügevorgängen den Schalter -batch verwenden, führt Sqoop mehrere Einfügevorgänge aus, anstatt diese zu einem Batch zusammenzufassen.

Wichtige Hinweise

Nächste Schritte

Sie haben nun gelernt, wie Sie Sqoop verwenden. Weitere Informationen finden Sie unter: