Integrera Apache Spark och Apache Hive med Hive Warehouse Connector i Azure HDInsight
HWC (Apache Hive Warehouse Connector) är ett bibliotek som gör det enklare att arbeta med Apache Spark och Apache Hive. Den stöder uppgifter som att flytta data mellan Spark DataFrames och Hive-tabeller. 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 ACID (Atomic, Consistent, Isolated och Durable). 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 STRUCTURED Streaming-API som ger strömningsfunktioner som inte är tillgängliga i Apache Hive. Från och med HDInsight 4.0 Apache Spark 2.3.1 och Apache Hive 3.1.0 separata metaarkiv. De separata metaarkiven kan göra samverkan svår. Den Hive Warehouse Connector gör det enklare att använda Spark och Hive tillsammans. HWC-biblioteket läser in data från LLAP-daemons till Spark-utförare parallellt. Den här processen gör den mer effektiv och anpassningsbar än en JDBC-standardanslutning från Spark till Hive.
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 DataFrame till Hive i batch
- Köra en Hive-uppdateringssats
- 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
Hive Warehouse Connector installation
Viktigt
- Den interaktiva HiveServer2-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 (HWC)-biblioteket stöds inte för användning med Interaktiv fråga kluster där arbetsbelastningshanteringsfunktionen (WLM) är aktiverad.
I ett scenario där du bara har Spark-arbetsbelastningar och vill använda HWC-biblioteket ska du se till att Interaktiv fråga-klustret inte har arbetsbelastningshantering aktiverat (konfigurationen har inte angettshive.server2.tez.interactive.queuei Hive-konfigurationer).
För ett scenario där både Spark-arbetsbelastningar (HWC) och interna LLAP-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 andra kluster för endast HWC-arbetsbelastning där WLM-funktionen inte ska konfigureras. Observera att du kan visa WLM-resursplaner från båda klustren även om den bara är aktiverad i ett kluster. Gör inga ändringar i resursplaner i klustret där WLM-funktionen är inaktiverad eftersom den kan påverka WLM-funktionen i andra kluster.
Hive Warehouse Connector behöver separata kluster för Spark och Interaktiv fråga arbetsbelastningar. Följ dessa steg för att konfigurera dessa kluster i Azure HDInsight.
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 LLAP 4.0-kluster (HDInsight Interaktiv fråga) med samma lagringskonto och virtuella Azure-nätverk som Spark-klustret.
Konfigurera HWC-inställningar
Samla in preliminär information
Gå till en webbläsare där
https://LLAPCLUSTERNAME.azurehdinsight.net/#/main/services/HIVELLAPCLUSTERNAME är namnet på ditt Interaktiv fråga klustret.Gå till Sammanfattning > Av HiveServer2 Interaktiv JDBC-URL och anteckna värdet. Värdet kan se ut ungefär så här:
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.Gå till Konfigurationer > Avancerat > Avancerat hive-site > hive.zookeeper.quorum och notera värdet. Värdet kan se ut ungefär så här:
<zookeepername1>.rekufuk2y2cezcbowjkbwfnyvd.bx.internal.cloudapp.net:2181,<zookeepername2>.rekufuk2y2cezcbowjkbwfnyvd.bx.internal.cloudapp.net:2181,<zookeepername3>.rekufuk2y2cezcbowjkbwfnyvd.bx.internal.cloudapp.net:2181.Gå till Konfigurationer > Avancerad > allmän > hive.metastore.uris och notera värdet. Värdet kan se ut ungefär så här:
thrift://iqgiro.rekufuk2y2cezcbowjkbwfnyvd.bx.internal.cloudapp.net:9083,thrift://hn*.rekufuk2y2cezcbowjkbwfnyvd.bx.internal.cloudapp.net:9083.Gå till Configs > Advanced > Advanced hive-interactive-site > hive.llap.daemon.service.hosts och notera värdet. Värdet kan se ut ungefär så här:
@llap0.
Konfigurera Inställningar för Spark-kluster
Från en webbläsare går du till
https://CLUSTERNAME.azurehdinsight.net/#/main/services/SPARK2/configsplatsen där CLUSTERNAME är namnet på ditt Apache Spark kluster.Expandera Custom spark2-defaults ( 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.dirwasbs://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 den. ErsättSTORAGE_ACCOUNT_NAMEmed namnet på lagringskontot som används av klustret och med namnet påSTORAGE_CONTAINER_NAMElagringscontainern.spark.sql.hive.hiveserver2.jdbc.urlDet värde som du fick tidigare från HiveServer2 Interactive JDBC URL spark.datasource.hive.warehouse.metastoreUriDet värde som du fick tidigare från hive.metastore.uris. spark.security.credentials.hiveserver2.enabledtrueför YARN-klusterlägefalseoch för YARN-klientläge.spark.hadoop.hive.zookeeper.quorumDet värde som du fick tidigare från hive.zookeeper.quorum. spark.hadoop.hive.llap.daemon.service.hostsVärdet som du fick tidigare från hive.llap.daemon.service.hosts. Spara ändringarna och starta om alla berörda komponenter.
Konfigurera HWC för Enterprise Security Package (ESP) kluster
I Enterprise Security Package (ESP) finns 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 på ESP-klustren.
Gå till Spark2 > CONFIGS Custom spark2-defaults (Anpassad spark2-standardinställning) från > Ambari-webbgränssnittet för Spark-kluster.
Uppdatera följande egenskap.
Konfiguration Värde spark.sql.hive.hiveserver2.jdbc.url.principalhive/<llap-headnode>@<AAD-Domain>Gå till en webbläsare där
https://CLUSTERNAME.azurehdinsight.net/#/main/services/HIVE/summaryCLUSTERNAME är namnet på ditt Interaktiv fråga kluster. Klicka på HiveServer2 Interactive. Du ser det fullständiga domännamnet (FQDN) för huvudnoden där LLAP körs som på skärmbilden. Ersätt<llap-headnode>med det här värdet.
Använd ssh-kommandot för att ansluta Interaktiv fråga klustret. Leta efter
default_realmparametern i/etc/krb5.conffilen . Ersätt<AAD-DOMAIN>med det här värdet som en sträng i versaler, annars hittas inte autentiseringssuppgifter.
Till exempel
hive/hn*.mjry42ikpruuxgs2qy2kpg4q5e.cx.internal.cloudapp.net@PKRSRVUQVMAE6J85.D2.INTERNAL.CLOUDAPP.NET.
Spara ändringar och starta om komponenter efter behov.
Hive Warehouse Connector användning
Du kan välja mellan några olika metoder för att ansluta till Interaktiv fråga kluster och köra frågor med hjälp av Hive Warehouse Connector. Metoder som stöds omfattar följande verktyg:
Nedan visas några exempel på hur du ansluter till HWC från Spark.
Spark-shell
Använd ssh-kommandot för att ansluta Apache Spark klustret. Redigera kommandot nedan genom att ersätta CLUSTERNAME med namnet på klustret och ange sedan kommandot:
ssh sshuser@CLUSTERNAME-ssh.azurehdinsight.netKör följande kommando från ssh-sessionen för att notera
hive-warehouse-connector-assemblyversionen:ls /usr/hdp/current/hive_warehouse_connectorRedigera koden nedan med den
hive-warehouse-connector-assemblyversion som anges 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=falseNär spark-gränssnittet har startats kan Hive Warehouse Connector en instans startas med hjälp av följande kommandon:
import com.hortonworks.hwc.HiveWarehouseSession val hive = HiveWarehouseSession.session(spark).build()
Spark-submit
När du har byggt scala/java-koden tillsammans med beroendena i en sammansättnings-JAR använder du kommandot nedan för att starta ett Spark-program. Ersätt <VERSION> , och med de faktiska <APP_JAR_PATH> 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.jarYARN-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
För Python lägger du även till följande konfiguration.
--py-files /usr/hdp/current/hive_warehouse_connector/pyspark_hwc-<VERSION>.zip
Köra frågor på Enterprise Security Package (ESP)
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
demomed 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
demovisar tabellen den fullständiga kolumnen.hive.executeQuery("SELECT * FROM demo").show()
Tillämpa en kolumnmaskeringsprincip som endast visar de sista fyra tecknen i kolumnen.
Gå till Ranger Admin UI 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 sista 4 på menyn Välj maskeringsalternativ. Klicka på Lägg till.
Visa tabellens innehåll igen. När vi har tillämpat ranger-principen kan vi bara se de sista fyra tecknen i kolumnen.