Köra Apache Sqoop-jobb i HDInsight med Curl
Lär dig hur du använder Curl för att köra Apache Sqoop-jobb i ett Apache Hadoop-kluster i HDInsight. Den här artikeln visar hur du exporterar data från Azure Storage och importerar dem till en SQL Server databas med curl. Den här artikeln är en fortsättning på Använda Apache Sqoop med Hadoop i HDInsight.
Curl används för att visa hur du kan interagera med HDInsight med hjälp av råa HTTP-begäranden för att köra, övervaka och hämta resultatet av Sqoop-jobb. Detta fungerar med hjälp av WebHCat REST API (tidigare känt som Templeton) som tillhandahålls av ditt HDInsight-kluster.
Förutsättningar
Slutförande av Konfiguration av testmiljö från Använd Apache Sqoop med Hadoop i HDInsight.
En klient för att fråga Azure SQL-databasen. Överväg att använda SQL Server Management Studio eller Visual Studio Code.
Curl. Curl är ett verktyg för att överföra data från eller till ett HDInsight-kluster.
jq. Jq-verktyget används för att bearbeta JSON-data som returneras från REST-begäranden.
Kunskaper om Sqoop. Mer information finns i Användarhandbok för Sqoop.
Skicka Apache Sqoop-jobb med hjälp av Curl
Använd Curl för att exportera data med Apache Sqoop-jobb från Azure Storage för att SQL Server.
Anteckning
När du använder Curl eller annan REST-kommunikation med WebHCat, måste du autentisera begärandena genom att ange användarnamn och lösenord för HDInsight-klustrets administratör. Du måste också använda klustrets namn som en del av den URI (Uniform Resource Identifier) som används för att skicka begäranden till servern.
För kommandona i det här avsnittet ersätter USERNAME
du med användaren för att autentisera till klustret och ersätter PASSWORD
med lösenordet för användarkontot. Ersätt CLUSTERNAME
med namnet på klustret.
REST API skyddas via grundläggande autentisering. Du bör alltid göra begäranden genom att använda säker HTTP (HTTPS) för att säkerställa att dina autentiseringsuppgifter skickas på ett säkert sätt till servern.
För enkel användning anger du variablerna nedan. Det här exemplet baseras på en Windows-miljö och revideras efter behov för din miljö.
set CLUSTERNAME= set USERNAME=admin set PASSWORD= set SQLDATABASESERVERNAME= set SQLDATABASENAME= set SQLPASSWORD= set SQLUSER=sqluser
Använd följande kommando från en kommandorad för att verifiera att du kan ansluta till ditt HDInsight-kluster:
curl -u %USERNAME%:%PASSWORD% -G https://%CLUSTERNAME%.azurehdinsight.net/templeton/v1/status
Du bör få ett svar som liknar följande:
{"status":"ok","version":"v1"}
Använd följande för att skicka ett sqoop-jobb:
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
De parametrar som används i det här kommandot är följande:
-d – Eftersom
-G
inte används används standardinställningen för begäran till POST-metoden.-d
anger de datavärden som skickas med begäran.user.name – Den användare som kör kommandot.
command – Sqoop-kommandot som ska köras.
statusdir – den katalog som jobbets status skrivs till.
Det här kommandot returnerar ett jobb-ID som kan användas för att kontrollera jobbets status.
{"id":"job_1415651640909_0026"}
Använd följande kommando för att kontrollera jobbets status. Ersätt
JOBID
med värdet som returnerades i föregående steg. Om returvärdet till exempel var{"id":"job_1415651640909_0026"}
skulle detJOBID
varajob_1415651640909_0026
. Ändra platsen förjq
efter behov.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
Om jobbet har slutförts kommer tillståndet att lyckas.
Anteckning
Den här Curl-begäran returnerar ett JSON-dokument (JavaScript Object Notation) med information om jobbet. jq används för att endast hämta tillståndsvärdet.
När jobbets tillstånd har ändrats till SUCCEEDED kan du hämta resultatet av jobbet från Azure Blob Storage. Parametern
statusdir
som skickas med frågan innehåller platsen för utdatafilen. I det här falletwasb:///example/data/sqoop/curl
. Den här adressen lagrar utdata för jobbet i katalogen iexample/data/sqoop/curl
standardlagringscontainern som används av HDInsight-klustret.Du kan använda Azure Portal för att komma åt stderr- och stdout-blobar.
Kontrollera att data har exporterats genom att använda följande frågor från SQL-klienten för att visa exporterade data:
SELECT COUNT(*) FROM [dbo].[log4jlogs] WITH (NOLOCK); SELECT TOP(25) * FROM [dbo].[log4jlogs] WITH (NOLOCK);
Begränsningar
- Massexport – Med Linux-baserade HDInsight stöder Sqoop-anslutningsappen som används för att exportera data till Microsoft SQL Server eller Azure SQL Database för närvarande inte massinfogningar.
- Batchbearbetning – Med Linux-baserad HDInsight utför Sqoop flera infogningar i stället för att batchkoppla infogningsåtgärderna när du använder växeln
-batch
när du utför infogningar.
Sammanfattning
Som visas i det här dokumentet kan du använda en RÅ HTTP-begäran för att köra, övervaka och visa resultatet av Sqoop-jobb i HDInsight-klustret.
Mer information om REST-gränssnittet som används i den här artikeln finns i guiden för Apache Sqoop REST API.
Nästa steg
Använda Apache Sqoop med Apache Hadoop i HDInsight
För andra HDInsight-artiklar som rör curl: