Выполнение запросов Apache Hive с помощью PowerShell
Этот документ содержит пример использования Azure PowerShell выполнения запросов Apache Hive в кластере Apache Hadoop в HDInsight.
Примечание
В этом документе не приводится подробное описание процессов, которые выполняют инструкции HiveQL, используемые в примерах. Информацию об операторах HiveQL, используемых в этом примере, см. в статье Обзор Apache Hive и HiveQL в Azure HDInsight.
Предварительные требования
Кластер Apache Hadoop в HDInsight. Ознакомьтесь со статьей Краткое руководство. Использование Apache Hadoop и Apache Hive в Azure HDInsight с шаблоном Resource Manager.
Установите модуль Az для PowerShell.
Выполнение запроса Hive
Azure PowerShell предоставляет командлеты , позволяющие удаленно запускать запросы Hive в HDInsight. Во внутренних командлет использует вызовы REST к WebHCat в кластере HDInsight.
При выполнении запросов Hive на удаленном кластере HDInsight используются следующие командлеты:
-
Connect-AzAccount
— выполняет аутентификацию Azure PowerShell для подписки Azure. -
New-AzHDInsightHiveJobDefinition
— создает определение задания с использованием заданных операторов HiveQL. -
Start-AzHDInsightJob
— отправляет определение задания в HDInsight и запускает задание. Будет возвращен объект задания. -
Wait-AzHDInsightJob
— использует объект-задание для проверки состояния задания. Он ожидает завершения задания или превышения времени ожидания. -
Get-AzHDInsightJobOutput
— используется для получения выходных данных задания. -
Invoke-AzHDInsightHiveJob
— используется для выполнения операторов HiveQL. Этот командлет блокирует выполнение запроса, после чего возвращаются результаты. -
Use-AzHDInsightCluster
— указывает, что при выполнении командыInvoke-AzHDInsightHiveJob
должен использоваться текущий кластер.
Следующие шаги показывают, как использовать эти командлеты для выполнения задания в кластере HDInsight:
С помощью редактора сохраните следующий код как
hivejob.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" #HiveQL #Note: set hive.execution.engine=tez; is not required for # Linux-based HDInsight $queryString = "set hive.execution.engine=tez;" + "DROP TABLE log4jLogs;" + "CREATE EXTERNAL TABLE log4jLogs(t1 string, t2 string, t3 string, t4 string, t5 string, t6 string, t7 string) ROW FORMAT DELIMITED FIELDS TERMINATED BY ' ' STORED AS TEXTFILE LOCATION 'wasbs:///example/data/';" + "SELECT * FROM log4jLogs WHERE t4 = '[ERROR]';" #Create an HDInsight Hive job definition $hiveJobDefinition = New-AzHDInsightHiveJobDefinition -Query $queryString #Submit the job to the cluster Write-Host "Start the Hive job..." -ForegroundColor Green $hiveJob = Start-AzHDInsightJob -ClusterName $clusterName -JobDefinition $hiveJobDefinition -ClusterCredential $creds #Wait for the Hive job to complete Write-Host "Wait for the job to complete..." -ForegroundColor Green Wait-AzHDInsightJob -ClusterName $clusterName -JobId $hiveJob.JobId -ClusterCredential $creds # Print the output Write-Host "Display the standard output..." -ForegroundColor Green Get-AzHDInsightJobOutput ` -Clustername $clusterName ` -JobId $hiveJob.JobId ` -HttpCredential $creds
Откройте новую командную строку Azure PowerShell . Перейдите к расположению файла
hivejob.ps1
, а затем используйте следующую команду для запуска скрипта:.\hivejob.ps1
При запуске скрипта будет предложено ввести имя кластера, данные HTTPS и учетной записи администратора кластера. Вам также может быть предложено выполнить вход в свою подписку Azure.
Когда задание завершается, возвращается текст следующего содержания:
Display the standard output... 2012-02-03 18:35:34 SampleClass0 [ERROR] incorrect id 2012-02-03 18:55:54 SampleClass1 [ERROR] incorrect id 2012-02-03 19:25:27 SampleClass4 [ERROR] incorrect id
Как уже упоминалось,
Invoke-Hive
можно использовать для отправки запроса и ожидания ответа. Чтобы увидеть работу команды Invoke-Hive, используйте следующий сценарий:# 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" # Set the cluster to use Use-AzHDInsightCluster -ClusterName $clusterName -HttpCredential $creds $queryString = "set hive.execution.engine=tez;" + "DROP TABLE log4jLogs;" + "CREATE EXTERNAL TABLE log4jLogs(t1 string, t2 string, t3 string, t4 string, t5 string, t6 string, t7 string) ROW FORMAT DELIMITED FIELDS TERMINATED BY ' ' STORED AS TEXTFILE LOCATION '/example/data/';" + "SELECT * FROM log4jLogs WHERE t4 = '[ERROR]';" Invoke-AzHDInsightHiveJob ` -StatusFolder "statusout" ` -Query $queryString
Выходные данные выглядят так:
2012-02-03 18:35:34 SampleClass0 [ERROR] incorrect id 2012-02-03 18:55:54 SampleClass1 [ERROR] incorrect id 2012-02-03 19:25:27 SampleClass4 [ERROR] incorrect id
Примечание
Для более длинных запросов HiveQL вы можете использовать командлет Azure PowerShell Here-Strings или файлы сценариев HiveQL. В приведенном ниже отрывке кода показано, как использовать командлет
Invoke-Hive
для запуска файла скрипта HiveQL. Файл сценария HiveQL необходимо передать в wasbs://.Invoke-AzHDInsightHiveJob -File "wasbs://<ContainerName>@<StorageAccountName>/<Path>/query.hql"
Дополнительные сведения о строках here см в этом разделе.
Устранение неполадок
Если данные не возвращаются при завершении задания, просмотрите журналы ошибок. Чтобы просмотреть информацию об ошибке для данного задания, добавьте следующий текст в конце файла hivejob.ps1
, сохраните его, а затем запустите снова.
# Print the output of the Hive job.
Get-AzHDInsightJobOutput `
-Clustername $clusterName `
-JobId $job.JobId `
-HttpCredential $creds `
-DisplayOutputType StandardError
Этот командлет возвращает информацию, которая записывается в STDERR на сервере при обработке задания.
Сводка
Как можно видеть, Azure PowerShell позволяет с легкостью выполнять запросы Hive в кластере HDInsight, отслеживать состояние задания и получать выходные данные.
Дальнейшие действия
Общая информация о Hive в HDInsight:
Дополнительная информация о других способах работы с Hadoop в HDInsight: