Freigeben über


Ausführen von Apache Sqoop-Aufträgen in HDInsight mit Curl

Erfahren Sie, wie Sie Apache Sqoop-Aufträge mithilfe von Curl in einem Apache Hadoop-Cluster in HDInsight ausführen können. In diesem Artikel wird veranschaulicht, wie Sie Daten aus Azure Storage exportieren und mit Curl in eine SQL Server-Datenbank importieren. Dieser Artikel ist eine Fortsetzung von Verwenden von Apache Sqoop mit Hadoop in HDInsight.

Curl wird verwendet, um zu veranschaulichen, wie Sie über unformatierte HTTP-Anforderungen zum Ausführen, Überwachen und Abrufen der Ergebnisse der Sqoop-Aufträge mit HDInsight interagieren können. Dies funktioniert mithilfe der WebHCat REST-API (ehemals Templeton), die von Ihrem HDInsight-Cluster bereitgestellt wird.

Voraussetzungen

Übermitteln von Apache Sqoop-Aufträgen mithilfe von Curl.

Verwenden Sie Curl, um Daten mit Apache Sqoop-Aufträgen aus Azure Storage für SQL Server zu exportieren.

Hinweis

Wenn Sie Curl oder eine andere REST-Kommunikation mit WebHCat verwenden, müssen Sie die Anforderungen authentifizieren, indem Sie den Benutzernamen und das Kennwort des Administrators des HDInsight-Clusters bereitstellen. Sie müssen auch den Clusternamen als Teil des URIs (Uniform Resource Identifier) verwenden, um die Anforderungen an den Server zu senden.

Ersetzen Sie beim Verwenden der Befehle in diesem Abschnitt die Option USERNAME zur Authentifizierung im Cluster durch den Benutzer und PASSWORD durch das Kennwort für das Benutzerkonto. Ersetzen Sie CLUSTERNAME durch den Namen Ihres Clusters.

Die REST-API wird durch Standardauthentifizierunggesichert. Sie sollten Anforderungen immer über HTTPS (Secure HTTP) stellen, um sicherzustellen, dass Ihre Anmeldeinformationen sicher an den Server gesendet werden.

  1. Legen Sie zur Verbesserung der Benutzerfreundlichkeit die unten aufgeführten Variablen fest. Dieses Beispiel basiert auf einer Windows-Umgebung, die nach Bedarf für Ihre Umgebung überarbeitet werden kann.

    set CLUSTERNAME=
    set USERNAME=admin
    set PASSWORD=
    set SQLDATABASESERVERNAME=
    set SQLDATABASENAME=
    set SQLPASSWORD=
    set SQLUSER=sqluser
    
  2. Verwenden Sie den folgenden Befehl in einer Befehlszeile, um zu überprüfen, ob Sie die Verbindung zum HDInsight-Cluster herstellen können:

    curl -u %USERNAME%:%PASSWORD% -G https://%CLUSTERNAME%.azurehdinsight.net/templeton/v1/status
    

    Sie sollten eine Antwort empfangen, die in etwa der im Folgenden aufgeführten entspricht:

    {"status":"ok","version":"v1"}
    
  3. Geben Sie den folgenden Befehl an, um einen Sqoop-Auftrag zu übermitteln:

    curl -u %USERNAME%:%PASSWORD% -d user.name=%USERNAME% -d command="export --connect jdbc:sqlserver://%SQLDATABASESERVERNAME%.database.windows.net;user=%SQLUSER%@%SQLDATABASESERVERNAME%;password=%PASSWORD%;database=%SQLDATABASENAME% --table log4jlogs --export-dir /example/data/sample.log --input-fields-terminated-by \0x20 -m 1" -d statusdir="wasb:///example/data/sqoop/curl" https://%CLUSTERNAME%.azurehdinsight.net/templeton/v1/sqoop
    

    Folgende Parameter werden in diesem Befehl verwendet:

    • -d: Da -G nicht verwendet wird, verwendet die Anforderung standardmäßig die POST-Methode. -d gibt die Datenwerte an, die mit der Anforderung gesendet werden.

      • user.name – Der Benutzer, der den Befehl ausführt

      • command – Der auszuführende Sqoop-Befehl.

      • statusdir – Das Verzeichnis, in das die Statusangaben für diesen Auftrag geschrieben werden.

      Dieser Befehl gibt eine Auftrags-ID zurück, mit der der Status des Auftrags überprüft werden kann.

      {"id":"job_1415651640909_0026"}
      
  4. Verwenden Sie den folgenden Befehl, um den Status des Auftrags zu prüfen. Ersetzen Sie JOBID durch den Wert, der im vorherigen Schritt zurückgegeben wurde. Wenn der Rückgabewert z. B. {"id":"job_1415651640909_0026"} lautet, wäre JOBID entsprechend job_1415651640909_0026. Ändern Sie den Speicherort von jq nach Bedarf.

    set JOBID=job_1415651640909_0026
    
    curl -G -u %USERNAME%:%PASSWORD% -d user.name=%USERNAME% https://%CLUSTERNAME%.azurehdinsight.net/templeton/v1/jobs/%JOBID% | C:\HDI\jq-win64.exe .status.state
    

    Wenn der Auftrag abgeschlossen ist, wird der Status ERFOLGREICHangezeigt.

    Hinweis

    Diese Curl-Anforderung gibt ein JSON-Dokument (JavaScript Object Notation) mit Informationen zum Auftrag zurück. Mithilfe von "jq" wird nur der Statuswert abgerufen.

  5. Sobald der Status des Auftrags zu ERFOLGREICH wechselt, können Sie die Ergebnisse des Auftrags aus Azure Blob Storage abrufen. Der mit der Abfrage übergebene Parameter statusdir enthält den Speicherort der Ausgabedatei. In diesem Fall ist dies wasb:///example/data/sqoop/curl. Diese Adresse speichert die Ausgabe des Auftrags im Verzeichnis example/data/sqoop/curl des Standardspeichercontainers, der von Ihrem HDInsight-Cluster verwendet wird.

    Sie können über das Azure-Portal auf die Blobs „stderr“ und „stdout“ zugreifen.

  6. Um zu überprüfen, ob Daten exportiert wurden, führen Sie auf Ihrem SQL-Client die folgenden Abfragen zum Anzeigen der exportierten Daten aus:

    SELECT COUNT(*) FROM [dbo].[log4jlogs] WITH (NOLOCK);
    SELECT TOP(25) * FROM [dbo].[log4jlogs] WITH (NOLOCK);
    

Einschränkungen

  • Massenexport: Bei Linux-basiertem HDInsight unterstützt der zum Exportieren von Daten nach Microsoft SQL Server oder Azure SQL-Datenbank verwendete Sqoop-Connector derzeit keine Masseneinfügungen.
  • 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.

Zusammenfassung

Wie in diesem Dokument veranschaulicht, können Sie unformatierte HTTP-Anforderungen dazu verwenden, um Sqoop-Aufträge auf dem HDInsight-Cluster auszuführen, zu überwachen und deren Ergebnisse anzuzeigen.

Weitere Informationen zur REST-Schnittstelle, die in diesem Artikel verwendet wird, finden Sie unter Sqoop REST API Guide (Leitfaden zur Sqoop-REST-API).

Nächste Schritte

Verwenden von Sqoop mit Hadoop in HDInsight

Weitere HDInsight-Artikel zu curl: