Wat is Apache Hive en HiveQL in Azure HDInsight?

Apache Hive is een datawarehousesysteem voor Apache Hadoop. Hive maakt gegevenssamenvatting, query's en analyse van gegevens mogelijk. Hive-query's worden geschreven in HiveQL. Dit is een querytaal die vergelijkbaar is met SQL.

Met Hive kunt u structuur op grotendeels ongestructureerde gegevens projecteren. Nadat u de structuur hebt gedefinieerd, kunt u HiveQL gebruiken om query's uit te voeren op de gegevens zonder kennis van Java of MapReduce.

HDInsight biedt verschillende clustertypen, die zijn afgestemd op specifieke workloads. De volgende clustertypen worden het vaakst gebruikt voor Hive-query's:

Clustertype Beschrijving
Interactive Query Een Hadoop-cluster met llap-functionaliteit (Low Latency Analytical Processing) om de reactietijden voor interactieve query's te verbeteren. Zie het document Start with Interactive Query in HDInsight voor meer informatie.
Hadoop Een Hadoop-cluster dat is afgestemd op werkbelastingen voor batchverwerking. Zie het document Start met Apache Hadoop in HDInsight voor meer informatie.
Spark Apache Spark heeft ingebouwde functionaliteit voor het werken met Hive. Zie het document Beginnen met Apache Spark in HDInsight voor meer informatie.
HBase HiveQL kan worden gebruikt om query's uit te voeren op gegevens die zijn opgeslagen in Apache HBase. Zie het document Beginnen met Apache HBase in HDInsight voor meer informatie.

Hive gebruiken

Gebruik de volgende tabel om de verschillende manieren te ontdekken om Hive te gebruiken met HDInsight:

Gebruik deze methode als u wilt... ...interactieve query's ...batchverwerking ... van dit clientbesturingssysteem
HDInsight-hulpprogramma's voor Visual Studio Code Linux, Unix, macOS X of Windows
HDInsight-hulpprogramma's voor Visual Studio Vensters
Hive View Elke (browser)
Beeline-client Linux, Unix, macOS X of Windows
REST API   Linux, Unix, macOS X of Windows
Windows PowerShell   Vensters

Naslaginformatie over hiveQL-taal

Naslaginformatie over hiveQL-talen is beschikbaar in de taalhandleiding.

Hive en gegevensstructuur

Hive begrijpt hoe u kunt werken met gestructureerde en semi-gestructureerde gegevens. Tekstbestanden waarbij de velden bijvoorbeeld worden gescheiden door specifieke tekens. Met de volgende HiveQL-instructie maakt u een tabel over door spaties gescheiden gegevens:

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 ondersteunt ook aangepaste serializer/deserializers (SerDe) voor complexe of onregelmatig gestructureerde gegevens. Zie het document How to use a custom JSON SerDe with HDInsight document (Een aangepaste JSON SerDe gebruiken met HDInsight ) voor meer informatie.

Zie de taalhandleiding voor meer informatie over bestandsindelingen die worden ondersteund door Hive (https://cwiki.apache.org/confluence/display/Hive/LanguageManual)

Interne Hive-tabellen versus externe tabellen

Er zijn twee typen tabellen die u met Hive kunt maken:

  • Intern: Gegevens worden opgeslagen in het Hive-datawarehouse. Het datawarehouse bevindt zich op /hive/warehouse/ de standaardopslag voor het cluster.

    Gebruik interne tabellen wanneer een van de volgende voorwaarden van toepassing is:

    • Gegevens zijn tijdelijk.
    • U wilt dat Hive de levenscyclus van de tabel en gegevens beheert.
  • Extern: gegevens worden buiten het datawarehouse opgeslagen. De gegevens kunnen worden opgeslagen op elke opslag die toegankelijk is voor het cluster.

    Gebruik externe tabellen wanneer een van de volgende voorwaarden van toepassing is:

    • De gegevens worden ook buiten Hive gebruikt. De gegevensbestanden worden bijvoorbeeld bijgewerkt door een ander proces (waarmee de bestanden niet worden vergrendeld.)
    • Gegevens moeten op de onderliggende locatie blijven, zelfs nadat de tabel is verwijderd.
    • U hebt een aangepaste locatie nodig, zoals een niet-standaardopslagaccount.
    • Een ander programma dan Hive beheert de gegevensindeling, locatie enzovoort.

Zie het blogbericht Interne en externe tabellen van Hive voor meer informatie.

Door de gebruiker gedefinieerde functies (UDF)

Hive kan ook worden uitgebreid via door de gebruiker gedefinieerde functies (UDF). Met een UDF kunt u functionaliteit of logica implementeren die niet eenvoudig is gemodelleerd in HiveQL. Zie de volgende documenten voor een voorbeeld van het gebruik van UDF's met Hive:

Voorbeeldgegevens

Hive in HDInsight wordt vooraf geladen met een interne tabel met de naam hivesampletable. HDInsight biedt ook voorbeeldgegevenssets die kunnen worden gebruikt met Hive. Deze gegevenssets worden opgeslagen in de /example/data mappen en /HdiSamples mappen. Deze mappen bevinden zich in de standaardopslag voor uw cluster.

Voorbeeld van Hive-query

De volgende HiveQL-instructies projectkolommen naar het /example/data/sample.log bestand:

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;

In het vorige voorbeeld voeren de HiveQL-instructies de volgende acties uit:

Instructie Beschrijving
DROP TABLE Als de tabel al bestaat, verwijdert u deze.
CREATE EXTERNAL TABLE Hiermee maakt u een nieuwe externe tabel in Hive. Externe tabellen slaan alleen de tabeldefinitie op in Hive. De gegevens blijven op de oorspronkelijke locatie en in de oorspronkelijke indeling.
RIJOPMAAK Vertelt Hive hoe de gegevens zijn opgemaakt. In dit geval worden de velden in elk logboek gescheiden door een spatie.
LOCATIE VAN OPGESLAGEN ALS TEKSTBESTAND Vertelt Hive waar de gegevens zijn opgeslagen (de example/data map) en of deze zijn opgeslagen als tekst. De gegevens kunnen zich in één bestand bevinden of verspreid over meerdere bestanden in de map.
SELECTEREN Hiermee selecteert u het aantal rijen waarin de kolom t4 de waarde [FOUT] bevat. Deze instructie retourneert een waarde van 3 omdat er drie rijen zijn die deze waarde bevatten.
INPUT__FILE__NAME LIKE %.log Hive probeert het schema toe te passen op alle bestanden in de map. In dit geval bevat de map bestanden die niet overeenkomen met het schema. Om garbage data in de resultaten te voorkomen, vertelt deze instructie Hive dat we alleen gegevens moeten retourneren uit bestanden die eindigen op .log.

Notitie

Externe tabellen moeten worden gebruikt wanneer u verwacht dat de onderliggende gegevens worden bijgewerkt door een externe bron. Een geautomatiseerd proces voor het uploaden van gegevens of een MapReduce-bewerking.

Als u een externe tabel verwijdert, worden de gegevens niet verwijderd, maar wordt alleen de tabeldefinitie verwijderd.

Als u een interne tabel wilt maken in plaats van extern, gebruikt u de volgende 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]';

Met deze instructies worden de volgende acties uitgevoerd:

Instructie Beschrijving
TABEL MAKEN ALS DEZE NIET BESTAAT Als de tabel niet bestaat, maakt u deze. Omdat het sleutelwoord EXTERNAL niet wordt gebruikt, wordt met deze instructie een interne tabel gemaakt. De tabel wordt opgeslagen in het Hive-datawarehouse en wordt volledig beheerd door Hive.
OPGESLAGEN ALS ORC Slaat de gegevens op in de ORC-indeling (Optimized Row Columnar). ORC is een zeer geoptimaliseerde en efficiënte indeling voor het opslaan van Hive-gegevens.
INSERT OVERWRITE ... SELECTEER Selecteert rijen in de log4jLogs tabel die [FOUT] bevat en voegt vervolgens de gegevens in de tabel errorLogs in.

Notitie

In tegenstelling tot externe tabellen worden ook de onderliggende gegevens verwijderd door een interne tabel te verwijderen.

Hive-queryprestaties verbeteren

Apache Tez

Apache Tez is een framework waarmee gegevensintensieve toepassingen, zoals Hive, veel efficiënter op schaal kunnen worden uitgevoerd. Tez is standaard ingeschakeld. De ontwerpdocumenten van Apache Hive in Tez bevatten details over de implementatieopties en afstemmingsconfiguraties.

Low Latency Analytical Processing (LLAP)

LLAP (ook wel bekend als Live Long and Process) is een nieuwe functie in Hive 2.0 die in-memory caching van query's toestaat.

HDInsight biedt LLAP in het type Interactive Query-cluster. Zie het document Beginnen met Interactive Query voor meer informatie.

Hive-query's plannen

Er zijn verschillende services die kunnen worden gebruikt om Hive-query's uit te voeren als onderdeel van een geplande of on-demand werkstroom.

Azure Data Factory

Met Azure Data Factory kunt u HDInsight gebruiken als onderdeel van een Data Factory-pijplijn. Zie voor meer informatie over het gebruik van Hive vanuit een pijplijn de gegevens transformeren met behulp van Hive-activiteit in het Document van Azure Data Factory .

Hive-taken en SQL Server Integration Services

U kunt SQL Server Integration Services (SSIS) gebruiken om een Hive-taak uit te voeren. Het Azure Feature Pack voor SSIS biedt de volgende onderdelen die werken met Hive-taken in HDInsight.

Zie de documentatie van Azure Feature Pack voor meer informatie.

Apache Oozie

Apache Oozie is een werkstroom- en coördinatiesysteem waarmee Hadoop-taken worden beheerd. Zie het Apache Oozie gebruiken om een werkstroomdocument te definiëren en uit te voeren voor meer informatie over het gebruik van Oozie met Hive.

Notitie

Phoenix Storage Handler voor Hive wordt niet ondersteund in HDInsight

Volgende stappen

Nu u hebt geleerd wat Hive is en hoe u het kunt gebruiken met Hadoop in HDInsight, gebruikt u de volgende koppelingen om andere manieren te verkennen om met Azure HDInsight te werken.