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.
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:
Een door de gebruiker gedefinieerde Java-functie gebruiken met Apache Hive
Een door de gebruiker gedefinieerde Python-functie gebruiken met Apache Hive
Een door de gebruiker gedefinieerde C#-functie gebruiken met Apache Hive
Een aangepaste door de gebruiker gedefinieerde Apache Hive-functie toevoegen aan HDInsight
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.