Megosztás a következőn keresztül:


MapReduce-feladatok futtatása az Apache Hadooptal a HDInsighton a PowerShell használatával

Ez a dokumentum egy példa arra, hogy az Azure PowerShell használatával futtathat Egy MapReduce-feladatot egy HDInsight-fürtön futó Hadoopban.

Előfeltételek

MapReduce-feladat futtatása

Az Azure PowerShell olyan parancsmagokat biztosít, amelyek lehetővé teszik a MapReduce-feladatok távoli futtatását a HDInsighton. A PowerShell belsőleg REST-hívásokat indít a HDInsight-fürtön futó WebHCat (korábbi nevén Templeton) felé.

Az alábbi parancsmagok a MapReduce-feladatok távoli HDInsight-fürtön való futtatásakor használatosak.

Parancsmag Leírás
Connect-AzAccount Hitelesíti az Azure PowerShellt az Azure-előfizetésében.
New-AzHDInsightMapReduceJobDefinition Új feladatdefiníciót hoz létre a megadott MapReduce-adatok használatával.
Start-AzHDInsightJob Elküldi a feladatdefiníciót a HDInsightnak, és elindítja a feladatot. A függvény egy feladatobjektumot ad vissza.
Wait-AzHDInsightJob A feladat objektummal ellenőrzi a feladat állapotát. Megvárja, amíg a feladat befejeződik, vagy túllépi a várakozási időt.
Get-AzHDInsightJobOutput A feladat kimenetének lekérésére szolgál.

Az alábbi lépések bemutatják, hogyan futtathat feladatokat a HDInsight-fürtben ezek a parancsmagok.

  1. Szerkesztő használatával mentse a következő kódot mapreducejob.ps1 néven.

    # 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. Nyisson meg egy új Azure PowerShell-parancssort . Módosítsa a könyvtárakat a mapreducejob.ps1 fájl helyére, majd futtassa a szkriptet a következő paranccsal:

    .\mapreducejob.ps1
    

    A szkript futtatásakor a rendszer kérni fogja a HDInsight-fürt nevét és a fürt bejelentkezését. Előfordulhat, hogy a rendszer kérni fogja az Azure-előfizetés hitelesítését is.

  3. Amikor a feladat befejeződött, a következő szöveghez hasonló kimenet jelenik meg:

    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
    

    Ez a kimenet azt jelzi, hogy a feladat sikeresen befejeződött.

    Feljegyzés

    Ha az ExitCode értéke nem 0, tekintse meg a hibaelhárítást.

    Ez a példa a letöltött fájlokat egy output.txt fájlba is tárolja abban a könyvtárban, amelyből a szkriptet futtatja.

Kimenet megtekintése

A feladat által létrehozott szavak és számok megtekintéséhez nyissa meg a output.txt fájlt egy szövegszerkesztőben.

Feljegyzés

A MapReduce-feladatok kimeneti fájljai nem módosíthatók. Ha tehát újrafuttatja ezt a mintát, módosítania kell a kimeneti fájl nevét.

Hibaelhárítás

Ha a feladat befejezésekor nem ad vissza információt, tekintse meg a feladat hibáit. A feladat hibainformációinak megtekintéséhez adja hozzá a következő parancsot a mapreducejob.ps1 fájl végéhez. Ezután mentse a fájlt, és futtassa újra a szkriptet.

# 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

Ez a parancsmag a feladat futtatásakor az STDERR-nek írt információkat adja vissza.

Következő lépések

Mint látható, az Azure PowerShell egyszerű módot kínál a MapReduce-feladatok HDInsight-fürtön való futtatására, a feladat állapotának figyelésére és a kimenet lekérésére. További információ a Hadoop HDInsighton való használatával kapcsolatos egyéb módokról: