Condividi tramite


Esecuzione di processi MapReduce con Apache Hadoop in HDInsight mediante PowerShell

Questo documento fornisce un esempio di come usare Azure PowerShell per eseguire un processo MapReduce in un cluster Hadoop in HDInsight.

Prerequisiti

Eseguire un processo MapReduce

Azure PowerShell fornisce cmdlet che consentono di eseguire in modalità remota processi MapReduce in HDInsight. PowerShell effettua internamente chiamate REST a WebHCat (chiamato in precedenza Templeton) in esecuzione nel cluster HDInsight.

I cmdlet seguenti usati durante l'esecuzione di processi MapReduce in un cluster HDInsight remoto.

Cmdlet Descrizione
Connect-AzAccount esegue l'autenticazione di Azure PowerShell nella sottoscrizione di Azure.
New-AzHDInsightMapReduceJobDefinition crea una nuova definizione di processo usando le informazioni MapReduce specificate.
Start-AzHDInsightJob invia la definizione del processo ad HDInsight e avvia il processo. Viene restituito un oggetto del processo.
Wait-AzHDInsightJob usa l'oggetto processo per verificare lo stato del processo. Attende che il processo venga completato o che scada il periodo di attesa previsto.
Get-AzHDInsightJobOutput usato per recuperare l'output del processo.

La seguente procedura illustra come usare questi cmdlet per eseguire un processo nel cluster HDInsight.

  1. Usando un editor, salvare il seguente codice come mapreducejob.ps1.

    # Login to your Azure subscription
    $context = Get-AzContext
    if ($context -eq $null) 
    {
        Connect-AzAccount
    }
    $context
    
    # Get cluster info
    $clusterName = Read-Host -Prompt "Enter the HDInsight cluster name"
    $creds=Get-Credential -Message "Enter the login for the cluster"
    
    #Get the cluster info so we can get the resource group, storage, etc.
    $clusterInfo = Get-AzHDInsightCluster -ClusterName $clusterName
    $resourceGroup = $clusterInfo.ResourceGroup
    $storageAccountName=$clusterInfo.DefaultStorageAccount.split('.')[0]
    $container=$clusterInfo.DefaultStorageContainer
    #NOTE: This assumes that the storage account is in the same resource
    #      group as the cluster. If it is not, change the
    #      --ResourceGroupName parameter to the group that contains storage.
    $storageAccountKey=(Get-AzStorageAccountKey `
        -Name $storageAccountName `
    -ResourceGroupName $resourceGroup)[0].Value
    
    #Create a storage context
    $context = New-AzStorageContext `
        -StorageAccountName $storageAccountName `
        -StorageAccountKey $storageAccountKey
    
    #Define the MapReduce job
    #NOTE: If using an HDInsight 2.0 cluster, use hadoop-examples.jar instead.
    # -JarFile = the JAR containing the MapReduce application
    # -ClassName = the class of the application
    # -Arguments = The input file, and the output directory
    $wordCountJobDefinition = New-AzHDInsightMapReduceJobDefinition `
        -JarFile "/example/jars/hadoop-mapreduce-examples.jar" `
        -ClassName "wordcount" `
        -Arguments `
            "/example/data/gutenberg/davinci.txt", `
            "/example/data/WordCountOutput"
    
    #Submit the job to the cluster
    Write-Host "Start the MapReduce job..." -ForegroundColor Green
    $wordCountJob = Start-AzHDInsightJob `
        -ClusterName $clusterName `
        -JobDefinition $wordCountJobDefinition `
        -HttpCredential $creds
    
    #Wait for the job to complete
    Write-Host "Wait for the job to complete..." -ForegroundColor Green
    Wait-AzHDInsightJob `
        -ClusterName $clusterName `
        -JobId $wordCountJob.JobId `
        -HttpCredential $creds
    # Download the output
    Get-AzStorageBlobContent `
        -Blob 'example/data/WordCountOutput/part-r-00000' `
        -Container $container `
        -Destination output.txt `
        -Context $context
    # Print the output of the job.
    Get-AzHDInsightJobOutput `
        -Clustername $clusterName `
        -JobId $wordCountJob.JobId `
        -HttpCredential $creds
    
  2. Quindi, aprire un nuovo prompt dei comandi di Azure PowerShell . Passare al percorso del file mapreducejob.ps1 , quindi usare il seguente comando per eseguire lo script.

    .\mapreducejob.ps1
    

    Quando si esegue lo script, viene richiesto il nome del cluster HDInsight e l'account di accesso al cluster. Potrebbe anche essere richiesta l'autenticazione alla sottoscrizione di Azure.

  3. Al termine del processo, viene visualizzato un output simile al testo seguente:

    Cluster         : CLUSTERNAME
    ExitCode        : 0
    Name            : wordcount
    PercentComplete : map 100% reduce 100%
    Query           :
    State           : Completed
    StatusDirectory : f1ed2028-afe8-402f-a24b-13cc17858097
    SubmissionTime  : 12/5/2014 8:34:09 PM
    JobId           : job_1415949758166_0071
    

    Questo output indica che il processo è stato completato correttamente.

    Nota

    Se ExitCode è un valore diverso da 0, vedere Risoluzione dei problemi.

    Questo esempio consente anche di archiviare i file scaricati in un file output.txt nella directory in cui viene eseguito lo script.

Visualizzare l'output

Per vedere le parole e i numeri generati dal processo, aprire il file output.txt in un editor di testo.

Nota

I file di output di un processo MapReduce non sono modificabili. Se pertanto si esegue di nuovo l'esempio, è necessario cambiare il nome del file di output.

Risoluzione dei problemi

Se al termine del processo non viene restituita alcuna informazione, visualizzare gli errori relativi al processo. Per visualizzare le informazioni sull'errore per questo processo, aggiungere il comando seguente alla fine del file mapreducejob.ps1 . Salvare quindi il file ed eseguire nuovamente lo script.

# Print the output of the WordCount job.
Write-Host "Display the standard output ..." -ForegroundColor Green
Get-AzHDInsightJobOutput `
        -Clustername $clusterName `
        -JobId $wordCountJob.JobId `
        -HttpCredential $creds `
        -DisplayOutputType StandardError

Questo cmdlet restituisce le informazioni scritte in STDERR durante l'esecuzione del processo.

Passaggi successivi

Come è possibile notare, Azure PowerShell fornisce un modo semplice per eseguire processi MapReduce in un cluster HDInsight, monitorare lo stato del processo e recuperare l'output. Per informazioni su altre modalità d'uso di Hadoop in HDInsight: