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.
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 ingesteldhive.server2.tez.interactive.queuein 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
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.
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
Navigeer in een webbrowser naar
https://LLAPCLUSTERNAME.azurehdinsight.net/#/main/services/HIVEde plaats waar LLAPCLUSTERNAME de naam is van uw Interactive Query cluster.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.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.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.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
Navigeer in een webbrowser naar
https://CLUSTERNAME.azurehdinsight.net/#/main/services/SPARK2/configsde plaats waar CLUSTERNAME de naam is van uw Apache Spark cluster.Vouw Aangepaste spark2-standaardinstellingen uit.
Selecteer Eigenschap toevoegen... om de volgende configuraties toe te voegen:
Configuratie Waarde spark.datasource.hive.warehouse.load.staging.dirwasbs://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. VervangSTORAGE_ACCOUNT_NAMEdoor de naam van het opslagaccount dat wordt gebruikt door het cluster en door de naam van deSTORAGE_CONTAINER_NAMEopslagcontainer.spark.sql.hive.hiveserver2.jdbc.urlDe waarde die u eerder hebt verkregen via de interactieve JDBC-URL van HiveServer2 spark.datasource.hive.warehouse.metastoreUriDe waarde die u eerder hebt verkregen van hive.metastore.uris. spark.security.credentials.hiveserver2.enabledtruevoor yarn-clustermodus enfalsevoor YARN-clientmodus.spark.hadoop.hive.zookeeper.quorumDe waarde die u eerder hebt verkregen van hive.zookeeper.quorum. spark.hadoop.hive.llap.daemon.service.hostsDe waarde die u eerder hebt verkregen van hive.llap.daemon.service.hosts. 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.
Navigeer vanuit de Ambari-webinterface van het Spark-cluster naar Spark2 > CONFIGS > Custom spark2-defaults.
Werk de volgende eigenschap bij.
Configuratie Waarde spark.sql.hive.hiveserver2.jdbc.url.principalhive/<llap-headnode>@<AAD-Domain>Navigeer in een webbrowser naar
https://CLUSTERNAME.azurehdinsight.net/#/main/services/HIVE/summarywaar 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.
Gebruik de ssh-opdracht om verbinding te maken met Interactive Query cluster. Zoek de
default_realmparameter in het bestand/etc/krb5.conf. Vervang<AAD-DOMAIN>door deze waarde als een tekenreeks in hoofdletters, anders wordt de referentie niet gevonden.
Bijvoorbeeld
hive/hn*.mjry42ikpruuxgs2qy2kpg4q5e.cx.internal.cloudapp.net@PKRSRVUQVMAE6J85.D2.INTERNAL.CLOUDAPP.NET.
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
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.netVoer vanuit uw SSH-sessie de volgende opdracht uit om de versie te
hive-warehouse-connector-assemblynoteren:ls /usr/hdp/current/hive_warehouse_connectorBewerk de onderstaande code met
hive-warehouse-connector-assemblyde 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=falseNa 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.jarYARN-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
Maak een tabel
demomet 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');Bekijk de inhoud van de tabel met de volgende opdracht. Voordat u het beleid gaat toepassen, toont
demode tabel de volledige kolom.hive.executeQuery("SELECT * FROM demo").show()
Pas een maskeringsbeleid voor kolommen toe dat alleen de laatste vier tekens van de kolom toont.
Ga naar de beheer-UI van Ranger op
https://LLAPCLUSTERNAME.azurehdinsight.net/ranger/.Klik op de Hive-service voor uw cluster onder Hive.
Klik op het tabblad Maskering en vervolgens op Nieuw beleid toevoegen
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.
Bekijk de inhoud van de tabel opnieuw. Nadat het Ranger-beleid is toegepast, zien we alleen de laatste vier tekens van de kolom.