Spouštění úloh MapReduce s Apache Hadoopem ve službě HDInsight pomocí PowerShellu
Tento dokument obsahuje příklad použití Azure PowerShellu ke spuštění úlohy MapReduce v clusteru Hadoop v clusteru HDInsight.
Požadavky
Cluster Apache Hadoop ve službě HDInsight. Viz Vytváření clusterů Apache Hadoop pomocí webu Azure Portal.
Spuštění úlohy MapReduce
Azure PowerShell poskytuje rutiny , které umožňují vzdáleně spouštět úlohy MapReduce ve službě HDInsight. PowerShell interně volá REST webHCat (dříve Templeton) spuštěný v clusteru HDInsight.
Následující rutiny používané při spouštění úloh MapReduce ve vzdáleném clusteru HDInsight.
Rutina | Popis |
---|---|
Connect-AzAccount | Ověřuje Azure PowerShell pro vaše předplatné Azure. |
New-AzHDInsightMapReduceJobDefinition | Vytvoří novou definici úlohy pomocí zadaných informací MapReduce. |
Start-AzHDInsightJob | Odešle definici úlohy do SLUŽBY HDInsight a spustí úlohu. Vrátí se objekt úlohy . |
Wait-AzHDInsightJob | Pomocí objektu úlohy zkontroluje stav úlohy. Čeká, až se úloha dokončí nebo se překročí doba čekání. |
Get-AzHDInsightJobOutput | Slouží k načtení výstupu úlohy. |
Následující kroky ukazují, jak pomocí těchto rutin spustit úlohu v clusteru HDInsight.
Pomocí editoru uložte následující kód jako 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
Otevřete nový příkazový řádek Azure PowerShellu . Změňte adresáře na umístění souboru mapreducejob.ps1 a pak pomocí následujícího příkazu spusťte skript:
.\mapreducejob.ps1
Při spuštění skriptu se zobrazí výzva k zadání názvu clusteru HDInsight a přihlášení ke clusteru. Může se také zobrazit výzva k ověření ve vašem předplatném Azure.
Po dokončení úlohy se zobrazí výstup podobný následujícímu textu:
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
Tento výstup označuje, že úloha byla úspěšně dokončena.
Tento příklad také ukládá stažené soubory do souboru output.txt v adresáři, ze kterého skript spustíte.
Zobrazit výstup
Pokud chcete zobrazit slova a počty vytvořené úlohou, otevřete soubor output.txt v textovém editoru.
Poznámka:
Výstupní soubory úlohy MapReduce jsou neměnné. Pokud tedy ukázku spustíte znovu, musíte změnit název výstupního souboru.
Řešení problému
Pokud se po dokončení úlohy nevrátí žádné informace, zobrazte chyby úlohy. Chcete-li zobrazit informace o chybě pro tuto úlohu, přidejte na konec souboru mapreducejob.ps1 následující příkaz. Pak soubor uložte a spusťte skript znovu.
# 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
Tato rutina vrátí informace, které byly zapsány do STDERR při spuštění úlohy.
Další kroky
Jak vidíte, Azure PowerShell nabízí snadný způsob spouštění úloh MapReduce v clusteru HDInsight, monitorování stavu úlohy a načtení výstupu. Informace o dalších způsobech práce se systémem Hadoop ve službě HDInsight: