Esecuzione di processi MapReduce con Apache Hadoop in HDInsight usando REST
Informazioni su come usare l'API REST Apache Hive WebHCat per eseguire processi MapReduce in un cluster Apache Hadoop in HDInsight. Curl viene usato per illustrare come sia possibile interagire con HDInsight usando richieste HTTP non elaborate per eseguire processi MapReduce.
Nota
Se si ha già familiarità con l'uso di server Hadoop basati su Linux, ma non si ha esperienza con HDInsight, vedere il documento Informazioni sull'uso di HDInsight in Linux.
Prerequisiti
- Un cluster Apache Hadoop in HDInsight. Vedere Creare i cluster di Apache Hadoop nel portale di Azure.
Una delle due versioni seguenti:
Eseguire un processo MapReduce
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 da amministratore del cluster HDInsight. È necessario specificare il nome del cluster come parte dell'URI usato per inviare le richieste al server.
L'API REST viene protetta tramite l' autenticazione dell'accesso di base. È necessario effettuare sempre le richieste usando il protocollo HTTPS per essere certi che le credenziali vengano inviate in modo sicuro al server.
Curl
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 PASSWORD=
Da una riga di comando usare il comando seguente per verificare che sia possibile connettersi al cluster HDInsight:
curl -u admin:%PASSWORD% -G https://%CLUSTERNAME%.azurehdinsight.net/templeton/v1/status
I parametri usati in questo comando sono i seguenti:
- -u: il nome utente e la password usati per autenticare la richiesta.
- -G: indica che questa operazione è una richiesta GET
La parte iniziale dell'URI,
https://CLUSTERNAME.azurehdinsight.net/templeton/v1
, è uguale per tutte le richieste.Si riceverà una risposta simile al testo JSON seguente:
{"version":"v1","status":"ok"}
Per inviare un processo MapReduce, usare il comando seguente. Modificare il percorso in jq in base alle esigenze.
curl -u admin:%PASSWORD% -d user.name=admin ^ -d jar=/example/jars/hadoop-mapreduce-examples.jar ^ -d class=wordcount -d arg=/example/data/gutenberg/davinci.txt -d arg=/example/data/output ^ https://%CLUSTERNAME%.azurehdinsight.net/templeton/v1/mapreduce/jar | ^ C:\HDI\jq-win64.exe .id
La fine dell'URI (/mapreduce/jar) indica a WebHCat che la richiesta avvia un processo MapReduce da una classe in un file con estensione jar. I parametri usati in questo comando sono i seguenti:
-
-d:
-G
non viene usato, quindi la richiesta viene utilizzata per impostazione 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.
- jar: il percorso del file con estensione jar che contiene la classe da eseguire.
- class: la classe che contiene la logica MapReduce.
- arg: gli argomenti da passare al processo MapReduce. In questo caso, il file di testo di input e la directory usata per l'output
Questo comando deve restituire un ID processo che può essere usato per controllare lo stato del processo:
job_1415651640909_0026
.-
-d:
Per verificare lo stato del processo, usare il seguente comando. Sostituire il valore di
JOBID
con il valore effettivo restituito nel passaggio precedente. Rivedere la posizione di jq in base alle esigenze.set JOBID=job_1415651640909_0026 curl -G -u admin:%PASSWORD% -d user.name=admin https://%CLUSTERNAME%.azurehdinsight.net/templeton/v1/jobs/%JOBID% | ^ C:\HDI\jq-win64.exe .status.state
PowerShell
Per semplificare l'uso, impostare le variabili seguenti. Sostituire
CLUSTERNAME
con il nome effettivo del cluster. Eseguire il comando e immettere la password di accesso del cluster quando richiesto.$clusterName="CLUSTERNAME" $creds = Get-Credential -UserName admin -Message "Enter the cluster login password"
Usare il comando seguente per verificare che sia possibile connettersi al cluster HDInsight:
$resp = Invoke-WebRequest -Uri "https://$clustername.azurehdinsight.net/templeton/v1/status" ` -Credential $creds ` -UseBasicParsing $resp.Content
Si riceverà una risposta simile al testo JSON seguente:
{"version":"v1","status":"ok"}
Per inviare un processo MapReduce, usare il seguente comando:
$reqParams = @{} $reqParams."user.name" = "admin" $reqParams.jar = "/example/jars/hadoop-mapreduce-examples.jar" $reqParams.class = "wordcount" $reqParams.arg = @() $reqParams.arg += "/example/data/gutenberg/davinci.txt" $reqparams.arg += "/example/data/output" $resp = Invoke-WebRequest -Uri "https://$clusterName.azurehdinsight.net/templeton/v1/mapreduce/jar" ` -Credential $creds ` -Body $reqParams ` -Method POST ` -UseBasicParsing $jobID = (ConvertFrom-Json $resp.Content).id $jobID
La fine dell'URI (/mapreduce/jar) indica a WebHCat che la richiesta avvia un processo MapReduce da una classe in un file con estensione jar. I parametri usati in questo comando sono i seguenti:
- user.name: l'utente che esegue il comando.
- jar: il percorso del file con estensione jar che contiene la classe da eseguire.
- class: la classe che contiene la logica MapReduce.
- arg: gli argomenti da passare al processo MapReduce. In questo caso, il file di testo di input e la directory usata per l'output
Questo comando deve restituire un ID processo che può essere usato per controllare lo stato del processo:
job_1415651640909_0026
.Per verificare lo stato del processo, usare il seguente comando:
$reqParams=@{"user.name"="admin"} $resp = Invoke-WebRequest -Uri "https://$clusterName.azurehdinsight.net/templeton/v1/jobs/$jobID" ` -Credential $creds ` -Body $reqParams ` -UseBasicParsing # ConvertFrom-JSON can't handle duplicate names with different case # So change one to prevent the error $fixDup=$resp.Content.Replace("jobID","job_ID") (ConvertFrom-Json $fixDup).status.state
Entrambi i metodi
Se il processo è stato completato, lo stato restituito è
SUCCEEDED
.Dopo che lo stato del processo risulta essere
SUCCEEDED
, è possibile recuperare i risultati del processo dall'archivio BLOB di Azure. Il parametrostatusdir
passato con la query contiene il percorso del file di output. In questo esempio la località è/example/curl
. Questo indirizzo archivia l'output del processo nella risorsa di archiviazione predefinita dei cluster in/example/curl
.
È possibile elencare e scaricare questi file usando l' Interfaccia della riga di comando di Azure. Per altre informazioni sull'uso dell'interfaccia della riga di comando di Azure per l'uso dell'archiviazione BLOB di Azure, vedere Avvio rapido: Creare, scaricare ed elencare BLOB con l'interfaccia della riga di comando di Azure.
Passaggi successivi
Per informazioni su altre modalità d'uso di Hadoop in HDInsight:
Per altre informazioni sull'interfaccia REST usata in questo articolo, vedere le informazioni di riferimento su WebHCat.