Azure PowerShell Serie (3): Run Hive Script

Willkommen im nächsten Beitrag aus der Azure PowerShell Serie!

Wenn man mit HDInsight oder Hadoop arbeitet, eignet sich gerade für SQL-Datenbankler die Sprache HiveQL sehr gut. Mit HiveQL muss man sich nicht extra den Kopf wegen MapReduce-Jobs zerbrechen, sondern kann stattdessen mit einer SQL-ähnlichen Sprache Skripte erstellen, die automatisch in MapReduce-Jobs übersetzt werden.

Bei diesem PowerShell-Skript wird vorausgesetzt, dass man HiveQL-Skripte bereits lokal erstellt hat – dafür eignet sich Notepad++ immer ganz gut. Diese muss man dann zuerst im Azure Blob Storage hochladen, um diese von einem HDInsight-Cluster aus auszuführen. Hierbei sind wohl die wichtigsten PowerShell-Commands die folgenden:

001002 Use-AzureHDInsightCluster $clusterNameInvoke-Hive -File $hqlScriptFile

Im PowerShell-Skript ist auch zu sehen, dass nur kurz vor der Ausführung der HiveQL-Skripte ein HDInsight-Cluster erstellt wird. Stand heute kann ich nur empfehlen, euren HDInsight-Cluster sofort zu löschen, sobald ihr keine Rechnungen darauf ausführt, um Kosten zu sparen. Die Daten werden dabei nicht gelöscht, was super ist, da sie ja sowieso auf dem Blob Storage weiter währen.

Wie immer sollte man die Parameter Abschnitten “0. Azure Account Details” und “1. Input Information” selber mit den entsprechenden Information füllen.

001002003004005006007008009010011012013014015016017018019020021022023024025026027028029030031032033034035036037038039040041042043044045046047048049050051052053054055056057058059060061062063064065066067068069070071072073074075076077078079080081082083084085086087088089090091092093094095096097098099100101 ############################################## Run HiveQL Scripts in HDInsight-Cluster############################################## 0. Azure Account DetailsAdd-AzureAccount$subName = "Internal Consumption"Select-AzureSubscription -SubscriptionName $subName# Azure account details automatically set$subID = Get-AzureSubscription -Current | %{ $_.SubscriptionId } ################################################################### 1. Input information$clusterName = "<HDInsightClusterName>"$location = "<DatacenterLocation>" #e.g. North Europe, West Europe, etc.$numNodes = 1 #start small$storageAccount = "<StorageAccountName>"$defaultContainer = "<StorageContainerName>"# Variables automatically set for you$storageKey = Get-AzureStorageKey $storageAccount | %{ $_.Primary } $storageContext = New-AzureStorageContext -StorageAccountName $storageAccount ` -StorageAccountKey $storageKey$fullStorage = "${storageAccount}.blob.core.windows.net"# local HiveQL scripts$localFileNames = "<scriptFileName1>", "<scriptFileName2>"$localFolder = "C:\<scriptFilesPath>"$blobFolder = "scripts"################################################################### 2. Upload HiveQL scripts from local to Azure Blob Storageforeach ($item in $localFileNames){ $hqlLocalFile = "$localFolder\$item.hql" $hqlBlobName = "$blobFolder/$item.hql" Write-Host "Copying $hqlLocalFile to $hqlBlobName" -BackgroundColor Green # Copy the file from local workstation to WASB Set-AzureStorageBlobContent -File $hqlLocalFile -Container $defaultContainer ` -Blob $hqlBlobName -Context $storageContext}################################################################### 3. Create HDInsight Cluster$clusterCreds = Get-Credential ` -Message "New admin account to be created for your HDInsight cluster"# Simple createNew-AzureHDInsightCluster -Name $clusterName -Subscription $subID ` -Location $location -DefaultStorageAccountName $storageAccount ` -DefaultStorageAccountKey $storageKey -DefaultStorageContainerName $defaultContainer ` -Credential $clusterCreds -ClusterSizeInNodes $numNodes################################################################### 4. Execute HiveQL scriptsforeach ($item in $localFileNames){ # set script $hqlScriptFile = "wasb://$defaultContainer@$storageAccount.blob.core.windows.net/$blobFolder/$item.hql" Write-Host "Invoking HiveQL script $item" -BackgroundColor Green Use-AzureHDInsightCluster $clusterName # execute HiveQL script Invoke-Hive -File $hqlScriptFile}################################################################### 5. OPTIONAL: Clean up# Remove HDInsight clusterRemove-AzureHDInsightCluster -Name $clusterName# OPTIONAL: remove scriptsforeach ($item in $localFileNames){ $hqlLocalFile = "$localFolder\$item.hql" $hqlBlobName = "$blobFolder/$item.hql" Write-Host "Removing $hqlBlobName" -BackgroundColor Green # Remove the file from WASB Remove-AzureStorageBlob -Blob $hqlBlobName ` -Container $defaultContainer -Context $storageContext}