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

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.

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

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