Vad är Apache Hive och HiveQL i Azure HDInsight?
Apache Hive är ett informationslagersystem för Apache Hadoop. Hive möjliggör datasammanfattning, frågekörning och analys av data. Hive-frågor skrivs i HiveQL, vilket är ett frågespråk som liknar SQL.
Med Hive kan du projicera struktur på i stort sett ostrukturerade data. När du har definierat strukturen kan du använda HiveQL för att köra frågor mot data utan kunskap om Java eller MapReduce.
HDInsight innehåller flera klustertyper som är anpassade för specifika arbetsbelastningar. Följande klustertyper används oftast för Hive-frågor:
Klustertyp | beskrivning |
---|---|
Interaktiv fråga | Ett Hadoop-kluster som tillhandahåller LLAP-funktioner (Low Latency Analytical Processing) för att förbättra svarstiderna för interaktiva frågor. Mer information finns i dokumentet Börja med Interaktiv fråga i HDInsight. |
Hadoop | Ett Hadoop-kluster som är justerat för batchbearbetningsarbetsbelastningar. Mer information finns i dokumentet Starta med Apache Hadoop i HDInsight . |
Spark | Apache Spark har inbyggda funktioner för att arbeta med Hive. Mer information finns i dokumentet Start with Apache Spark on HDInsight (Starta med Apache Spark i HDInsight ). |
HBase | HiveQL kan användas för att fråga efter data som lagras i Apache HBase. Mer information finns i dokumentet Starta med Apache HBase i HDInsight . |
Så här använder du Hive
Använd följande tabell för att identifiera de olika sätten att använda Hive med HDInsight:
Använd den här metoden om du vill... | ...interaktiva frågor | ...batchbearbetning | ... från det här klientoperativsystemet |
---|---|---|---|
HDInsight-verktyg för Visual Studio Code | ✔ | ✔ | Linux, Unix, macOS X eller Windows |
HDInsight-verktyg för Visual Studio | ✔ | ✔ | Windows |
Hive View | ✔ | ✔ | Alla (webbläsarbaserade) |
Beeline-klient | ✔ | ✔ | Linux, Unix, macOS X eller Windows |
REST-API | ✔ | Linux, Unix, macOS X eller Windows | |
Windows PowerShell | ✔ | Windows |
Referens för HiveQL-språk
HiveQL-språkreferens finns i språkhandboken.
Hive och datastruktur
Hive förstår hur man arbetar med strukturerade och halvstrukturerade data. Till exempel textfiler där fälten avgränsas av specifika tecken. Följande HiveQL-instruktion skapar en tabell över utrymmesavgränsade data:
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/';
Hive stöder även anpassade serialiserare/deserialiserare (SerDe) för komplexa eller oregelbundet strukturerade data. Mer information finns i dokumentet Så här använder du en anpassad JSON SerDe med HDInsight .
Mer information om filformat som stöds av Hive finns i språkhandboken (https://cwiki.apache.org/confluence/display/Hive/LanguageManual)
Interna Hive-tabeller jämfört med externa tabeller
Det finns två typer av tabeller som du kan skapa med Hive:
Internt: Data lagras i Hive-informationslagret. Informationslagret finns på
/hive/warehouse/
standardlagringen för klustret.Använd interna tabeller när något av följande villkor gäller:
- Data är tillfälliga.
- Du vill att Hive ska hantera livscykeln för tabellen och data.
Externt: Data lagras utanför informationslagret. Data kan lagras på valfri lagring som är tillgänglig för klustret.
Använd externa tabeller när något av följande villkor gäller:
- Data används också utanför Hive. Datafilerna uppdateras till exempel av en annan process (som inte låser filerna.)
- Data måste finnas kvar på den underliggande platsen, även efter att tabellen har släppts.
- Du behöver en anpassad plats, till exempel ett lagringskonto som inte är standard.
- Ett annat program än Hive hanterar dataformatet, platsen och så vidare.
Mer information finns i blogginlägget Interna och externa hive-tabeller.
Användardefinierade funktioner (UDF)
Hive kan också utökas via användardefinierade funktioner (UDF).. Med en UDF kan du implementera funktioner eller logik som inte är lätt att modellera i HiveQL. Ett exempel på hur du använder UDF:er med Hive finns i följande dokument:
Använda en användardefinierad Python-funktion med Apache Hive
Så här lägger du till en anpassad Apache Hive-användardefinierad funktion i HDInsight
Exempeldata
Hive i HDInsight är förinstallerat med en intern tabell med namnet hivesampletable
. HDInsight innehåller också exempeldatauppsättningar som kan användas med Hive. Dessa datauppsättningar lagras i katalogerna /example/data
och /HdiSamples
. Dessa kataloger finns i standardlagringen för klustret.
Exempel på Hive-fråga
Följande HiveQL-uttryck projicerar kolumner i /example/data/sample.log
filen:
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 '%.log'
GROUP BY t4;
I föregående exempel utför HiveQL-uttrycken följande åtgärder:
Utdrag | beskrivning |
---|---|
DROP TABLE | Om tabellen redan finns tar du bort den. |
SKAPA EXTERN TABELL | Skapar en ny extern tabell i Hive. Externa tabeller lagrar endast tabelldefinitionen i Hive. Data finns kvar på den ursprungliga platsen och i det ursprungliga formatet. |
RADFORMAT | Talar om för Hive hur data formateras. I det här fallet avgränsas fälten i varje logg med ett blanksteg. |
LAGRAD SOM TEXTFILPLATS | Meddelar Hive var data lagras ( example/data katalogen) och att de lagras som text. Data kan finnas i en fil eller spridas över flera filer i katalogen. |
SELECT | Markerar ett antal av alla rader där kolumnen 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. |
INPUT__FILE__NAME SOM %.log | Hive försöker tillämpa schemat på alla filer i katalogen. I det här fallet innehåller katalogen filer som inte matchar schemat. För att förhindra skräpdata i resultatet säger den här instruktionen till Hive att vi endast ska returnera data från filer som slutar i .log. |
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 MapReduce-åtgärd.
Att ta bort en extern tabell tar inte bort data, utan tar bara bort tabelldefinitionen.
Om du vill skapa en intern tabell i stället för extern använder du följande HiveQL:
CREATE TABLE IF NOT EXISTS errorLogs (
t1 string,
t2 string,
t3 string,
t4 string,
t5 string,
t6 string,
t7 string)
STORED AS ORC;
INSERT OVERWRITE TABLE errorLogs
SELECT t1, t2, t3, t4, t5, t6, t7
FROM log4jLogs WHERE t4 = '[ERROR]';
Dessa instruktioner utför följande åtgärder:
Utdrag | beskrivning |
---|---|
SKAPA TABELL OM DEN INTE FINNS | Om tabellen inte finns skapar du den. Eftersom nyckelordet EXTERNAL inte används skapar den här instruktionen en intern tabell. Tabellen lagras i Hive-informationslagret och hanteras helt av Hive. |
LAGRAS SOM ORC | Lagrar data i ORC-format (Optimized Row Columnar). ORC är ett mycket optimerat och effektivt format för lagring av Hive-data. |
INFOGA SKRIV ÖVER ... VÄLJ | Markerar rader från tabellen log4jLogs som innehåller [ERROR] och infogar sedan data i tabellen errorLogs . |
Kommentar
Till skillnad från externa tabeller tas även underliggande data bort när en intern tabell tas bort.
Förbättra prestanda för Hive-frågor
Apache Tez
Apache Tez är ett ramverk som gör att dataintensiva program, till exempel Hive, kan köras mycket mer effektivt i stor skala. Tez är aktiverat som standard. Designdokumenten för Apache Hive på Tez innehåller information om implementeringsalternativen och justeringskonfigurationerna.
Analysbearbetning med låg svarstid (LLAP)
LLAP (kallas ibland Live Long and Process) är en ny funktion i Hive 2.0 som tillåter minnesintern cachelagring av frågor.
HDInsight tillhandahåller LLAP i Interaktiv fråga klustertyp. Mer information finns i dokumentet Starta med Interaktiv fråga.
Schemalägga Hive-frågor
Det finns flera tjänster som kan användas för att köra Hive-frågor som en del av ett schemalagt eller på begäran-arbetsflöde.
Azure Data Factory
Med Azure Data Factory kan du använda HDInsight som en del av en Data Factory-pipeline. Mer information om hur du använder Hive från en pipeline finns i dokumentet Transformera data med hive-aktivitet i Azure Data Factory .
Hive-jobb och SQL Server Integration Services
Du kan använda SQL Server Integration Services (SSIS) för att köra ett Hive-jobb. Azure Feature Pack för SSIS innehåller följande komponenter som fungerar med Hive-jobb i HDInsight.
Mer information finns i dokumentationen för Azure Feature Pack .
Apache Oozie
Apache Oozie är ett arbetsflödes- och samordningssystem som hanterar Hadoop-jobb. Mer information om hur du använder Oozie med Hive finns i Använda Apache Oozie för att definiera och köra ett arbetsflödesdokument .
Kommentar
Phoenix Storage Handler för Hive stöds inte i HDInsight
Nästa steg
Nu när du har lärt dig vad Hive är och hur du använder det med Hadoop i HDInsight använder du följande länkar för att utforska andra sätt att arbeta med Azure HDInsight.