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
Apache Hadoop-fürt a HDInsighton. Tekintse meg a HDInsight linuxos használatának első lépéseit.
REST-ügyfél. Ez a dokumentum az Invoke-WebRequest parancsot használja a Windows PowerShellen és a Curlen a Bashen.
Ha Basht használ, jq-ra, parancssori JSON-processzorra is szüksége lesz. Lásd: https://stedolan.github.io/jq/.
Alap URI a REST API-hoz
A HDInsight https://CLUSTERNAME.azurehdinsight.net/api/v1/clusters/CLUSTERNAME
CLUSTERNAME
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
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.
Az URL-cím
https://$CLUSTERNAME.azurehdinsight.net/templeton/v1
kezdete minden kérésnél ugyanaz. Az elérési út azt jelzi,/status
hogy 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"}
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ó.
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.
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 aexample/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:
- Az Apache Hive használata az Apache Hadooptal a HDInsighton
- A MapReduce használata az Apache Hadooptal a HDInsighton
A dokumentumban használt REST API-val kapcsolatos további információkért tekintse meg a WebHCat referenciadokumentumát .