Köra MapReduce-jobb med Apache Hadoop i HDInsight med hjälp av 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 tillhandahåller cmdletar som gör att du kan fjärrköra MapReduce-jobb på 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 |
---|---|
Connect-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. Den väntar tills jobbet har slutförts eller väntetiden har överskridits. |
Get-AzHDInsightJobOutput | Används för att hämta utdata för jobbet. |
Följande steg visar hur du använder dessa cmdletar för att köra ett jobb i ditt HDInsight-kluster.
Använd en redigerare och spara följande kod som 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
Öppna en ny Azure PowerShell kommandotolk. Ändra kataloger till platsen för mapreducejob.ps1-filen 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 har slutförts 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
Dessa utdata anger att jobbet har slutförts.
Anteckning
Om ExitCode är ett annat värde än 0 läser du Felsökning.
I det här exemplet lagras även de nedladdade filerna i en output.txt-fil i katalogen som du kör skriptet från.
Visa utdata
Om du vill se ord och antal som skapats av jobbet öppnar du filenoutput.txt i en textredigerare.
Anteckning
Utdatafilerna för ett MapReduce-jobb kan inte ändras. Så om du kör det här exemplet igen måste du ändra namnet på utdatafilen.
Felsökning
Om ingen information returneras när jobbet har slutförts 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 mapreducejob.ps1-filen . 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. Information om andra sätt att arbeta med Hadoop på HDInsight: