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.

Arkitektur för Hive Warehouse-anslutningsapp

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 angetts hive.server2.tez.interactive.queue i 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

  1. 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.

  2. 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

  1. Gå till en webbläsare där https://LLAPCLUSTERNAME.azurehdinsight.net/#/main/services/HIVE LLAPCLUSTERNAME är namnet på ditt Interaktiv fråga klustret.

  2. 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 .

  3. 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 .

  4. 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 .

  5. 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

  1. Från en webbläsare går du till https://CLUSTERNAME.azurehdinsight.net/#/main/services/SPARK2/configs platsen där CLUSTERNAME är namnet på ditt Apache Spark kluster.

  2. Expandera Custom spark2-defaults ( Anpassade spark2-standardvärden).

    Apache Ambari Spark2-konfiguration

  3. 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 wasbs://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ätt STORAGE_ACCOUNT_NAME med namnet på lagringskontot som används av klustret och med namnet på STORAGE_CONTAINER_NAME lagringscontainern.
    spark.sql.hive.hiveserver2.jdbc.url Det värde 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 false och 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 Värdet som du fick tidigare från hive.llap.daemon.service.hosts.
  4. 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.

  1. Gå till Spark2 > CONFIGS Custom spark2-defaults (Anpassad spark2-standardinställning) från > Ambari-webbgränssnittet för Spark-kluster.

  2. Uppdatera följande egenskap.

    Konfiguration Värde
    spark.sql.hive.hiveserver2.jdbc.url.principal hive/<llap-headnode>@<AAD-Domain>
    • Gå till en webbläsare där https://CLUSTERNAME.azurehdinsight.net/#/main/services/HIVE/summary CLUSTERNAME ä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.

      Hive-lageranslutningshuvudnod

    • Använd ssh-kommandot för att ansluta Interaktiv fråga klustret. Leta efter default_realm parametern i /etc/krb5.conf filen . Ersätt <AAD-DOMAIN> med det här värdet som en sträng i versaler, annars hittas inte autentiseringssuppgifter.

      Hive Warehouse Connector AAD-domän

    • Till exempel hive/hn*.mjry42ikpruuxgs2qy2kpg4q5e.cx.internal.cloudapp.net@PKRSRVUQVMAE6J85.D2.INTERNAL.CLOUDAPP.NET .

  3. 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

  1. 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.net
    
  2. Kör följande kommando från ssh-sessionen för att notera hive-warehouse-connector-assembly versionen:

    ls /usr/hdp/current/hive_warehouse_connector
    
  3. Redigera koden nedan med den hive-warehouse-connector-assembly version 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=false
    
  4. Nä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.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
    

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

  1. 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');
    
  2. Visa tabellens innehåll med följande kommando. Innan du tillämpar principen demo visar tabellen den fullständiga kolumnen.

    hive.executeQuery("SELECT * FROM demo").show()
    

    demotabell innan ranger-principen tillämpas

  3. Tillämpa en kolumnmaskeringsprincip som endast visar de sista fyra tecknen i kolumnen.

    1. Gå till Ranger Admin UI på https://LLAPCLUSTERNAME.azurehdinsight.net/ranger/ .

    2. Klicka på Hive-tjänsten för klustret under Hive. ranger Service Manager

    3. Klicka på fliken Maskering och sedan på Lägg till ny princip

      Hive Warehouse Connector Ranger Hive-principlista

    4. 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. skapa princip

  4. Visa tabellens innehåll igen. När vi har tillämpat ranger-principen kan vi bara se de sista fyra tecknen i kolumnen.

    demotabell efter tillämpning av ranger-princip

Nästa steg