Uruchamianie zadań MapReduce z usługą Apache Hadoop w usłudze HDInsight przy użyciu programu PowerShell
Ten dokument zawiera przykład użycia Azure PowerShell do uruchamiania zadania MapReduce w usłudze 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 Azure Portal.
Zainstalowany moduł Az programu PowerShell.
Uruchamianie zadania MapReduce
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 usługi WebHCat (wcześniej nazywanej Templeton) uruchomioną w klastrze usługi HDInsight.
Następujące polecenia cmdlet są używane podczas uruchamiania zadań MapReduce w zdalnym klastrze usługi HDInsight.
Polecenie cmdlet | Opis |
---|---|
Connect-AzAccount | Uwierzytelnia 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. Czeka 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 jakomapreducejob.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 Azure PowerShell. Zmień katalogi na lokalizację pliku mapreducejob.ps1 , a następnie uruchom skrypt za pomocą następującego polecenia:
.\mapreducejob.ps1
Po uruchomieniu skryptu zostanie wyświetlony monit o podanie nazwy klastra usługi HDInsight i identyfikatora logowania do 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 uruchamiasz skrypt.
Wyświetlanie danych wyjściowych
Aby wyświetlić wyrazy i liczby wygenerowane 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 usłudze STDERR podczas uruchamiania zadania.
Następne kroki
Jak widać, Azure PowerShell zapewnia łatwy sposób uruchamiania zadań MapReduce w klastrze usługi HDInsight, monitorowania stanu zadania i pobierania danych wyjściowych. Aby uzyskać informacje o innych sposobach pracy z usługą Hadoop w usłudze HDInsight: