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


Apache Hive-lekérdezések futtatása az Apache Hadooptal a HDInsightban REST használatával

Megtudhatja, hogyan futtathat Apache Hive-lekérdezéseket a WebHCat REST API-val az Apache Hadooptal az Azure HDInsight-fürtön.

Előfeltételek

Alap URI a REST API-hoz

A HDInsight https://CLUSTERNAME.azurehdinsight.net/api/v1/clusters/CLUSTERNAMECLUSTERNAME REST API-hoz tartozó alap egységes erőforrás-azonosító (URI) a fürt neve. Az URI-kban a fürtnevek megkülönböztetik a kis- és nagybetűket. Míg az URI (CLUSTERNAME.azurehdinsight.net) teljes tartománynév (FQDN) részének fürtneve nem megkülönbözteti a kis- és nagybetűket, az URI többi előfordulása megkülönbözteti a kis- és nagybetűket.

Hitelesítés

Ha cURL-t vagy bármilyen más REST-kommunikációt használ a WebHCat szolgáltatással, hitelesítenie kell a kéréseket a HDInsight-fürt rendszergazdájának felhasználóneve és jelszava megadásával. A REST API védelméről alapszintű hitelesítés gondoskodik. Annak érdekében, hogy a hitelesítő adatok biztonságosan legyenek elküldve a kiszolgálóra, mindig küldjön kéréseket a Biztonságos HTTP (HTTPS) használatával.

Beállítás (Hitelesítő adatok megőrzése)

Őrizze meg a hitelesítő adatait, hogy ne kelljen újra megismétlenie őket az egyes példákhoz. A fürt neve egy külön lépésben marad meg.

V. Bash
Szerkessze az alábbi szkriptet a tényleges jelszóra cserélve PASSWORD . Ezután adja meg a parancsot.

export PASSWORD='PASSWORD'

B. PowerShell Hajtsa végre az alábbi kódot, és adja meg a hitelesítő adatait az előugró ablakban:

$creds = Get-Credential -UserName "admin" -Message "Enter the HDInsight login"

A helyesen kisbetűs fürtnév azonosítása

A fürt nevének tényleges burkolata eltérhet a várttól, a fürt létrehozásának módjától függően. Az itt ismertetett lépések a tényleges burkolatot jelenítik meg, majd egy változóban tárolják az összes későbbi példa esetében.

Szerkessze az alábbi szkripteket a fürt nevére való lecseréléséhez CLUSTERNAME . Ezután adja meg a parancsot. (A teljes tartománynév fürtneve nem megkülönbözteti a kis- és nagybetűk nevét.)

export CLUSTER_NAME=$(curl -u admin:$PASSWORD -sS -G "https://CLUSTERNAME.azurehdinsight.net/api/v1/clusters" | jq -r '.items[].Clusters.cluster_name')
echo $CLUSTER_NAME
# Identify properly cased cluster name
$resp = Invoke-WebRequest -Uri "https://CLUSTERNAME.azurehdinsight.net/api/v1/clusters" `
    -Credential $creds -UseBasicParsing
$clusterName = (ConvertFrom-Json $resp.Content).items.Clusters.cluster_name;

# Show cluster name
$clusterName

Hive-lekérdezések futtatása

  1. A HDInsight-fürthöz való csatlakozás ellenőrzéséhez használja az alábbi parancsok egyikét:

    curl -u admin:$PASSWORD -G https://$CLUSTER_NAME.azurehdinsight.net/templeton/v1/status
    
    $resp = Invoke-WebRequest -Uri "https://$clusterName.azurehdinsight.net/templeton/v1/status" `
       -Credential $creds `
       -UseBasicParsing
    $resp.Content
    

    A következő szöveghez hasonló választ kap:

    {"status":"ok","version":"v1"}
    

    Ezen parancs paraméterei a következők:

    • -u - A kérelem hitelesítéséhez használt felhasználónév és jelszó.
    • -G – Azt jelzi, hogy ez a kérés GET művelet.
  2. Az URL-cím https://$CLUSTERNAME.azurehdinsight.net/templeton/v1kezdete minden kérésnél ugyanaz. Az elérési út azt jelzi, /statushogy a kérés a WebHCat (más néven Templeton) állapotának visszaadása a kiszolgálóhoz. A Hive verzióját a következő paranccsal is kérheti:

    curl -u admin:$PASSWORD -G https://$CLUSTER_NAME.azurehdinsight.net/templeton/v1/version/hive
    
    $resp = Invoke-WebRequest -Uri "https://$clusterName.azurehdinsight.net/templeton/v1/version/hive" `
       -Credential $creds `
       -UseBasicParsing
    $resp.Content
    

    Ez a kérés az alábbi szöveghez hasonló választ ad vissza:

    {"module":"hive","version":"1.2.1000.2.6.5.3008-11"}
    
  3. A következővel hozzon létre egy log4jLogs nevű táblát:

    JOB_ID=$(curl -s -u admin:$PASSWORD -d user.name=admin -d execute="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+t4+AS+sev,COUNT(*)+AS+count+FROM+log4jLogs+WHERE+t4+=+'[ERROR]'+AND+INPUT__FILE__NAME+LIKE+'%25.log'+GROUP+BY+t4;" -d statusdir="/example/rest" https://$CLUSTER_NAME.azurehdinsight.net/templeton/v1/hive | jq -r .id)
    echo $JOB_ID
    
    $reqParams = @{"user.name"="admin";"execute"="DROP TABLE log4jLogs;CREATE EXTERNAL TABLE log4jLogs(t1 string, t2 string, t3 string, t4 string, t5 string, t6 string, t7 string) ROW FORMAT DELIMITED BY ' ' STORED AS TEXTFILE LOCATION '/example/data/;SELECT t4 AS sev,COUNT(*) AS count FROM log4jLogs WHERE t4 = '[ERROR]' GROUP BY t4;";"statusdir"="/example/rest"}
    $resp = Invoke-WebRequest -Uri "https://$clusterName.azurehdinsight.net/templeton/v1/hive" `
       -Credential $creds `
       -Body $reqParams `
       -Method POST `
       -UseBasicParsing
    $jobID = (ConvertFrom-Json $resp.Content).id
    $jobID
    

    Ez a kérés a POST metódust használja, amely a kérés részeként adatokat küld a REST API-nak. A kérés a következő adatértékeket küldi el:

    • user.name - A parancsot futtató felhasználó.
    • execute - A végrehajtandó HiveQL-utasítások.
    • statusdir - Az a könyvtár, amelybe a feladat állapota meg van írva.

    Ezek az utasítások a következő műveleteket hajtják végre:

    • DROP TABLE – Ha a tábla már létezik, akkor törlődik.

    • CREATE EXTERNAL TABLE – Létrehoz egy új "külső" táblát a Hive-ben. A külső táblák csak a Hive-ben tárolják a tábladefiníciót. Az adatok az eredeti helyen maradnak.

      Feljegyzés

      A külső táblákat akkor kell használni, ha azt várja, hogy a mögöttes adatokat külső forrás frissíti. Például egy automatikus adatfeltöltési folyamat vagy egy másik MapReduce-művelet.

      Egy külső tábla elvetése nem törli az adatokat, csak a tábladefiníciót.

    • ROW FORMAT – Az adatok formázásának menete. Az egyes naplók mezőit szóköz választja el egymástól.

    • STORED AS TEXTFILE LOCATION - Az adatok tárolási helye (a példa/adatkönyvtár) és a szövegként tárolt adatok.

    • SELECT– Kiválasztja az összes olyan sor számát, ahol a t4 oszlop tartalmazza a [ERROR] értéket. Ez az utasítás 3 értéket ad vissza, mivel három sor tartalmazza ezt az értéket.

      Feljegyzés

      Figyelje meg, hogy a HiveQL-utasítások közötti szóközöket a Curl használatakor a + karakter váltja fel. A szóközt (például elválasztót) tartalmazó idézett értékeket nem szabad lecserélni a következőre +: .

      Ez a parancs egy feladatazonosítót ad vissza, amely a feladat állapotának ellenőrzésére használható.

  4. A feladat állapotának ellenőrzéséhez használja a következő parancsot:

    curl -u admin:$PASSWORD -d user.name=admin -G https://$CLUSTER_NAME.azurehdinsight.net/templeton/v1/jobs/$jobid | jq .status.state
    
    $reqParams=@{"user.name"="admin"}
    $resp = Invoke-WebRequest -Uri "https://$clusterName.azurehdinsight.net/templeton/v1/jobs/$jobID" `
       -Credential $creds `
       -Body $reqParams `
       -UseBasicParsing
    # ConvertFrom-JSON can't handle duplicate names with different case
    # So change one to prevent the error
    $fixDup=$resp.Content.Replace("jobID","job_ID")
    (ConvertFrom-Json $fixDup).status.state
    

    Ha a feladat befejeződött, az állapot SIKERES lesz.

  5. Miután a feladat állapota sikeresre változott, lekérheti a feladat eredményeit az Azure Blob Storage-ból. A statusdir lekérdezéssel átadott paraméter tartalmazza a kimeneti fájl helyét, ebben az esetben /example/rest. Ez a cím a fürtök alapértelmezett tárolójában tárolja a example/curl kimenetet a címtárban.

    Ezeket a fájlokat az Azure CLI használatával listázhatja és letöltheti. További információ: Az Azure CLI használata az Azure Storage-ral.

Következő lépések

További információ a Hadoop HDInsighton való használatával kapcsolatos egyéb módokról:

A dokumentumban használt REST API-val kapcsolatos további információkért tekintse meg a WebHCat referenciadokumentumát .