Sdílet prostřednictvím


Integrace Apache Sparku a Apache Hivu s knihovnou Hive Warehouse Connector ve službě Azure HDInsight

Konektor Apache Hive Warehouse (HWC) je knihovna, která umožňuje snadněji pracovat s Apache Sparkem a Apache Hivem. Podporuje úlohy, jako je přesun dat mezi tabulkami Spark DataFrame a Hive. Také směrováním streamovaných dat Sparku do tabulek Hive. Konektor Hive Warehouse funguje jako most mezi Sparkem a Hivem. Podporuje také jazyk Scala, Java a Python jako programovací jazyky pro vývoj.

Konektor Hive Warehouse umožňuje využívat jedinečné funkce Hive a Sparku k vytváření výkonných aplikací pro velké objemy dat.

Apache Hive nabízí podporu databázových transakcí, které jsou Atomic, Consistent, Isolated a Durable (ACID). Další informace o ACID a transakcích v Hive naleznete v tématu Transakce Hive. Hive také nabízí podrobné kontrolní mechanismy zabezpečení prostřednictvím Apache Rangeru a LLAP (Low Latency Analytical Processing), které nejsou dostupné v Apache Sparku.

Apache Spark má rozhraní API strukturovaného streamování, které poskytuje možnosti streamování, které nejsou dostupné v Apache Hivu. Od VERZE HDInsight 4.0 mají Apache Spark 2.3.1 a Apache Hive 3.1.0 samostatné katalogy metastoru, které ztěžují interoperabilitu.

Konektor Hive Warehouse (HWC) usnadňuje společné použití Sparku a Hivu. Knihovna HWC načítá data z démonů LLAP do exekutorů Sparku paralelně. Díky tomuto procesu je efektivnější a přizpůsobitelná než standardní připojení JDBC ze Sparku k Hivu. Tím se pro HWC zobrazí dva různé režimy provádění:

  • Režim Hive JDBC přes HiveServer2
  • Režim Hive LLAP s využitím démonů LLAP [Doporučeno]

Ve výchozím nastavení je HWC nakonfigurovaný tak, aby používal démony Hive LLAP. Pokud chcete spouštět dotazy Hive (čtení i zápis) pomocí výše uvedených režimů s příslušnými rozhraními API, přečtěte si o rozhraních API HWC.

Architektura konektoru hive warehouse

Mezi operace podporované konektorem Hive Warehouse Connector patří:

  • Popis tabulky
  • Vytvoření tabulky pro data ve formátu ORC
  • Výběr dat Hive a načtení datového rámce
  • Zápis datového rámce do Hivu v dávce
  • Spuštění příkazu aktualizace Hive
  • Čtení dat tabulky z Hivu, jejich transformace ve Sparku a zápis do nové tabulky Hive
  • Zápis datového rámce nebo streamu Sparku do Hivu pomocí HiveStreamingu

Nastavení konektoru Hive Warehouse

Důležité

  • Instance HiveServer2 Interactive nainstalovaná v clusterech balíčků zabezpečení Sparku 2.4 Enterprise se nepodporuje pro použití s konektorem Hive Warehouse Connector. Místo toho musíte nakonfigurovat samostatný cluster HiveServer2 Interactive pro hostování úloh HiveServer2 Interactive. Konfigurace konektoru Hive Warehouse, která využívá jeden cluster Spark 2.4, se nepodporuje.
  • Knihovna konektoru Hive Warehouse (HWC) není podporovaná pro použití s clustery interaktivních dotazů, kde je povolená funkce správy úloh (WLM).
    Ve scénáři, kdy máte jenom úlohy Sparku a chcete používat knihovnu HWC, ujistěte se, že cluster Interactive Query nemá povolenou funkci Správy úloh (hive.server2.tez.interactive.queue konfigurace není nastavená v konfiguracích Hive).
    Pro scénář, ve kterém existují úlohy Sparku (HWC) i nativní úlohy LLAP, je potřeba vytvořit dva samostatné clustery Interactive Query se sdílenou databází metastoru. Jeden cluster pro nativní úlohy LLAP, kde je možné povolit funkci WLM na základě potřeby, a druhý cluster pro úlohy HWC, kde by neměla být nakonfigurovaná funkce WLM. Je důležité si uvědomit, že plány prostředků WLM můžete zobrazit z obou clusterů, i když je povolená pouze v jednom clusteru. V clusteru, ve kterém je funkce WLM zakázaná, neprovádejte žádné změny plánů prostředků, protože to může mít vliv na funkčnost WLM v jiném clusteru.
  • I když Spark podporuje výpočetní jazyk R pro zjednodušení analýzy dat, knihovna konektoru Hive Warehouse (HWC) se nepodporuje pro použití s jazykem R. Ke spouštění úloh HWC můžete spouštět dotazy ze Sparku do Hivu pomocí rozhraní API HiveWarehouseSession ve stylu JDBC, které podporuje pouze Scala, Java a Python.
  • Spouštění dotazů (čtení i zápisu) prostřednictvím režimu HiveServer2 prostřednictvím režimu JDBC není podporováno u složitých datových typů, jako jsou Arrays, Struct/Map.
  • HWC podporuje zápis pouze ve formátech souborů ORC. Zápisy jiné než ORC (např. parquet a formáty textových souborů) nejsou podporovány prostřednictvím HWC.

Konektor Hive Warehouse vyžaduje samostatné clustery pro úlohy Sparku a Interaktivní dotazy. Pomocí těchto kroků nastavte tyto clustery ve službě Azure HDInsight.

Podporované typy a verze clusteru

Verze HWC Verze Sparku Verze InteractiveQuery
v1 Spark 2.4 | HDI 4.0 Interaktivní dotaz 3.1 | HDI 4.0
v2 Spark 3.1 | HDI 5.0 Interaktivní dotaz 3.1 | HDI 5.0

Vytváření clusterů

  1. Vytvořte cluster HDInsight Spark 4.0 s účtem úložiště a vlastní virtuální sítí Azure. Informace o vytvoření clusteru ve virtuální síti Azure najdete v tématu Přidání SLUŽBY HDInsight do existující virtuální sítě.

  2. Vytvořte cluster HDInsight Interactive Query (LLAP) 4.0 se stejným účtem úložiště a virtuální sítí Azure jako cluster Spark.

Konfigurace nastavení HWC

Shromáždění předběžných informací

  1. Ve webovém prohlížeči přejděte na https://LLAPCLUSTERNAME.azurehdinsight.net/#/main/services/HIVE místo, kde LLAPCLUSTERNAME je název vašeho clusteru Interactive Query.

  2. Přejděte na souhrnnou>adresu URL HiveServer2 Interactive JDBC a poznamenejte si hodnotu. Hodnota může být podobná: 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. Přejděte na Configs>Advanced Advanced>hive-site>hive.zookeeper.kvorum a poznamenejte si hodnotu. Hodnota může být podobná: <zookeepername1>.rekufuk2y2cezcbowjkbwfnyvd.bx.internal.cloudapp.net:2181,<zookeepername2>.rekufuk2y2cezcbowjkbwfnyvd.bx.internal.cloudapp.net:2181,<zookeepername3>.rekufuk2y2cezcbowjkbwfnyvd.bx.internal.cloudapp.net:2181.

  4. Přejděte na Configs>Advanced>General>hive.metastore.uris a poznamenejte si hodnotu. Hodnota může být podobná: thrift://iqgiro.rekufuk2y2cezcbowjkbwfnyvd.bx.internal.cloudapp.net:9083,thrift://hn*.rekufuk2y2cezcbowjkbwfnyvd.bx.internal.cloudapp.net:9083.

  5. Přejděte na Configs>Advanced Advanced>hive-interactive-site>hive.llap.daemon.service.hosts a poznamenejte si hodnotu. Hodnota může být podobná: @llap0.

Konfigurace nastavení clusteru Spark

  1. Ve webovém prohlížeči přejděte do https://CLUSTERNAME.azurehdinsight.net/#/main/services/SPARK2/configs umístění CLUSTERNAME název vašeho clusteru Apache Spark.

  2. Rozbalte vlastní výchozí hodnoty Spark2.

    Konfigurace Apache Ambari Spark2

  3. Vyberte Přidat vlastnost... a přidejte následující konfigurace:

    Konfigurace Hodnota
    spark.datasource.hive.warehouse.load.staging.dir Pokud používáte účet úložiště ADLS Gen2, použijte abfss://STORAGE_CONTAINER_NAME@STORAGE_ACCOUNT_NAME.dfs.core.windows.net/tmp
    Pokud používáte účet služby Azure Blob Storage, použijte wasbs://STORAGE_CONTAINER_NAME@STORAGE_ACCOUNT_NAME.blob.core.windows.net/tmp.
    Nastavte vhodný pracovní adresář kompatibilní s HDFS. Pokud máte dva různé clustery, pracovní adresář by měl být složka v pracovním adresáři účtu úložiště clusteru LLAP, aby k němu měl přístup HiveServer2. Nahraďte STORAGE_ACCOUNT_NAME názvem účtu úložiště, který cluster používá, a STORAGE_CONTAINER_NAME názvem kontejneru úložiště.
    spark.sql.hive.hiveserver2.jdbc.url Hodnota, kterou jste získali dříve z adresy URL HiveServer2 Interactive JDBC
    spark.datasource.hive.warehouse.metastoreUri Hodnota, kterou jste získali dříve z hive.metastore.uris.
    spark.security.credentials.hiveserver2.enabled true pro režim clusteru YARN a false pro klientský režim YARN.
    spark.hadoop.hive.zookeeper.quorum Hodnota, kterou jste získali dříve z hive.zookeeper.kvora.
    spark.hadoop.hive.llap.daemon.service.hosts Hodnota, kterou jste získali dříve z hive.llap.daemon.service.hosts.
  4. Uložte změny a restartujte všechny ovlivněné součásti.

Konfigurace clusterů HWC pro balíčky zabezpečení podniku (ESP)

Balíček zabezpečení podniku (ESP) poskytuje funkce na podnikové úrovni, jako je ověřování založené na službě Active Directory, podpora více uživatelů a řízení přístupu na základě role pro clustery Apache Hadoop ve službě Azure HDInsight. Další informace o ESP naleznete v tématu Použití balíčku zabezpečení podniku v HDInsight.

Kromě konfigurací uvedených v předchozí části přidejte následující konfiguraci pro použití HWC v clusterech ESP.

  1. Ve webovém uživatelském rozhraní clusteru Spark v Ambari přejděte do vlastních výchozích hodnot Spark2 CONFIGS>Spark2.>

  2. Aktualizujte následující vlastnost.

    Konfigurace Hodnota
    spark.sql.hive.hiveserver2.jdbc.url.principal hive/<llap-headnode>@<AAD-Domain>
    • Ve webovém prohlížeči přejděte do https://CLUSTERNAME.azurehdinsight.net/#/main/services/HIVE/summary umístění CLUSTERNAME název vašeho clusteru Interactive Query. Klikněte na HiveServer2 Interactive. Zobrazí se plně kvalifikovaný název domény (FQDN) hlavního uzlu, na kterém je LLAP spuštěný, jak je znázorněno na snímku obrazovky. Nahraďte <llap-headnode> touto hodnotou.

      hlavní uzel konektoru hive warehouse.

    • Pomocí příkazu ssh se připojte ke clusteru Interactive Query. default_realm Vyhledejte parametr v /etc/krb5.conf souboru. Nahraďte <AAD-DOMAIN> touto hodnotou jako řetězec velkými písmeny, jinak se přihlašovací údaje nenajdou.

      Hive Warehouse Connector AAD Domain.

    • Například hive/hn*.mjry42ikpruuxgs2qy2kpg4q5e.cx.internal.cloudapp.net@PKRSRVUQVMAE6J85.D2.INTERNAL.CLOUDAPP.NET.

  3. Podle potřeby uložte změny a restartujte součásti.

Využití konektoru Hive Warehouse

Můžete si vybrat mezi několika různými metodami připojení ke clusteru Interactive Query a spouštění dotazů pomocí konektoru Hive Warehouse Connector. Mezi podporované metody patří následující nástroje:

Níže je několik příkladů připojení k HWC ze Sparku.

Spark-shell

Jedná se o způsob, jak spustit Spark interaktivně prostřednictvím upravené verze prostředí Scala.

  1. Pomocí příkazu ssh se připojte ke clusteru Apache Spark. Upravte následující příkaz nahrazením clusteru názvem clusteru a zadáním příkazu:

    ssh sshuser@CLUSTERNAME-ssh.azurehdinsight.net
    
  2. V relaci ssh spusťte následující příkaz, který si poznamenejte hive-warehouse-connector-assembly verzi:

    ls /usr/hdp/current/hive_warehouse_connector
    
  3. Upravte níže uvedený kód s hive-warehouse-connector-assembly verzí uvedenou výše. Pak spuštěním příkazu spusťte prostředí Spark:

    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. Po spuštění prostředí Spark je možné spustit instanci konektoru Hive Warehouse pomocí následujících příkazů:

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

Odeslání Sparku

Spark-submit je nástroj pro odeslání libovolného programu Sparku (nebo úlohy) do clusterů Spark.

Úloha spark-submit nastaví a nakonfiguruje konektor Sparku a Hive Warehouse podle našich pokynů, spustí program, který jí předáme, a pak čistě uvolní použité prostředky.

Jakmile sestavíte kód scala/java spolu se závislostmi do souboru JAR sestavení, spusťte aplikaci Spark pomocí následujícího příkazu. Nahraďte <VERSION>hodnoty a <APP_JAR_PATH> skutečnými hodnotami.

  • Klientský režim YARN

    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
    
  • Režim clusteru YARN

    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
    

Tento nástroj se také používá, když jsme napsali celou aplikaci v pySpark a zabalili do .py souborů (Python), abychom mohli odeslat celý kód do clusteru Spark ke spuštění.

V případě aplikací v Pythonu předejte soubor .py místo /<APP_JAR_PATH>/myHwcAppProject.jara přidejte do cesty hledání následující konfigurační soubor (Python .zip) s příponou --py-files.

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

Spouštění dotazů v clusterech Enterprise Security Package (ESP)

Použijte kinit před spuštěním spark-shellu nebo spark-submit. Nahraďte uživatelské jméno názvem účtu domény oprávněními pro přístup ke clusteru a pak spusťte následující příkaz:

kinit USERNAME

Zabezpečení dat v clusterech Spark ESP

  1. Vytvořte tabulku demo s ukázkovými daty zadáním následujících příkazů:

    create table demo (name string);
    INSERT INTO demo VALUES ('HDinsight');
    INSERT INTO demo VALUES ('Microsoft');
    INSERT INTO demo VALUES ('InteractiveQuery');
    
  2. Obsah tabulky zobrazíte pomocí následujícího příkazu. Než zásadu použijete, demo zobrazí se v tabulce celý sloupec.

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

    ukázková tabulka před použitím zásad rangeru

  3. Použijte zásadu maskování sloupce, která zobrazuje pouze poslední čtyři znaky sloupce.

    1. Přejděte do uživatelského rozhraní správce Ranger na adrese https://LLAPCLUSTERNAME.azurehdinsight.net/ranger/.

    2. Klikněte na službu Hive pro váš cluster v části Hive. ranger service manager.

    3. Klikněte na kartu Masking (Masking) a potom Add New Policy (Přidat novou zásadu).

      Hive Warehouse Connector Ranger – seznam zásad Hive

    4. Zadejte požadovaný název zásady. Vyberte databázi: Výchozí, Tabulka Hive: demo, Sloupec Hive: name, User: rsadmin2, Access Types: select a Partial mask: show last 4 from the Select Masking Option menu. Klikněte na tlačítko Přidat. vytvořit zásadu.

  4. Znovu zobrazte obsah tabulky. Po použití zásad rangeru uvidíme pouze poslední čtyři znaky sloupce.

    Ukázková tabulka po použití zásad rangeru

Další kroky