Uwaga
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Ten dokument zawiera przykład użycia Azure PowerShell do uruchamiania zadania MapReduce w klastrze Hadoop na platformie HDInsight.
Wymagania wstępne
Klaster Apache Hadoop w usłudze HDInsight. Zobacz Tworzenie klastrów Apache Hadoop przy użyciu witryny Azure Portal.
Zainstalowano 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ów są używane do uruchamiania zadań MapReduce w zdalnym klastrze usługi HDInsight.
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. Obiekt zadania jest zwracany. |
Wait-AzHDInsightJob | Używa obiektu zadania do sprawdzania stanu zadania. Czeka się na zakończenie zadania lub przekroczenie czasu oczekiwania. |
Get-AzHDInsightJobOutput | Używane do pobierania wyników zadania. |
W poniższych krokach pokazano, jak używać poleceń cmdlet do uruchamiania zadania w klastrze 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 nowe okno wiersza 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 realizacji 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: