Executar trabalhos do MapReduce com o Apache Hadoop no HDInsight usando o PowerShell
Este documento fornece um exemplo de como usar o Azure PowerShell para executar um trabalho MapReduce em um cluster Hadoop no HDInsight.
Pré-requisitos
Um cluster Apache Hadoop no HDInsight. Consulte Criar clusters Apache Hadoop usando o portal do Azure.
O módulo Az do PowerShell instalado.
Executar um trabalho MapReduce
O Azure PowerShell fornece cmdlets que permitem executar remotamente trabalhos do MapReduce no HDInsight. Internamente, o PowerShell faz chamadas REST para WebHCat (anteriormente chamado de Templeton) em execução no cluster HDInsight.
Os cmdlets a seguir usados ao executar trabalhos do MapReduce em um cluster HDInsight remoto.
Cmdlet | Description |
---|---|
Connect-AzAccount | Autentica o Azure PowerShell na sua assinatura do Azure. |
New-AzHDInsightMapReduceJobDefinition | Cria uma nova definição de trabalho usando as informações MapReduce especificadas. |
Start-AzHDInsightJob | Envia a definição de trabalho para o HDInsight e inicia o trabalho. Um objeto de trabalho é retornado. |
Wait-AzHDInsightJob | Usa o objeto de trabalho para verificar o status do trabalho. Ele aguarda até que o trabalho seja concluído ou o tempo de espera seja excedido. |
Get-AzHDInsightJobOutput | Usado para recuperar a saída do trabalho. |
As etapas a seguir demonstram como usar esses cmdlets para executar um trabalho em seu cluster HDInsight.
Usando um editor, salve o código a seguir como 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
Abra um novo prompt de comando do Azure PowerShell . Altere os diretórios para o local do arquivo mapreducejob.ps1 e use o seguinte comando para executar o script:
.\mapreducejob.ps1
Quando executa o script, é-lhe pedido o nome do cluster HDInsight e o início de sessão do cluster. Você também pode ser solicitado a autenticar sua assinatura do Azure.
Quando o trabalho é concluído, você recebe uma saída semelhante ao seguinte texto:
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
Essa saída indica que o trabalho foi concluído com êxito.
Nota
Se o ExitCode for um valor diferente de 0, consulte Solução de problemas.
Este exemplo também armazena os arquivos baixados em um arquivo output.txt no diretório a partir do qual você executa o script.
Ver saída
Para ver as palavras e contagens produzidas pelo trabalho, abra o arquivo output.txt em um editor de texto.
Nota
Os arquivos de saída de um trabalho MapReduce são imutáveis. Portanto, se você executar novamente este exemplo, precisará alterar o nome do arquivo de saída.
Resolução de Problemas
Se nenhuma informação for retornada quando o trabalho for concluído, exiba os erros do trabalho. Para exibir informações de erro para este trabalho, adicione o seguinte comando ao final do arquivo mapreducejob.ps1 . Em seguida, salve o arquivo e execute novamente o 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
Este cmdlet retorna as informações que foram gravadas no STDERR à medida que o trabalho é executado.
Próximos passos
Como você pode ver, o Azure PowerShell fornece uma maneira fácil de executar trabalhos do MapReduce em um cluster HDInsight, monitorar o status do trabalho e recuperar a saída. Para obter informações sobre outras maneiras de trabalhar com o Hadoop no HDInsight: