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

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.

  1. 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
    
  2. 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"}
    
  3. 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"}
      
  4. 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 is job_1415651640909_0026dat . Wijzig de locatie van jq 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.

  5. 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/curlin dit geval . Met dit adres wordt de uitvoer van de taak opgeslagen in de example/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.

  6. 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: