Köra MapReduce-jobb med Apache Hadoop på HDInsight med PowerShell
Det här dokumentet innehåller ett exempel på hur du använder Azure PowerShell för att köra ett MapReduce-jobb i ett Hadoop på HDInsight-kluster.
Förutsättningar
Ett Apache Hadoop-kluster i HDInsight. Se Skapa Apache Hadoop-kluster med hjälp av Azure Portal.
PowerShell Az-modulen har installerats.
Köra ett MapReduce-jobb
Azure PowerShell innehåller cmdletar som gör att du kan fjärrköra MapReduce-jobb i HDInsight. Internt gör PowerShell REST-anrop till WebHCat (kallades tidigare Templeton) som körs i HDInsight-klustret.
Följande cmdletar används när du kör MapReduce-jobb i ett fjärranslutet HDInsight-kluster.
Cmdlet | beskrivning |
---|---|
Anslut-AzAccount | Autentiserar Azure PowerShell till din Azure-prenumeration. |
New-AzHDInsightMapReduceJobDefinition | Skapar en ny jobbdefinition med hjälp av den angivna MapReduce-informationen. |
Start-AzHDInsightJob | Skickar jobbdefinitionen till HDInsight och startar jobbet. Ett jobbobjekt returneras. |
Wait-AzHDInsightJob | Använder jobbobjektet för att kontrollera jobbets status. Det väntar tills jobbet har slutförts eller väntetiden har överskridits. |
Get-AzHDInsightJobOutput | Används för att hämta utdata från jobbet. |
Följande steg visar hur du använder dessa cmdletar för att köra ett jobb i ditt HDInsight-kluster.
Spara följande kod som mapreducejob.ps1 med hjälp av en redigerare.
# 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
Öppna en ny Azure PowerShell-kommandotolk . Ändra kataloger till platsen för filen mapreducejob.ps1 och använd sedan följande kommando för att köra skriptet:
.\mapreducejob.ps1
När du kör skriptet uppmanas du att ange namnet på HDInsight-klustret och klusterinloggningen. Du kan också uppmanas att autentisera till din Azure-prenumeration.
När jobbet är klart får du utdata som liknar följande text:
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
Det här utdata anger att jobbet har slutförts.
Kommentar
Om ExitCode är ett annat värde än 0 läser du Felsökning.
I det här exemplet lagras även de nedladdade filerna till en output.txt fil i katalogen som du kör skriptet från.
Visa utdata
Om du vill se de ord och antal som skapas av jobbet öppnar du filen output.txt i en textredigerare.
Kommentar
Utdatafilerna för ett MapReduce-jobb är oföränderliga. Om du kör exemplet igen måste du ändra namnet på utdatafilen.
Felsökning
Om ingen information returneras när jobbet är klart kan du visa fel för jobbet. Om du vill visa felinformation för det här jobbet lägger du till följande kommando i slutet av filen mapreducejob.ps1 . Spara sedan filen och kör skriptet igen.
# 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
Den här cmdleten returnerar den information som skrevs till STDERR när jobbet körs.
Nästa steg
Som du ser är Azure PowerShell ett enkelt sätt att köra MapReduce-jobb på ett HDInsight-kluster, övervaka jobbstatusen och hämta utdata. För information om andra sätt att arbeta med Hadoop på HDInsight: