Exécuter des requêtes Apache Hive avec PowerShell
Ce document fournit un exemple d’utilisation de Azure PowerShell pour exécuter des requêtes Apache Hive dans un Apache Hadoop sur un cluster HDInsight.
Notes
Ce document ne fournit pas de description détaillée de ce que font les instructions HiveQL utilisées dans les exemples. Pour plus d’informations sur le langage HiveQL utilisé dans cet exemple, consultez Utiliser Apache Hive avec Apache Hadoop sur HDInsight.
Conditions préalables requises
Un cluster Apache Hadoop sur HDInsight. Consultez Bien démarrer avec HDInsight sur Linux.
Le module Az PowerShell installé.
Exécution d'une tâche Hive
Azure PowerShell fournit des cmdlets qui vous permettent d'exécuter à distance des requêtes Hive sur HDInsight. En interne, les applets de commande effectuent des appels REST à WebHCat sur le cluster HDInsight.
Les applets de commande suivants sont utilisés lors de l'exécution de requêtes Hive sur un cluster à distance HDInsight :
-
Connect-AzAccount
: authentifie Azure PowerShell dans votre abonnement Azure. -
New-AzHDInsightHiveJobDefinition
: crée une définition de tâche à l’aide des instructions HiveQL spécifiées. -
Start-AzHDInsightJob
: envoie la définition de la tâche à HDInsight et démarre la tâche. Un objet job est retourné. -
Wait-AzHDInsightJob
: utilise l’objet de la tâche pour vérifier l’état de la tâche. 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 de la tâche. -
Invoke-AzHDInsightHiveJob
: utilisé pour exécuter les instructions HiveQL. Cette applet de commande bloque la fin de la requête, puis retourne les résultats. -
Use-AzHDInsightCluster
: définit le cluster actuel à utiliser pour la commandeInvoke-AzHDInsightHiveJob
.
Les étapes suivantes montrent comment utiliser ces cmdlets pour exécuter une tâche sur votre cluster HDInsight :
À l’aide d’un éditeur, enregistrez le code suivant sous
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
Ouvrez une invite de commandes Azure PowerShell . Accédez au répertoire du fichier
hivejob.ps1
, puis utilisez la commande suivante pour exécuter le script :.\hivejob.ps1
Quand le script s’exécute, vous devez entrer le nom du cluster et les informations d’identification du compte HTTPS/Admin. Vous pouvez également être invité à vous connecter à votre abonnement Azure.
Lorsque la tâche est terminée, des informations similaires au texte suivant s’affichent :
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
Comme mentionné précédemment,
Invoke-Hive
peut être utilisé pour exécuter une requête et attendre la réponse. Pour voir comment fonctionne Invoke-Hive, utilisez le script suivant :# 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
La sortie ressemble au texte suivant :
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
Notes
Pour les requêtes HiveQL plus longues, vous pouvez utiliser les fichiers de script HiveQL de PowerShell ou la cmdlet Here-Strings Azure PowerShell. L’extrait suivant montre comment utiliser la cmdlet
Invoke-Hive
pour exécuter un fichier de script HiveQL. Ce dernier doit être téléchargé vers wasbs://.Invoke-AzHDInsightHiveJob -File "wasbs://<ContainerName>@<StorageAccountName>/<Path>/query.hql"
Pour plus d’informations sur les chaînes Here-Strings, consultez HERE-STRINGS.
Dépannage
Si aucune information n’est retournée lorsque la tâche est terminée, affichez les journaux d’activité d’erreurs. Pour afficher les informations d’erreur relatives à cette tâche, ajoutez les commandes suivantes à la fin du fichier hivejob.ps1
, enregistrez-le, puis réexécutez-le.
# Print the output of the Hive job.
Get-AzHDInsightJobOutput `
-Clustername $clusterName `
-JobId $job.JobId `
-HttpCredential $creds `
-DisplayOutputType StandardError
Cette applet de commande retourne les informations écrites sur STDERR lors de l’exécution de la tâche.
Résumé
Comme vous pouvez le constater, Azure PowerShell permet d'exécuter facilement des requêtes Hive sur un cluster HDInsight, de surveiller l'état de la tâche et de récupérer le résultat.
Étapes suivantes
Pour obtenir des informations générales sur Hive dans HDInsight :
Pour plus d’informations sur d’autres méthodes de travail avec Hadoop sur HDInsight :