Integratie Apache Spark en Apache Hive met Hive Warehouse Connector in Azure HDInsight

De Apache Hive Warehouse Connector (HWC) is een bibliotheek waarmee u gemakkelijker kunt werken met Apache Spark en Apache Hive. Het ondersteunt taken zoals het verplaatsen van gegevens tussen Spark DataFrames en Hive-tabellen. Ook door Spark-streaminggegevens door te sturen naar Hive-tabellen. Hive Warehouse Connector werkt als een brug tussen Spark en Hive. Het biedt ook ondersteuning voor Scala, Java en Python als programmeertalen voor ontwikkeling.

Met Hive Warehouse Connector kunt u profiteren van de unieke functies van Hive en Spark om krachtige big data-toepassingen te bouwen.

Apache Hive biedt ondersteuning voor databasetransacties die Atomisch, Consistent, Geïsoleerd en Duurzaam (ACID) zijn. Zie Hive-transactiesvoor meer informatie over ACID en transacties in Hive. Hive biedt ook gedetailleerde beveiligingsmaatregelen via Apache Ranger en LLAP (Low Latency Analytical Processing) die niet beschikbaar zijn in Apache Spark.

Apache Spark heeft een structured streaming-API die streamingmogelijkheden biedt die niet beschikbaar zijn in Apache Hive. Vanaf HDInsight 4.0 hebben Apache Spark 2.3.1 en Apache Hive 3.1.0 afzonderlijke metastores. De afzonderlijke metastores kunnen interoperabiliteit moeilijk maken. De Hive Warehouse Connector maakt het gemakkelijker om Spark en Hive samen te gebruiken. De HWC-bibliotheek laadt gegevens parallel van LLAP-daemons naar Spark-uitvoerders. Dit proces maakt het efficiënter en aanpasbaarer dan een standaard JDBC-verbinding van Spark naar Hive.

architectuur van hive warehouse-connector

Enkele van de bewerkingen die worden ondersteund door de Hive Warehouse Connector zijn:

  • Een tabel beschrijven
  • Een tabel maken voor orc-geformatteerde gegevens
  • Hive-gegevens selecteren en een DataFrame ophalen
  • Een DataFrame in batch naar Hive schrijven
  • Een Hive-update-instructie uitvoeren
  • Tabelgegevens lezen uit Hive, deze transformeren in Spark en naar een nieuwe Hive-tabel schrijven
  • Een DataFrame of Spark-stroom naar Hive schrijven met hiveStreaming

Hive Warehouse Connector instellen

Belangrijk

  • Het interactieve hiveServer2-exemplaar dat is geïnstalleerd op Spark 2.4 Enterprise Security Package-clusters wordt niet ondersteund voor gebruik met de Hive Warehouse Connector. In plaats daarvan moet u een afzonderlijk interactief HiveServer2-cluster configureren om uw interactieve Werkbelastingen van HiveServer2 te hosten. Een Hive Warehouse Connector configuratie die gebruikmaakt van één Spark 2.4-cluster wordt niet ondersteund.
  • Hive Warehouse Connector -bibliotheek (HWC) wordt niet ondersteund voor gebruik met Interactive Query Clusters waarbij de functie Werkbelastingbeheer (WLM) is ingeschakeld.
    In een scenario waarin u alleen Spark-workloads hebt en HWC-bibliotheek wilt gebruiken, moet u ervoor zorgen dat Interactive Query-cluster de functie Workloadbeheer niet heeft ingeschakeld (configuratie is niet ingesteld hive.server2.tez.interactive.queue in Hive-configuraties).
    Voor een scenario waarin zowel Spark-workloads (HWC) als native LLAP-workloads bestaan, moet u twee afzonderlijke Interactive Query Clusters maken met een gedeelde metastore-database. Eén cluster voor systeemeigen LLAP-workloads waarbij de WLM-functie op basis van behoefte kan worden ingeschakeld en een ander cluster voor alleen HWC-workloads waarbij de WLM-functie niet moet worden geconfigureerd. Het is belangrijk te weten dat u de WLM-resourceplannen vanuit beide clusters kunt bekijken, zelfs als deze in slechts één cluster is ingeschakeld. Maak geen wijzigingen in resourceplannen in het cluster waarin de WLM-functie is uitgeschakeld, omdat dit van invloed kan zijn op de WLM-functionaliteit in andere clusters.

Hive Warehouse Connector heeft afzonderlijke clusters nodig voor Spark- en Interactive Query workloads. Volg deze stappen om deze clusters in te stellen in Azure HDInsight.

Clusters maken

  1. Maak een HDInsight Spark 4.0-cluster met een opslagaccount en een aangepast virtueel Azure-netwerk. Zie HDInsight toevoegen aan een bestaand virtueel netwerk voor meer informatie over het maken van een cluster in een virtueel Azure-netwerk.

  2. Maak een HDInsight Interactive Query (LLAP) 4.0-cluster met hetzelfde opslagaccount en hetzelfde virtuele Azure-netwerk als het Spark-cluster.

HWC-instellingen configureren

Voorlopige informatie verzamelen

  1. Navigeer in een webbrowser naar https://LLAPCLUSTERNAME.azurehdinsight.net/#/main/services/HIVE de plaats waar LLAPCLUSTERNAME de naam is van uw Interactive Query cluster.

  2. Navigeer naar Summary > HiveServer2 Interactive JDBC URL en noteer de waarde. De waarde kan er ongeveer als uit zien: 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. Navigeer naar Configs > Advanced > Advanced hive-site > hive.zookeeper.quorum en noteer de waarde. De waarde kan er ongeveer als uit zien: <zookeepername1>.rekufuk2y2cezcbowjkbwfnyvd.bx.internal.cloudapp.net:2181,<zookeepername2>.rekufuk2y2cezcbowjkbwfnyvd.bx.internal.cloudapp.net:2181,<zookeepername3>.rekufuk2y2cezcbowjkbwfnyvd.bx.internal.cloudapp.net:2181 .

  4. Navigeer naar Configs > Advanced > General > hive.metastore.uris en noteer de waarde. De waarde kan er ongeveer als uit zien: thrift://iqgiro.rekufuk2y2cezcbowjkbwfnyvd.bx.internal.cloudapp.net:9083,thrift://hn*.rekufuk2y2cezcbowjkbwfnyvd.bx.internal.cloudapp.net:9083 .

  5. Navigeer naar Configs > Advanced > Advanced hive-interactive-site > hive.llap.daemon.service.hosts en noteer de waarde. De waarde kan er ongeveer als uit zien: @llap0 .

Spark-clusterinstellingen configureren

  1. Navigeer in een webbrowser naar https://CLUSTERNAME.azurehdinsight.net/#/main/services/SPARK2/configs de plaats waar CLUSTERNAME de naam is van uw Apache Spark cluster.

  2. Vouw Aangepaste spark2-standaardinstellingen uit.

    Apache Ambari Spark2-configuratie

  3. Selecteer Eigenschap toevoegen... om de volgende configuraties toe te voegen:

    Configuratie Waarde
    spark.datasource.hive.warehouse.load.staging.dir wasbs://STORAGE_CONTAINER_NAME@STORAGE_ACCOUNT_NAME.blob.core.windows.net/tmp.
    Ingesteld op een geschikte map met HDFS-compatibele fasering. Als u twee verschillende clusters hebt, moet de faseringsmap een map zijn in de faseringsmap van het opslagaccount van het LLAP-cluster, zodat HiveServer2 er toegang toe heeft. Vervang STORAGE_ACCOUNT_NAME door de naam van het opslagaccount dat wordt gebruikt door het cluster en door de naam van de STORAGE_CONTAINER_NAME opslagcontainer.
    spark.sql.hive.hiveserver2.jdbc.url De waarde die u eerder hebt verkregen via de interactieve JDBC-URL van HiveServer2
    spark.datasource.hive.warehouse.metastoreUri De waarde die u eerder hebt verkregen van hive.metastore.uris.
    spark.security.credentials.hiveserver2.enabled true voor yarn-clustermodus en false voor YARN-clientmodus.
    spark.hadoop.hive.zookeeper.quorum De waarde die u eerder hebt verkregen van hive.zookeeper.quorum.
    spark.hadoop.hive.llap.daemon.service.hosts De waarde die u eerder hebt verkregen van hive.llap.daemon.service.hosts.
  4. Sla wijzigingen op en start alle betrokken onderdelen opnieuw op.

HWC configureren voor Enterprise Security Package clusters (ESP)

De Enterprise Security Package (ESP) biedt mogelijkheden op bedrijfniveau, zoals verificatie op basis van Active Directory, ondersteuning voor meerdere gebruikers en op rollen gebaseerd toegangsbeheer voor Apache Hadoop-clusters in Azure HDInsight. Zie Use Enterprise Security Package in HDInsight (Een Enterprise Security Package in HDInsight) voor meer informatie over ESP.

Naast de configuraties die in de vorige sectie worden vermeld, voegt u de volgende configuratie toe voor het gebruik van HWC op de ESP-clusters.

  1. Navigeer vanuit de Ambari-webinterface van het Spark-cluster naar Spark2 > CONFIGS > Custom spark2-defaults.

  2. Werk de volgende eigenschap bij.

    Configuratie Waarde
    spark.sql.hive.hiveserver2.jdbc.url.principal hive/<llap-headnode>@<AAD-Domain>
    • Navigeer in een webbrowser naar https://CLUSTERNAME.azurehdinsight.net/#/main/services/HIVE/summary waar CLUSTERNAME de naam is van uw Interactive Query cluster. Klik op HiveServer2 Interactive. U ziet de Fully Qualified Domain Name (FQDN) van het hoofd-knooppunt waarop LLAP wordt uitgevoerd, zoals wordt weergegeven in de schermopname. Vervang <llap-headnode> door deze waarde.

      hoofd-knooppunt van hive-warehouseconnector

    • Gebruik de ssh-opdracht om verbinding te maken met Interactive Query cluster. Zoek de default_realm parameter in het bestand /etc/krb5.conf . Vervang <AAD-DOMAIN> door deze waarde als een tekenreeks in hoofdletters, anders wordt de referentie niet gevonden.

      Hive Warehouse-connector AAD-domein

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

  3. Sla de wijzigingen op en start zo nodig onderdelen opnieuw op.

Hive Warehouse Connector gebruiken

U kunt kiezen uit een aantal verschillende methoden om verbinding te maken met uw Interactive Query cluster en query's uit te voeren met behulp van de Hive Warehouse Connector. Ondersteunde methoden zijn onder andere de volgende hulpprogramma's:

Hieronder vindt u enkele voorbeelden van verbinding maken met HWC vanuit Spark.

Spark-shell

  1. Gebruik de ssh-opdracht om verbinding te maken met Apache Spark cluster. Bewerk de onderstaande opdracht door CLUSTERNAME te vervangen door de naam van uw cluster. Voer vervolgens deze opdracht in:

    ssh sshuser@CLUSTERNAME-ssh.azurehdinsight.net
    
  2. Voer vanuit uw SSH-sessie de volgende opdracht uit om de versie te hive-warehouse-connector-assembly noteren:

    ls /usr/hdp/current/hive_warehouse_connector
    
  3. Bewerk de onderstaande code met hive-warehouse-connector-assembly de hierboven genoemde versie. Voer vervolgens de opdracht uit om de Spark-shell te starten:

    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. Na het starten van de Spark-shell kan Hive Warehouse Connector-exemplaar worden gestart met behulp van de volgende opdrachten:

    import com.hortonworks.hwc.HiveWarehouseSession
    val hive = HiveWarehouseSession.session(spark).build()
    

Spark-submit

Zodra u de scala/java-code samen met de afhankelijkheden hebt gebouwd in een assembly-JAR, gebruikt u de onderstaande opdracht om een Spark-toepassing te starten. Vervang <VERSION> en door de werkelijke <APP_JAR_PATH> waarden.

  • YARN-clientmodus

    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-clustermodus

    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
    

Voor Python voegt u ook de volgende configuratie toe.

--py-files /usr/hdp/current/hive_warehouse_connector/pyspark_hwc-<VERSION>.zip

Query's uitvoeren op Enterprise Security Package clusters (ESP)

Gebruik kinit voordat u de spark-shell of spark-submit start. Vervang USERNAME door de naam van een domeinaccount door machtigingen voor toegang tot het cluster en voer de volgende opdracht uit:

kinit USERNAME

Gegevens beveiligen in Spark ESP-clusters

  1. Maak een tabel demo met enkele voorbeeldgegevens door de volgende opdrachten in te voeren:

    create table demo (name string);
    INSERT INTO demo VALUES ('HDinsight');
    INSERT INTO demo VALUES ('Microsoft');
    INSERT INTO demo VALUES ('InteractiveQuery');
    
  2. Bekijk de inhoud van de tabel met de volgende opdracht. Voordat u het beleid gaat toepassen, toont demo de tabel de volledige kolom.

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

    demotabel voordat ranger-beleid wordt toegepast

  3. Pas een maskeringsbeleid voor kolommen toe dat alleen de laatste vier tekens van de kolom toont.

    1. Ga naar de beheer-UI van Ranger op https://LLAPCLUSTERNAME.azurehdinsight.net/ranger/ .

    2. Klik op de Hive-service voor uw cluster onder Hive. Ranger Service Manager

    3. Klik op het tabblad Maskering en vervolgens op Nieuw beleid toevoegen

      hive warehouse connector ranger hive policy list

    4. Geef een gewenste beleidsnaam op. Database selecteren: Standaard, Hive-tabel: demo, Hive-kolom: naam , Gebruiker: rsadmin2, Toegangstypen: selecteren en Gedeeltelijk masker: laatste 4 weergeven in het menu Maskeringsoptie selecteren. Klik op Add. beleid maken

  4. Bekijk de inhoud van de tabel opnieuw. Nadat het Ranger-beleid is toegepast, zien we alleen de laatste vier tekens van de kolom.

    demotabel na het toepassen van ranger-beleid

Volgende stappen