Exécuter des travaux MapReduce avec Apache Hadoop sur HDInsight à l’aide de PowerShell
Ce document fournit un exemple d’utilisation d’Azure PowerShell pour exécuter une tâche MapReduce sur un Hadoop sur un cluster HDInsight.
Prérequis
Un cluster Apache Hadoop sur HDInsight. Consultez Créer des clusters Apache Hadoop à l’aide du Portail Azure.
Le module Az PowerShell installé.
Exécuter une tâche MapReduce
Azure PowerShell propose des applets de commande qui vous permettent d'exécuter à distance des tâches MapReduce sur HDInsight. En interne, PowerShell effectue des appels REST à WebHCat (anciennement nommé Templeton) exécuté sur le cluster HDInsight.
Les applets de commande suivants sont utilisés lors de l’exécution des tâches MapReduce sur un cluster HDInsight à distance.
Applet de commande | Description |
---|---|
Connect-AzAccount | Authentifie Azure PowerShell dans votre abonnement Azure. |
New-AzHDInsightMapReduceJobDefinition | Crée une définition de travail avec les informations MapReduce spécifiées. |
Start-AzHDInsightJob | Envoie la définition de travail à HDInsight et démarre le travail. Un objet job est retourné. |
Wait-AzHDInsightJob | Utilise l’objet de travail pour vérifier l’état du travail. Il attend que la tâche soit terminée ou que le délai d’attente soit dépassé. |
Get-AzHDInsightJobOutput | Utilisé pour récupérer la sortie du travail. |
Les étapes suivantes montrent comment utiliser ces applets de commande pour exécuter une tâche sur votre cluster HDInsight.
À l’aide d’un éditeur, enregistrez le code suivant sous 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
Ouvrez une invite de commandes Azure PowerShell . Accédez à l’emplacement du fichier mapreducejob.ps1 , puis utilisez les éléments suivants pour exécuter le script :
.\mapreducejob.ps1
Lorsque vous exécutez le script, vous êtes invité à entrer le nom du cluster HDInsight et le nom de connexion du cluster. Vous pouvez également être invité à vous authentifier sur votre abonnement Azure.
Une fois la tâche terminée, vous obtenez un résultat similaire au texte suivant :
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
Cela indique que la tâche a été effectuée avec succès.
Notes
Si ExitCode correspond à une valeur différente de 0, consultez Dépannage.
Cet exemple stocke également les fichiers téléchargés dans un dossier output.txt dans le répertoire à partir duquel vous avez exécuté le script.
Voir la sortie
Pour afficher les mots et les décomptes générés par la tâche, ouvrez le fichier output.txt dans un éditeur de texte.
Notes
Les fichiers de résultat d’une tâche MapReduce sont immuables. Donc, si vous réexécutez cet exemple, vous devez modifier le nom du fichier de sortie.
Dépannage
Si aucune information n’est retournée lorsque la tâche est terminée, affichez les erreurs liées à cette tâche. Pour afficher les informations d’erreur pour ce projet, ajoutez la commande suivante à la fin du fichier mapreducejob.ps1. Ensuite, enregistrez le fichier et réexécutez le script.
# 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
Cette applet de commande retourne les informations écrites sur STDERR lors de l’exécution de la tâche.
Étapes suivantes
Comme vous pouvez le voir, Azure PowerShell offre un moyen facile d’exécuter des tâches MapReduce sur un cluster HDInsight, de surveiller l’état de la tâche et de récupérer la sortie. Pour plus d’informations sur d’autres méthodes de travail avec Hadoop sur HDInsight :