Apache Sqoop-taken uitvoeren in HDInsight met Curl
Meer informatie over het gebruik van Curl om Apache Sqoop-taken uit te voeren op een Apache Hadoop-cluster in HDInsight. In dit artikel wordt beschreven hoe u gegevens uit Azure Storage exporteert en importeert in een SQL Server-database met behulp van Curl. Dit artikel is een vervolg op Apache Sqoop gebruiken met Hadoop in HDInsight.
Curl wordt gebruikt om te laten zien hoe u met HDInsight kunt werken door onbewerkte HTTP-aanvragen te gebruiken om de resultaten van Sqoop-taken uit te voeren, te bewaken en op te halen. Dit werkt met behulp van de WebHCat REST API (voorheen bekend als Templeton) die wordt geleverd door uw HDInsight-cluster.
Vereisten
Voltooiing van het instellen van de testomgeving vanuit Apache Sqoop gebruiken met Hadoop in HDInsight.
Een client om een query uit te voeren op de Azure SQL Database. Overweeg het gebruik van SQL Server Management Studio of Visual Studio Code.
Curl. Curl is een hulpprogramma voor het overdragen van gegevens van of naar een HDInsight-cluster.
jq. Het hulpprogramma jq wordt gebruikt voor het verwerken van de JSON-gegevens die worden geretourneerd door REST-aanvragen.
Bekendheid met Sqoop. Zie Gebruikershandleiding voor Sqoop voor meer informatie.
Apache Sqoop-taken verzenden met behulp van Curl
Gebruik Curl om gegevens te exporteren met behulp van Apache Sqoop-taken van Azure Storage naar SQL Server.
Notitie
Wanneer u Curl of een andere REST-communicatie gebruikt met WebHCat, moet u de aanvragen verifiëren door de gebruikersnaam en het wachtwoord voor de beheerder van het HDInsight-cluster op te geven. U moet ook de clusternaam gebruiken als onderdeel van de URI (Uniform Resource Identifier) die wordt gebruikt om de aanvragen naar de server te verzenden.
Vervang voor de opdrachten in deze sectie door USERNAME
de gebruiker om te verifiëren bij het cluster en vervang door PASSWORD
het wachtwoord voor het gebruikersaccount. Vervang CLUSTERNAME
door de naam van uw cluster.
De REST API is beveiligd via basisverificatie. U moet aanvragen altijd uitvoeren via een beveiligde HTTP-verbinding (HTTPS). Zo zorgt u ervoor dat uw referenties veilig worden verzonden naar de server.
Voor het gebruiksgemak stelt u de onderstaande variabelen in. Dit voorbeeld is gebaseerd op een Windows-omgeving. Pas deze indien nodig aan voor uw omgeving.
set CLUSTERNAME= set USERNAME=admin set PASSWORD= set SQLDATABASESERVERNAME= set SQLDATABASENAME= set SQLPASSWORD= set SQLUSER=sqluser
Gebruik een opdrachtregel met de volgende opdracht om te controleren of u verbinding met uw HDInsight-cluster kunt maken:
curl -u %USERNAME%:%PASSWORD% -G https://%CLUSTERNAME%.azurehdinsight.net/templeton/v1/status
Het antwoord dat u ontvangt, is vergelijkbaar met het volgende antwoord:
{"status":"ok","version":"v1"}
Gebruik het volgende om een sqoop-taak te verzenden:
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
In deze opdracht worden de volgende parameters gebruikt:
-d : omdat
-G
niet wordt gebruikt, wordt de aanvraag standaard ingesteld op de POST-methode.-d
hiermee geeft u de gegevenswaarden op die met de aanvraag worden verzonden.user.name : de gebruiker die de opdracht uitvoert.
opdracht : de Sqoop-opdracht die moet worden uitgevoerd.
statusdir : de map waarnaar de status voor deze taak wordt geschreven.
Met deze opdracht wordt een taak-id geretourneerd die kan worden gebruikt om de status van de taak te controleren.
{"id":"job_1415651640909_0026"}
Gebruik de volgende opdracht om de status van de taak te controleren. Vervang door
JOBID
de waarde die in de vorige stap is geretourneerd. Als de retourwaarde bijvoorbeeld is{"id":"job_1415651640909_0026"}
,JOBID
isjob_1415651640909_0026
dat . Wijzig de locatie vanjq
indien nodig.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
Als de taak is voltooid, is de status GESLAAGD.
Notitie
Deze Curl-aanvraag retourneert een JSON-document (JavaScript Object Notation) met informatie over de taak; jq wordt gebruikt om alleen de statuswaarde op te halen.
Zodra de status van de taak is gewijzigd in GESLAAGD, kunt u de resultaten van de taak ophalen uit Azure Blob Storage. De
statusdir
parameter die wordt doorgegeven met de query bevat de locatie van het uitvoerbestand,wasb:///example/data/sqoop/curl
in dit geval . Met dit adres wordt de uitvoer van de taak opgeslagen in deexample/data/sqoop/curl
map in de standaardopslagcontainer die wordt gebruikt door uw HDInsight-cluster.U kunt de Azure Portal gebruiken om toegang te krijgen tot stderr- en stdout-blobs.
Als u wilt controleren of de gegevens zijn geëxporteerd, gebruikt u de volgende query's van uw SQL-client om de geëxporteerde gegevens weer te geven:
SELECT COUNT(*) FROM [dbo].[log4jlogs] WITH (NOLOCK); SELECT TOP(25) * FROM [dbo].[log4jlogs] WITH (NOLOCK);
Beperkingen
- Bulkexport: met HDInsight op basis van Linux biedt de Sqoop-connector die wordt gebruikt voor het exporteren van gegevens naar Microsoft SQL Server of Azure SQL Database momenteel geen ondersteuning voor bulkinvoegingen.
- Batchverwerking: met HDInsight op basis van Linux voert Sqoop meerdere invoegbewerkingen uit wanneer u de
-batch
switch gebruikt bij het uitvoeren van invoegbewerkingen.
Samenvatting
Zoals in dit document wordt gedemonstreerd, kunt u een onbewerkte HTTP-aanvraag gebruiken om de resultaten van Sqoop-taken in uw HDInsight-cluster uit te voeren, te bewaken en weer te geven.
Zie de Apache Sqoop REST API-handleiding voor meer informatie over de REST-interface die in dit artikel wordt gebruikt.
Volgende stappen
Apache Sqoop gebruiken met Apache Hadoop in HDInsight
Voor andere HDInsight-artikelen met betrekking tot curl: