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:

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.