Udostępnij za pośrednictwem


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

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.

  1. 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
    
  2. 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.

  3. 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: