Integrera Apache Spark och Apache Hive med Hive Warehouse Connector i Azure HDInsight
Apache Hive Warehouse Connector (HWC) är ett bibliotek som gör att du enklare kan arbeta med Apache Spark och Apache Hive. Den stöder uppgifter som att flytta data mellan Spark DataFrames- och Hive-tabeller. Dessutom genom att dirigera Spark-strömmande data till Hive-tabeller. Hive Warehouse Connector fungerar som en brygga mellan Spark och Hive. Det stöder även Scala, Java och Python som programmeringsspråk för utveckling.
Med Hive Warehouse Connector kan du dra nytta av de unika funktionerna i Hive och Spark för att skapa kraftfulla stordataprogram.
Apache Hive har stöd för databastransaktioner som är atomiska, konsekventa, isolerade och varaktiga (ACID). Mer information om ACID och transaktioner i Hive finns i Hive-transaktioner. Hive erbjuder även detaljerade säkerhetskontroller via Apache Ranger och LLAP (Low Latency Analytical Processing) som inte är tillgängliga i Apache Spark.
Apache Spark har ett API för strukturerad direktuppspelning som ger strömningsfunktioner som inte är tillgängliga i Apache Hive. Från och med HDInsight 4.0 har Apache Spark 2.3.1 och Apache Hive 3.1.0 separata metaarkivkataloger, vilket gör samverkan svår.
Hive Warehouse Connector (HWC) gör det enklare att använda Spark och Hive tillsammans. HWC-biblioteket läser in data från LLAP-daemoner till Spark-köre parallellt. Den här processen gör den mer effektiv och anpassningsbar än en JDBC-standardanslutning från Spark till Hive. Här visas två olika körningslägen för HWC:
- Hive JDBC-läge via HiveServer2
- Hive LLAP-läge med LLAP-daemoner [Rekommenderas]
Som standard är HWC konfigurerat att använda Hive LLAP-daemoner. Information om hur du kör Hive-frågor (både läsa och skriva) med hjälp av ovanstående lägen med sina respektive API:er finns i HWC-API:er.
Några av de åtgärder som stöds av Hive Warehouse Connector är:
- Beskriva en tabell
- Skapa en tabell för ORC-formaterade data
- Välja Hive-data och hämta en DataFrame
- Skriva en dataram till Hive i batch
- Köra en Hive-uppdateringsinstruktor
- Läsa tabelldata från Hive, transformera dem i Spark och skriva dem till en ny Hive-tabell
- Skriva en DataFrame- eller Spark-dataström till Hive med HiveStreaming
Konfiguration av Hive Warehouse Connector
Viktigt!
- HiveServer2 Interactive-instansen som är installerad på Spark 2.4 Enterprise Security Package-kluster stöds inte för användning med Hive Warehouse Connector. I stället måste du konfigurera ett separat Interaktivt HiveServer2-kluster som värd för dina interaktiva HiveServer2-arbetsbelastningar. En Hive Warehouse Connector-konfiguration som använder ett enda Spark 2.4-kluster stöds inte.
- Hive Warehouse Connector-biblioteket (HWC) stöds inte för användning med Interaktiv fråga kluster där WLM-funktionen (Workload Management) är aktiverad.
I ett scenario där du bara har Spark-arbetsbelastningar och vill använda HWC-biblioteket kontrollerar du Interaktiv fråga klustret inte har funktionen Arbetsbelastningshantering aktiverad (hive.server2.tez.interactive.queue
konfigurationen har inte angetts i Hive-konfigurationer).
För ett scenario där både Spark-arbetsbelastningar (HWC) och LLAP-interna arbetsbelastningar finns måste du skapa två separata Interaktiv fråga kluster med delad metaarkivdatabas. Ett kluster för interna LLAP-arbetsbelastningar där WLM-funktionen kan aktiveras på behovsbasis och ett annat kluster för HWC endast arbetsbelastning där WLM-funktionen inte ska konfigureras. Observera att du kan visa WLM-resursplaner från båda klustren även om de bara är aktiverade i ett kluster. Gör inga ändringar i resursplaner i klustret där WLM-funktionen är inaktiverad eftersom det kan påverka WLM-funktionerna i andra kluster. - Spark stöder R-databehandlingsspråk för att förenkla dataanalysen, men Hive Warehouse Connector-biblioteket (HWC) stöds inte för att användas med R. Om du vill köra HWC-arbetsbelastningar kan du köra frågor från Spark till Hive med hjälp av HiveWarehouseSession-API:et i JDBC-format som endast stöder Scala, Java och Python.
- Att köra frågor (både läsa och skriva) via HiveServer2 via JDBC-läge stöds inte för komplexa datatyper som Matriser/Struct/Karttyper.
- HWC stöder endast skrivning i ORC-filformat. Icke-ORC-skrivningar (t.ex. parquet- och textfilformat) stöds inte via HWC.
Hive Warehouse Connector behöver separata kluster för Spark- och Interaktiv fråga arbetsbelastningar. Följ de här stegen för att konfigurera dessa kluster i Azure HDInsight.
Klustertyper och versioner som stöds
HWC-version | Spark-version | InteractiveQuery-version |
---|---|---|
v1 | Spark 2.4 | HDI 4.0 | Interaktiv fråga 3.1 | HDI 4.0 |
v2 | Spark 3.1 | HDI 5.0 | Interaktiv fråga 3.1 | HDI 5.0 |
Skapa kluster
Skapa ett HDInsight Spark 4.0-kluster med ett lagringskonto och ett anpassat virtuellt Azure-nätverk. Information om hur du skapar ett kluster i ett virtuellt Azure-nätverk finns i Lägga till HDInsight i ett befintligt virtuellt nätverk.
Skapa ett HDInsight Interaktiv fråga-kluster (LLAP) 4.0 med samma lagringskonto och virtuella Azure-nätverk som Spark-klustret.
Konfigurera HWC-inställningar
Samla in preliminär information
Från en webbläsare navigerar du till
https://LLAPCLUSTERNAME.azurehdinsight.net/#/main/services/HIVE
platsen där LLAPCLUSTERNAME är namnet på ditt Interaktiv fråga kluster.Gå till Sammanfattning>HiveServer2 Interaktiv JDBC-URL och notera värdet. Värdet kan likna:
jdbc:hive2://<zookeepername1>.rekufuk2y2ce.bx.internal.cloudapp.net:2181,<zookeepername2>.rekufuk2y2ce.bx.internal.cloudapp.net:2181,<zookeepername3>.rekufuk2y2ce.bx.internal.cloudapp.net:2181/;serviceDiscoveryMode=zooKeeper;zooKeeperNamespace=hiveserver2-interactive
.Navigera till Configs>Advanced>Advanced hive-site>hive.zookeeper.quorum och notera värdet. Värdet kan likna:
<zookeepername1>.rekufuk2y2cezcbowjkbwfnyvd.bx.internal.cloudapp.net:2181,<zookeepername2>.rekufuk2y2cezcbowjkbwfnyvd.bx.internal.cloudapp.net:2181,<zookeepername3>.rekufuk2y2cezcbowjkbwfnyvd.bx.internal.cloudapp.net:2181
.Gå till Configs>Advanced>General>hive.metastore.uris och notera värdet. Värdet kan likna:
thrift://iqgiro.rekufuk2y2cezcbowjkbwfnyvd.bx.internal.cloudapp.net:9083,thrift://hn*.rekufuk2y2cezcbowjkbwfnyvd.bx.internal.cloudapp.net:9083
.Gå till Konfigurationer>Advanced>Advanced hive-interactive-site>hive.llap.daemon.service.hosts och notera värdet. Värdet kan likna:
@llap0
.
Konfigurera Inställningar för Spark-kluster
Från en webbläsare navigerar du till
https://CLUSTERNAME.azurehdinsight.net/#/main/services/SPARK2/configs
platsen där CLUSTERNAME är namnet på ditt Apache Spark-kluster.Expandera Anpassade spark2-standardvärden.
Välj Lägg till egenskap... för att lägga till följande konfigurationer:
Konfiguration Värde spark.datasource.hive.warehouse.load.staging.dir
Om du använder ADLS Gen2-lagringskonto använder du abfss://STORAGE_CONTAINER_NAME@STORAGE_ACCOUNT_NAME.dfs.core.windows.net/tmp
Om du använder Azure Blob Storage-kontot använder duwasbs://STORAGE_CONTAINER_NAME@STORAGE_ACCOUNT_NAME.blob.core.windows.net/tmp
.
Ange till en lämplig HDFS-kompatibel mellanlagringskatalog. Om du har två olika kluster bör mellanlagringskatalogen vara en mapp i mellanlagringskatalogen för LLAP-klustrets lagringskonto så att HiveServer2 har åtkomst till det. ErsättSTORAGE_ACCOUNT_NAME
med namnet på lagringskontot som används av klustret ochSTORAGE_CONTAINER_NAME
med namnet på lagringscontainern.spark.sql.hive.hiveserver2.jdbc.url
Värdet som du fick tidigare från HiveServer2 Interactive JDBC URL spark.datasource.hive.warehouse.metastoreUri
Det värde som du fick tidigare från hive.metastore.uris. spark.security.credentials.hiveserver2.enabled
true
för YARN-klusterläge ochfalse
för YARN-klientläge.spark.hadoop.hive.zookeeper.quorum
Det värde som du fick tidigare från hive.zookeeper.quorum. spark.hadoop.hive.llap.daemon.service.hosts
Det värde som du fick tidigare från hive.llap.daemon.service.hosts. Spara ändringar och starta om alla berörda komponenter.
Konfigurera HWC för ESP-kluster (Enterprise Security Package)
Enterprise Security Package (ESP) tillhandahåller funktioner i företagsklass som Active Directory-baserad autentisering, stöd för flera användare och rollbaserad åtkomstkontroll för Apache Hadoop-kluster i Azure HDInsight. Mer information om ESP finns i Använda Enterprise Security Package i HDInsight.
Förutom de konfigurationer som nämns i föregående avsnitt lägger du till följande konfiguration för att använda HWC i ESP-klustren.
Från Ambari-webbgränssnittet för Spark-klustret går du till Spark2>CONFIGS>Anpassade spark2-standardvärden.
Uppdatera följande egenskap.
Konfiguration Värde spark.sql.hive.hiveserver2.jdbc.url.principal
hive/<llap-headnode>@<AAD-Domain>
Från en webbläsare navigerar du till
https://CLUSTERNAME.azurehdinsight.net/#/main/services/HIVE/summary
platsen där CLUSTERNAME är namnet på ditt Interaktiv fråga kluster. Klicka på HiveServer2 Interactive. Du ser det fullständigt kvalificerade domännamnet (FQDN) för huvudnoden som LLAP körs på enligt skärmbilden. Ersätt<llap-headnode>
med det här värdet.Använd ssh-kommandot för att ansluta till ditt Interaktiv fråga kluster. Leta
default_realm
efter parametern/etc/krb5.conf
i filen. Ersätt<AAD-DOMAIN>
med det här värdet som en versalsträng, annars hittas inte autentiseringsuppgifterna.Till exempel
hive/hn*.mjry42ikpruuxgs2qy2kpg4q5e.cx.internal.cloudapp.net@PKRSRVUQVMAE6J85.D2.INTERNAL.CLOUDAPP.NET
.
Spara ändringar och starta om komponenter efter behov.
Användning av Hive Warehouse Connector
Du kan välja mellan några olika metoder för att ansluta till ditt Interaktiv fråga kluster och köra frågor med Hive Warehouse Connector. Metoderna som stöds innehåller följande verktyg:
Nedan visas några exempel på hur du ansluter till HWC från Spark.
Spark-shell
Det här är ett sätt att köra Spark interaktivt via en modifierad version av Scala-gränssnittet.
Använd ssh-kommandot för att ansluta till ditt Apache Spark-kluster. Redigera kommandot nedan genom att ersätta CLUSTERNAME med namnet på klustret och ange sedan kommandot:
ssh sshuser@CLUSTERNAME-ssh.azurehdinsight.net
Från ssh-sessionen kör du följande kommando för att notera
hive-warehouse-connector-assembly
versionen:ls /usr/hdp/current/hive_warehouse_connector
Redigera koden nedan med den
hive-warehouse-connector-assembly
version som identifieras ovan. Kör sedan kommandot för att starta spark-gränssnittet:spark-shell --master yarn \ --jars /usr/hdp/current/hive_warehouse_connector/hive-warehouse-connector-assembly-<VERSION>.jar \ --conf spark.security.credentials.hiveserver2.enabled=false
När du har startat Spark-gränssnittet kan en Hive Warehouse Connector-instans startas med hjälp av följande kommandon:
import com.hortonworks.hwc.HiveWarehouseSession val hive = HiveWarehouseSession.session(spark).build()
Spark-skicka
Spark-submit är ett verktyg för att skicka alla Spark-program (eller jobb) till Spark-kluster.
Spark-submit-jobbet konfigurerar Spark och Hive Warehouse Connector enligt våra instruktioner, kör det program som vi skickar till det och släpper sedan resurserna som användes.
När du har skapat scala/java-koden tillsammans med beroendena i en sammansättningsburk använder du kommandot nedan för att starta ett Spark-program. Ersätt <VERSION>
och <APP_JAR_PATH>
med de faktiska värdena.
YARN-klientläge
spark-submit \ --class myHwcApp \ --master yarn \ --deploy-mode client \ --jars /usr/hdp/current/hive_warehouse_connector/hive-warehouse-connector-assembly-<VERSION>.jar \ --conf spark.security.credentials.hiveserver2.enabled=false /<APP_JAR_PATH>/myHwcAppProject.jar
YARN-klusterläge
spark-submit \ --class myHwcApp \ --master yarn \ --deploy-mode cluster \ --jars /usr/hdp/current/hive_warehouse_connector/hive-warehouse-connector-assembly-<VERSION>.jar \ --conf spark.security.credentials.hiveserver2.enabled=true /<APP_JAR_PATH>/myHwcAppProject.jar
Det här verktyget används också när vi har skrivit hela programmet i pySpark och paketerat i .py
filer (Python), så att vi kan skicka hela koden till Spark-klustret för körning.
För Python-program skickar du en .py fil i stället för /<APP_JAR_PATH>/myHwcAppProject.jar
och lägger till nedanstående konfigurationsfil (Python .zip) i sökvägen med --py-files
.
--py-files /usr/hdp/current/hive_warehouse_connector/pyspark_hwc-<VERSION>.zip
Köra frågor i ESP-kluster (Enterprise Security Package)
Använd kinit
innan du startar spark-shell eller spark-submit. Ersätt USERNAME med namnet på ett domänkonto med behörighet att komma åt klustret och kör sedan följande kommando:
kinit USERNAME
Skydda data i Spark ESP-kluster
Skapa en tabell
demo
med exempeldata genom att ange följande kommandon:create table demo (name string); INSERT INTO demo VALUES ('HDinsight'); INSERT INTO demo VALUES ('Microsoft'); INSERT INTO demo VALUES ('InteractiveQuery');
Visa tabellens innehåll med följande kommando. Innan du tillämpar principen visar tabellen
demo
den fullständiga kolumnen.hive.executeQuery("SELECT * FROM demo").show()
Använd en kolumnmaskeringsprincip som bara visar de fyra sista tecknen i kolumnen.
Gå till rangeradministratörsgränssnittet på
https://LLAPCLUSTERNAME.azurehdinsight.net/ranger/
.Klicka på Hive-tjänsten för klustret under Hive.
Klicka på fliken Maskering och sedan på Lägg till ny princip
Ange ett önskat principnamn. Välj databas: Standard, Hive-tabell: demo, Hive-kolumn: namn, Användare: rsadmin2, Åtkomsttyper: välj och Partiell mask: visa de sista 4 på menyn Välj maskeringsalternativ . Klicka på Lägg till.
Visa tabellens innehåll igen. När du har tillämpat ranger-principen kan vi bara se de sista fyra tecknen i kolumnen.