MapReduce-taken uitvoeren met Apache Hadoop in HDInsight met behulp van PowerShell
Dit document bevat een voorbeeld van het gebruik van Azure PowerShell om een MapReduce-taak uit te voeren in een Hadoop-cluster in HDInsight.
Vereisten
Een Apache Hadoop-cluster in HDInsight. Zie Apache Hadoop-clusters maken met behulp van Azure Portal.
De Az-module van PowerShell geïnstalleerd.
Een MapReduce-taak uitvoeren
Azure PowerShell biedt cmdlets waarmee u MapReduce-taken op afstand kunt uitvoeren in HDInsight. Intern voert PowerShell REST-aanroepen uit naar WebHCat (voorheen Templeton genoemd) die worden uitgevoerd op het HDInsight-cluster.
De volgende cmdlets die worden gebruikt bij het uitvoeren van MapReduce-taken in een extern HDInsight-cluster.
Cmdlet | Beschrijving |
---|---|
Verbinding maken-AzAccount | Verifieert Azure PowerShell voor uw Azure-abonnement. |
New-AzHDInsightMapReduceJobDefinition | Hiermee maakt u een nieuwe taakdefinitie met behulp van de opgegeven MapReduce-informatie. |
Start-AzHDInsightJob | Verzendt de taakdefinitie naar HDInsight en start de taak. Er wordt een taakobject geretourneerd. |
Wait-AzHDInsightJob | Gebruikt het taakobject om de status van de taak te controleren. Er wordt gewacht totdat de taak is voltooid of de wachttijd wordt overschreden. |
Get-AzHDInsightJobOutput | Wordt gebruikt om de uitvoer van de taak op te halen. |
De volgende stappen laten zien hoe u deze cmdlets gebruikt om een taak uit te voeren in uw HDInsight-cluster.
Sla met behulp van een editor de volgende code op als 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
Open een nieuwe Azure PowerShell-opdrachtprompt . Wijzig mappen in de locatie van het mapreducejob.ps1-bestand en gebruik vervolgens de volgende opdracht om het script uit te voeren:
.\mapreducejob.ps1
Wanneer u het script uitvoert, wordt u gevraagd om de naam van het HDInsight-cluster en de clusteraanmelding. U wordt mogelijk ook gevraagd om u te verifiëren bij uw Azure-abonnement.
Wanneer de taak is voltooid, ontvangt u uitvoer die vergelijkbaar is met de volgende tekst:
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
Deze uitvoer geeft aan dat de taak is voltooid.
Notitie
Als exitcode een andere waarde dan 0 is, raadpleegt u Probleemoplossing.
In dit voorbeeld worden de gedownloade bestanden ook opgeslagen in een output.txt-bestand in de map waaruit u het script uitvoert.
Uitvoer weergeven
Als u de woorden en aantallen wilt zien die door de taak zijn geproduceerd, opent u het output.txt-bestand in een teksteditor.
Notitie
De uitvoerbestanden van een MapReduce-taak zijn onveranderbaar. Dus als u dit voorbeeld opnieuw uitvoert, moet u de naam van het uitvoerbestand wijzigen.
Probleemoplossing
Als er geen gegevens worden geretourneerd wanneer de taak is voltooid, bekijkt u fouten voor de taak. Als u foutinformatie voor deze taak wilt weergeven, voegt u de volgende opdracht toe aan het einde van het bestand mapreducejob.ps1 . Sla het bestand vervolgens op en voer het script opnieuw uit.
# 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
Deze cmdlet retourneert de informatie die naar STDERR is geschreven wanneer de taak wordt uitgevoerd.
Volgende stappen
Zoals u ziet, biedt Azure PowerShell een eenvoudige manier om MapReduce-taken uit te voeren op een HDInsight-cluster, de taakstatus te bewaken en de uitvoer op te halen. Voor informatie over andere manieren waarop u met Hadoop in HDInsight kunt werken: