Выполнение заданий MapReduce с помощью PowerShell и Apache Hadoop в HDInsight
В этом документе приведен пример использования Azure PowerShell для выполнения задания MapReduce в Hadoop на кластере HDInsight.
Необходимые компоненты
Кластер Apache Hadoop в HDInsight. См. Создание кластеров под управлением Linux в HDInsight с помощью портала Azure.
Установите модуль Az для PowerShell.
Выполнение задания MapReduce
Azure PowerShell предоставляет командлеты , позволяющие удаленно запускать задания MapReduce в HDInsight. На внутреннем уровне PowerShell выполняет вызовы REST к WebHCat (прежнее название — Templeton) в кластере HDInsight.
Следующие командлеты, используемые при выполнении заданий MapReduce в удаленном кластере HDInsight.
Командлет | Description |
---|---|
Connect-AzAccount | выполняет аутентификацию Azure PowerShell для подписки Azure. |
New-AzHDInsightMapReduceJobDefinition | создает определение задания, используя заданную информацию MapReduce. |
Start-AzHDInsightJob | отправляет определение задания в HDInsight и запускает задание. Будет возвращен объект задания. |
Wait-AzHDInsightJob | проверяет состояние задания с помощью объекта-задания. Он ожидает завершения задания или превышения времени ожидания. |
Get-AzHDInsightJobOutput | используется для получения выходных данных задания. |
Следующие шаги показывают, как использовать эти командлеты для выполнения задания в кластере HDInsight:
С помощью редактора сохраните следующий код как 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
Откройте новую командную строку Azure PowerShell . Перейдите к расположению файла mapreducejob.ps1 , а затем используйте следующую команду для запуска сценария:
.\mapreducejob.ps1
При выполнении скрипта вам будет предложено ввести имя кластера HDInsight и имя для входа в этот кластер. Вам также может быть предложено аутентифицироваться в подписке Azure.
По завершении задания выходные данные будут иметь примерно следующий вид.
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
Такие выходные данные означают, что задание завершено успешно.
Примечание.
Если значение ExitCode не равно 0, см. сведения в разделе Устранение неполадок.
В этом примере скачанные файлы сохраняются в файле output.txt в каталоге, из которого запускается сценарий.
Просмотр выходных данных
Чтобы просмотреть слова и статистику, полученные при выполнении задания, откройте файл output.txt в текстовом редакторе.
Примечание.
Выходные файлы задания MapReduce являются неизменяемыми. Поэтому при повторном выполнении этого примера потребуется изменить имя выходного файла.
Устранение неполадок
Если при завершении задания данные не возвращаются, просмотрите ошибки задания. Чтобы просмотреть информацию об ошибке для этого задания, добавьте следующую команду в конец файла mapreducejob.ps1. Затем сохраните его и запустите скрипт снова.
# 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
Этот командлет возвращает информацию, которая записывалась в STDERR при выполнении задания.
Следующие шаги
Как можно видеть, Azure PowerShell позволяет с легкостью выполнять задания MapReduce в кластере HDInsight, отслеживать состояние задания и получать выходные данные. Дополнительная информация о других способах работы с Hadoop в HDInsight: