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
Die unter Verwenden von Apache Sqoop mit Hadoop in HDInsight beschriebene Einrichtung der Testumgebung muss abgeschlossen sein.
Ein Client zum Abfragen der Azure SQL-Datenbank. Erwägen Sie die Verwendung von SQL Server Management Studio oder Visual Studio Code.
Curl. Curl ist ein Tool zum Übertragen von Daten aus einem oder in einen HDInsight-Cluster.
jq. Das Hilfsprogramm jq wird verwendet, um die von REST-Anforderungen zurückgegebenen JSON-Daten zu verarbeiten.
Vertrautheit mit Sqoop. Weitere Informationen finden Sie im Sqoop-Benutzerhandbuch.
Ü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.
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
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"}
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"}
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äreJOBID
entsprechendjob_1415651640909_0026
. Ändern Sie den Speicherort vonjq
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.
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 dieswasb:///example/data/sqoop/curl
. Diese Adresse speichert die Ausgabe des Auftrags im Verzeichnisexample/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.
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: