Uruchamianie zadań MapReduce z usługą Apache Hadoop w usłudze HDInsight przy użyciu programu PowerShell
Ten dokument zawiera przykład użycia programu Azure PowerShell do uruchamiania zadania MapReduce w klastrze usługi Hadoop w klastrze usługi HDInsight.
Wymagania wstępne
Klaster Apache Hadoop w usłudze HDInsight. Zobacz Tworzenie klastrów Apache Hadoop przy użyciu witryny Azure Portal.
Zainstalowany moduł Az programu PowerShell.
Uruchamianie zadania MapReduce
Program Azure PowerShell udostępnia polecenia cmdlet , które umożliwiają zdalne uruchamianie zadań MapReduce w usłudze HDInsight. Wewnętrznie program PowerShell wykonuje wywołania REST do serwera WebHCat (dawniej o nazwie Templeton) uruchomionego w klastrze usługi HDInsight.
Następujące polecenia cmdlet używane podczas uruchamiania zadań MapReduce w zdalnym klastrze usługi HDInsight.
Polecenia cmdlet | opis |
---|---|
Connect-AzAccount | Uwierzytelnia program Azure PowerShell w ramach subskrypcji platformy Azure. |
New-AzHDInsightMapReduceJobDefinition | Tworzy nową definicję zadania przy użyciu określonych informacji MapReduce. |
Start-AzHDInsightJob | Wysyła definicję zadania do usługi HDInsight i uruchamia zadanie. Zwracany jest obiekt zadania . |
Wait-AzHDInsightJob | Używa obiektu zadania do sprawdzania stanu zadania. Trwa oczekiwanie na zakończenie zadania lub przekroczenie czasu oczekiwania. |
Get-AzHDInsightJobOutput | Służy do pobierania danych wyjściowych zadania. |
W poniższych krokach pokazano, jak używać tych poleceń cmdlet do uruchamiania zadania w klastrze usługi HDInsight.
Za pomocą edytora zapisz następujący kod jako 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
Otwórz nowy wiersz polecenia programu Azure PowerShell . Zmień katalogi na lokalizację pliku mapreducejob.ps1 , a następnie użyj następującego polecenia, aby uruchomić skrypt:
.\mapreducejob.ps1
Po uruchomieniu skryptu zostanie wyświetlony monit o podanie nazwy klastra usługi HDInsight i nazwy logowania klastra. Może zostać również wyświetlony monit o uwierzytelnienie w ramach subskrypcji platformy Azure.
Po zakończeniu zadania otrzymasz dane wyjściowe podobne do następującego tekstu:
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
Te dane wyjściowe wskazują, że zadanie zostało ukończone pomyślnie.
Uwaga
Jeśli exitCode jest wartością inną niż 0, zobacz Rozwiązywanie problemów.
W tym przykładzie pliki pobrane są również przechowywane w pliku output.txt w katalogu, z którego jest uruchamiany skrypt.
Wyświetl dane wyjściowe
Aby wyświetlić wyrazy i liczby utworzone przez zadanie, otwórz plik output.txt w edytorze tekstów.
Uwaga
Pliki wyjściowe zadania MapReduce są niezmienne. Dlatego jeśli uruchomisz ponownie ten przykład, musisz zmienić nazwę pliku wyjściowego.
Rozwiązywanie problemów
Jeśli po zakończeniu zadania nie są zwracane żadne informacje, wyświetl błędy zadania. Aby wyświetlić informacje o błędzie dla tego zadania, dodaj następujące polecenie na końcu pliku mapreducejob.ps1 . Następnie zapisz plik i uruchom ponownie skrypt.
# 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
To polecenie cmdlet zwraca informacje zapisane w stDERR podczas uruchamiania zadania.
Następne kroki
Jak widać, program Azure PowerShell umożliwia łatwe uruchamianie zadań MapReduce w klastrze usługi HDInsight, monitorowanie stanu zadania i pobieranie danych wyjściowych. Aby uzyskać informacje o innych sposobach pracy z usługą Hadoop w usłudze HDInsight: