Megosztás a következőn keresztül:


Apache Hive-lekérdezések futtatása a PowerShell használatával

Ez a dokumentum egy példát mutat be az Apache Hive-lekérdezések HDInsight-fürtön futó Apache Hadoopban való futtatására Azure PowerShell használatával.

Megjegyzés

Ez a dokumentum nem nyújt részletes leírást arról, hogy a példákban használt HiveQL-utasítások mit tesznek. Az ebben a példában használt HiveQL-lel kapcsolatos információkért lásd: Az Apache Hive használata az Apache Hadooppal a HDInsighton.

Előfeltételek

Hive-lekérdezések futtatása

Azure PowerShell olyan parancsmagokat biztosít, amelyekkel távolról futtathat Hive-lekérdezéseket a HDInsighton. A parancsmagok belsőleg REST-hívásokat intéznek a WebHCathez a HDInsight-fürtön.

A hive-lekérdezések távoli HDInsight-fürtön való futtatásakor a következő parancsmagok használhatók:

  • Connect-AzAccount: Hitelesíti Azure PowerShell az Azure-előfizetésében.
  • New-AzHDInsightHiveJobDefinition: Létrehoz egy feladatdefiníciót a megadott HiveQL-utasítások használatával.
  • Start-AzHDInsightJob: Elküldi a feladatdefiníciót a HDInsightnak, és elindítja a feladatot. A függvény egy feladatobjektumot ad vissza.
  • Wait-AzHDInsightJob: A feladat objektumával ellenőrzi a feladat állapotát. Megvárja, amíg a feladat befejeződik, vagy túllépi a várakozási időt.
  • Get-AzHDInsightJobOutput: A feladat kimenetének lekérésére szolgál.
  • Invoke-AzHDInsightHiveJob: HiveQL-utasítások futtatására szolgál. Ez a parancsmag blokkolja a lekérdezés befejezését, majd visszaadja az eredményeket.
  • Use-AzHDInsightCluster: Beállítja a parancshoz használni kívánt aktuális fürtöt Invoke-AzHDInsightHiveJob .

Az alábbi lépések bemutatják, hogyan futtathat feladatokat a HDInsight-fürtben ezek a parancsmagok:

  1. Szerkesztő használatával mentse a következő kódot a következőként 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
    
  2. Nyisson meg egy új Azure PowerShell parancssort. Módosítsa a könyvtárakat a hivejob.ps1 fájl helyére, majd futtassa a szkriptet a következő paranccsal:

    .\hivejob.ps1
    

    A szkript futtatásakor a rendszer kérni fogja, hogy adja meg a fürt nevét és a HTTPS/fürt Rendszergazda fiók hitelesítő adatait. Előfordulhat, hogy a rendszer kérni fogja, hogy jelentkezzen be az Azure-előfizetésbe.

  3. Amikor a feladat befejeződött, a következő szöveghez hasonló információkat ad vissza:

    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
    
  4. Ahogy korábban említettük, Invoke-Hive lekérdezés futtatására és a válaszra való várakozásra használható. A Invoke-Hive működésének megtekintéséhez használja a következő szkriptet:

    # 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
    

    A kimenet a következő szöveghez hasonlóan néz ki:

    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
    

    Megjegyzés

    Hosszabb HiveQL-lekérdezésekhez használhatja a Azure PowerShell Here-Strings parancsmagot vagy a HiveQL-szkriptfájlokat. Az alábbi kódrészlet bemutatja, hogyan futtathat HiveQL-szkriptfájlt a Invoke-Hive parancsmaggal. A HiveQL-szkriptfájlt fel kell tölteni wasbs://.

    Invoke-AzHDInsightHiveJob -File "wasbs://<ContainerName>@<StorageAccountName>/<Path>/query.hql"

    További információ az Here-Stringsről: HERE-STRINGS.

Hibaelhárítás

Ha a feladat befejezésekor nem ad vissza információt, tekintse meg a hibanaplókat. A feladat hibainformációinak megtekintéséhez adja hozzá a következőt a hivejob.ps1 fájl végéhez, mentse, majd futtassa újra.

# Print the output of the Hive job.
Get-AzHDInsightJobOutput `
        -Clustername $clusterName `
        -JobId $job.JobId `
        -HttpCredential $creds `
        -DisplayOutputType StandardError

Ez a parancsmag a feladat feldolgozása során az STDERR-be írt információkat adja vissza.

Összefoglalás

Amint láthatja, a Azure PowerShell egyszerű módot kínál a Hive-lekérdezések HDInsight-fürtön való futtatására, a feladat állapotának figyelésére és a kimenet lekérésére.

Következő lépések

A HIVE-vel kapcsolatos általános információk a HDInsightban:

További információk a Hadoop hdinsight-alapú kezelésének egyéb módjairól: