Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Esse documento fornece um exemplo de uso do PowerShell do Azure para executar um trabalho MapReduce em um Hadoop no cluster HDInsight.
Pré-requisitos
Um cluster do Apache Hadoop no HDInsight. Confira Criar clusters Apache Hadoop usando o portal do Azure.
O Módulo Az do PowerShell instalado.
Executar um trabalho MapReduce
O PowerShell do Azure fornece cmdlets que permitem executar remotamente trabalhos 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 são usados ao executar trabalhos MapReduce em um cluster HDInsight remoto.
| Cmdlet | Descrição |
|---|---|
| Connect-AzAccount | Autentica o Azure PowerShell para a assinatura do Azure. |
| New-AzHDInsightMapReduceJobDefinition | Cria uma novadefinição de trabalho, usando as informações do MapReduce especificadas. |
| Start-AzHDInsightJob | Envia a definição de trabalho para HDInsight e inicia o trabalho. Um objeto job é 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 no 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 $credsAbra um novo prompt de comando do PowerShell do Azure . Altere os diretórios para o local do arquivo mapreducejob.ps1 e use o seguinte comando para executar o script:
.\mapreducejob.ps1Quando você executa o script, o nome do cluster HDInsight e o logon dele são solicitados. Você também poderá receber uma solicitação para autenticar a sua assinatura do Azure.
Quando o trabalho for concluído, você receberá 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_0071Essa saída indica que o trabalho foi concluído com êxito.
Observação
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 do qual você executa o script.
Exibir saída
Para ver as palavras e contagens produzidas pelo trabalho, abra o arquivo output.txt em um editor de texto.
Observação
Os arquivos de saída de um trabalho MapReduce são imutáveis. Portanto, se você executar esse exemplo novamente, será necessário alterar o nome do arquivo de saída.
Solução de problemas
Se nenhuma informação for retornada quando o trabalho for concluído, exiba os erros para o trabalho. Para exibir informações de erro para esse trabalho, adicione o seguinte comando ao final do arquivo mapreducejob.ps1. Em seguida, salve o arquivo e execute o script novamente.
# 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
Esse cmdlet retorna as informações gravadas em STDERR conforme o trabalho é executado.
Próximas etapas
Como você pode ver, o PowerShell do Azure fornece uma maneira fácil de executar trabalhos MapReduce em um cluster HDInsight, monitorar o status do trabalho e recuperar a saída. Para obter informações sobre outros modos possíveis de trabalhar com Hadoop no HDInsight: