Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Lär dig hur du använder WebHCat REST API för att köra Apache Hive-frågor med Apache Hadoop i Azure HDInsight-kluster.
Förutsättningar
Ett Apache Hadoop-kluster i HDInsight. Se Kom igång med HDInsight i Linux.
En REST-klient. Det här dokumentet använder Invoke-WebRequest i Windows PowerShell och Curl på Bash.
Om du använder Bash behöver du även jq, en JSON-processor på kommandoraden. Se https://stedolan.github.io/jq/.
Bas-URI för REST API
Bas-URI (Uniform Resource Identifier) för REST-API:et i HDInsight är https://CLUSTERNAME.azurehdinsight.net/api/v1/clusters/CLUSTERNAME, där CLUSTERNAME är namnet på klustret. Klusternamn i URI:er är skiftlägeskänsliga. Klusternamnet i den fullständigt kvalificerade domännamnsdelen (FQDN) i URI:n (CLUSTERNAME.azurehdinsight.net) är inte skiftlägeskänsligt, men andra förekomster i URI:n är skiftlägeskänsliga.
Autentisering
När du använder cURL eller annan REST-kommunikation med WebHCat måste du autentisera begäranden genom att ange användarnamnet och lösenordet för HDInsight-klusteradministratören. REST API skyddas via grundläggande autentisering. För att säkerställa att dina autentiseringsuppgifter skickas säkert till servern gör du alltid begäranden med hjälp av Säker HTTP (HTTPS).
Installation (Bevara autentiseringsuppgifter)
Behåll dina autentiseringsuppgifter för att undvika att ange dem igen för varje exempel. Klusternamnet bevaras i ett separat steg.
A. Bash
Redigera skriptet nedan genom att PASSWORD ersätta med ditt faktiska lösenord. Ange sedan kommandot .
export PASSWORD='PASSWORD'
B. PowerShell Kör koden nedan och ange dina autentiseringsuppgifter i popup-fönstret:
$creds = Get-Credential -UserName "admin" -Message "Enter the HDInsight login"
Identifiera ett korrekt skiftlägesklusternamn
Det faktiska höljet för klusternamnet kan skilja sig från förväntat, beroende på hur klustret skapades. Stegen här visar det faktiska höljet och lagrar det sedan i en variabel för alla senare exempel.
Redigera skripten nedan för att ersätta CLUSTERNAME med ditt klusternamn. Ange sedan kommandot . (Klusternamnet för FQDN är inte skiftlägeskänsligt.)
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
Köra en Hive-fråga
Om du vill kontrollera att du kan ansluta till ditt HDInsight-kluster använder du något av följande kommandon:
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.ContentDu får ett svar som liknar följande text:
{"status":"ok","version":"v1"}De parametrar som används i det här kommandot är följande:
-
-u– Användarnamnet och lösenordet som används för att autentisera begäran. -
-G– Anger att den här begäran är en GET-åtgärd.
-
Början av URL:en,
https://$CLUSTERNAME.azurehdinsight.net/templeton/v1, är densamma för alla begäranden. Sökvägen/statusanger att begäran är att återge WebHCat-status (kallas även Templeton) för servern. Du kan också begära versionen av Hive med hjälp av följande kommando: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.ContentDen här begäran returnerar ett svar som liknar följande text:
{"module":"hive","version":"1.2.1000.2.6.5.3008-11"}Använd följande för att skapa en tabell med namnet log4jLogs:
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 $jobIDDen här begäran använder POST-metoden, som skickar data som en del av begäran till REST-API:et. Följande datavärden skickas med begäran:
-
user.name– Den användare som kör kommandot. -
execute– HiveQL-uttryck som ska köras. -
statusdir– Den katalog som statusen för det här jobbet skrivs till.
Dessa instruktioner utför följande åtgärder:
DROP TABLE– Om tabellen redan finns tas den bort.CREATE EXTERNAL TABLE– Skapar en ny extern tabell i Hive. Externa tabeller lagrar endast tabelldefinitionen i Hive. Data finns kvar på den ursprungliga platsen.Kommentar
Externa tabeller bör användas när du förväntar dig att underliggande data ska uppdateras av en extern källa. Till exempel en automatiserad datauppladdningsprocess eller en annan MapReduce-åtgärd.
Om du tar bort en extern tabell tas inte data bort, utan endast tabelldefinitionen.
ROW FORMAT– Hur datan formateras. Fälten i varje logg avgränsas med ett blanksteg.STORED AS TEXTFILE LOCATION– Var data lagras (exemplet/datakatalogen) och att de lagras som text.SELECT– Markerar ett antal av alla rader där kolumn t4 innehåller värdet [ERROR]. Den här instruktionen returnerar värdet 3 eftersom det finns tre rader som innehåller det här värdet.Kommentar
Observera att blankstegen mellan HiveQL-uttryck ersätts med tecknet
+när de används med Curl. Angivna värden som innehåller ett blanksteg, till exempel avgränsare, bör inte ersättas med+.Det här kommandot returnerar ett jobb-ID som kan användas för att kontrollera jobbets status.
-
Om du vill kontrollera jobbets status använder du följande kommando:
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.stateOm jobbet har slutförts, är tillståndet SLUTFÖRT.
När jobbets tillstånd har ändrats till SUCCEEDED kan du hämta resultatet av jobbet från Azure Blob Storage. Parametern
statusdirsom skickades med frågan innehåller platsen för utdatafilen. I det här fallet/example/rest. Den här adressen lagrar utdata iexample/curlkatalogen i klusterstandardlagringen.Du kan lista och ladda ned dessa filer med hjälp av Azure CLI. Mer information finns i Använda Azure CLI med Azure Storage.
Nästa steg
Information om andra sätt att arbeta med Hadoop på HDInsight:
Mer information om REST-API:et som används i det här dokumentet finns i WebHCat-referensdokumentet .