Eseguire processi Apache Sqoop in HDInsight con Curl

Informazioni su come usare Curl per l'esecuzione di processi Apache Sqoop in un cluster Apache Hadoop in HDInsight. Questo articolo illustra come esportare i dati da Archiviazione di Azure e importarlo in un database SQL Server usando Curl. Questo articolo riprende l'articolo Usare Apache Sqoop con Hadoop in HDInsight.

Curl viene usato per illustrare come è possibile interagire con HDInsight tramite richieste HTTP non elaborate per eseguire, monitorare e recuperare i risultati di processi Sqoop. Ciò avviene mediante l'API REST WebHCat, nota in precedenza come Templeton, fornita dal cluster HDInsight.

Prerequisiti

Inviare processi Apache Sqoop mediante Curl

Usare Curl per esportare i dati usando i processi Apache Sqoop da Archiviazione di Azure a SQL Server.

Nota

Quando si usa Curl o qualsiasi altra forma di comunicazione REST con WebHCat, è necessario autenticare le richieste fornendo il nome utente e la password dell'amministratore cluster HDInsight. È inoltre necessario specificare il nome del cluster come parte dell'URI (Uniform Resource Identifier) usato per inviare le richieste al server.

Per i comandi in questa sezione, sostituire USERNAME con l'utente per eseguire l'autenticazione nel cluster e sostituire PASSWORD con la password per l'account utente. Sostituire CLUSTERNAME con il nome del cluster.

L'API REST viene protetta tramite l' autenticazione di base. È necessario effettuare sempre le richieste usando il protocollo HTTPS (Secure HTTP) per essere certi che le credenziali vengano inviate in modo sicuro al server.

  1. Per semplificare l'uso, impostare le variabili seguenti. Questo esempio si basa su un ambiente Windows, rivedere in base alle esigenze per l'ambiente.

    set CLUSTERNAME=
    set USERNAME=admin
    set PASSWORD=
    set SQLDATABASESERVERNAME=
    set SQLDATABASENAME=
    set SQLPASSWORD=
    set SQLUSER=sqluser
    
  2. Da una riga di comando usare il comando seguente per verificare che sia possibile connettersi al cluster HDInsight:

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

    Dovrebbe essere visualizzato un messaggio simile al seguente:

    {"status":"ok","version":"v1"}
    
  3. Usare quanto segue per inviare un processo sqoop:

    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
    

    I parametri usati in questo comando sono i seguenti:

    • -d - Poiché -G non viene usato, la richiesta viene predefinita per il metodo POST. -d specifica i valori di dati che vengono inviati con la richiesta.

      • user.name : l'utente che esegue il comando.

      • command : il comando Sqoop da eseguire.

      • statusdir : la directory in cui verrà scritto lo stato del processo.

      Questo comando restituirà un ID processo che può essere usato per controllare lo stato del processo.

      {"id":"job_1415651640909_0026"}
      
  4. Per verificare lo stato del processo, usare il seguente comando. Sostituire JOBID con il valore restituito nel passaggio precedente. Ad esempio, se il valore restituito era {"id":"job_1415651640909_0026"}, JOBID sarebbe job_1415651640909_0026. Rivedere la posizione in jq base alle esigenze.

    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
    

    Se il processo è stato completato, lo stato sarà SUCCEEDED.

    Nota

    Questa richiesta curl restituisce un documento JSON (JavaScript Object Notation) con informazioni sul processo. jq viene usato per recuperare il valore di stato.

  5. Dopo che lo stato del processo risulta essere SUCCEEDED, è possibile recuperare i risultati del processo dall'archivio BLOB di Azure. Il parametro statusdir passato con la query contiene il percorso del file di output; in questo caso wasb:///example/data/sqoop/curl. Questo indirizzo archivia l'output del processo nella directory nel example/data/sqoop/curl contenitore di archiviazione predefinito usato dal cluster HDInsight.

    È possibile usare il portale di Azure per accedere ai BLOB stderr e stdout.

  6. Per verificare che i dati siano stati esportati, usare le query seguenti dal client SQL per visualizzare i dati esportati:

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

Limitazioni

  • Esportazione bulk: con HDInsight basato su Linux, il connettore Sqoop usato per esportare i dati in Microsoft SQL Server o Azure SQL Database non supporta attualmente gli inserimenti bulk.
  • Invio in batch: con HDInsight basato su Linux, quando si usa il comando -batch durante gli inserimenti, Sqoop esegue più inserimenti invece di suddividere in batch le operazioni di inserimento.

Riepilogo

Come illustrato in questo documento, è possibile usare una richiesta HTTP non elaborata per eseguire, monitorare e visualizzare i risultati dei processi Sqoop nel cluster HDInsight.

Per altre informazioni sull'interfaccia REST usata in questo articolo, vedere la guida relativa all'API REST di Apache Sqoop.

Passaggi successivi

Usare Apache Sqoop con Apache Hadoop in HDInsight

Per altri articoli su HDInsight relativi a curl: