Megosztás a következőn keresztül:


Az Apache Spark és az Apache Hive integrálása a Hive Warehouse-összekötővel az Azure HDInsightban

Az Apache Hive Warehouse Connector (HWC) egy olyan kódtár, amely lehetővé teszi az Apache Spark és az Apache Hive egyszerűbb kezelését. Támogatja az olyan feladatokat, mint az adatok áthelyezése a Spark DataFrames és a Hive-táblák között. Emellett úgy is, hogy a Spark streamelési adatait Hive-táblákba irányítja. A Hive Warehouse Connector úgy működik, mint egy híd a Spark és a Hive között. Emellett a Scala, a Java és a Python programozási nyelvként is használható a fejlesztéshez.

A Hive Warehouse Connector lehetővé teszi, hogy kihasználja a Hive és a Spark egyedi funkcióit a nagy teljesítményű big data-alkalmazások létrehozásához.

Az Apache Hive támogatja az atomi, konzisztens, izolált és tartós (ACID) adatbázis-tranzakciókat. További információ az ACID-ról és a Hive-tranzakciókról: Hive Transactions. A Hive részletes biztonsági vezérlőket is kínál az Apache Ranger és a kis késésű elemzési feldolgozás (LLAP) használatával, amelyek nem érhetők el az Apache Sparkban.

Az Apache Spark egy strukturált streamelési API-val rendelkezik, amely az Apache Hive-ben nem elérhető streamelési képességeket biztosít. A HDInsight 4.0-tól kezdve az Apache Spark 2.3.1> és az Apache Hive 3.1.0 különálló metaadattár-katalógusokkal rendelkezik, ami megnehezíti az együttműködést.

A Hive Warehouse Connector (HWC) megkönnyíti a Spark és a Hive együttes használatát. A HWC-kódtár az LLAP-démonok adatait párhuzamosan tölti be a Spark-végrehajtókba. Ez a folyamat hatékonyabbá és adaptálhatóbbá teszi, mint egy standard JDBC-kapcsolat a Spark és a Hive között. Ez két különböző végrehajtási módot hoz létre a HWC-hez:

  • Hive JDBC mód a HiveServer2-n keresztül
  • Hive LLAP mód LLAP-démonokkal [Ajánlott]

Alapértelmezés szerint a HWC hive LLAP démonok használatára van konfigurálva. A Hive-lekérdezések (olvasási és írási) a fenti módok és a hozzájuk tartozó API-k használatával történő végrehajtásához lásd a HWC API-kat.

a Hive Warehouse-összekötő architektúrája.

A Hive Warehouse-összekötő által támogatott műveletek némelyike a következő:

  • Táblázat leírása
  • Táblázat létrehozása ORC formátumú adatokhoz
  • Hive-adatok kiválasztása és DataFrame beolvasása
  • DataFrame írása a Hive-be kötegben
  • Hive-frissítési utasítás végrehajtása
  • Táblázatadatok olvasása a Hive-ből, átalakítás a Sparkban, és írása egy új Hive-táblába
  • DataFrame- vagy Spark-stream írása a Hive-be a HiveStreaming használatával

A Hive Warehouse-összekötő beállítása

Fontos

  • A Spark 2.4 Vállalati biztonságicsomag-fürtökre telepített HiveServer2 interaktív példány nem támogatott a Hive Warehouse-összekötővel való használathoz. Ehelyett egy külön HiveServer2 interaktív fürtöt kell konfigurálnia a HiveServer2 Interaktív számítási feladatok üzemeltetéséhez. A Hive Warehouse Connector egyetlen Spark 2.4-fürtöt használó konfigurációja nem támogatott.
  • A Hive Warehouse Connector (HWC) kódtár nem támogatott olyan interaktív lekérdezésfürtökhöz, amelyekben engedélyezve van a Számítási feladatok kezelése (WLM) funkció.
    Ha csak Spark-számítási feladatokkal rendelkezik, és HWC-kódtárat szeretne használni, győződjön meg arról, hogy az Interaktív lekérdezésfürt nem rendelkezik engedélyezve a Számítási feladatok kezelése funkcióval (hive.server2.tez.interactive.queue a konfiguráció nincs beállítva a Hive-konfigurációkban).
    Olyan forgatókönyv esetén, amelyben a Spark számítási feladatok (HWC) és az LLAP natív számítási feladatai is léteznek, két külön interaktív lekérdezésfürtöt kell létrehoznia megosztott metaadattár-adatbázissal. Egy fürt natív LLAP-számítási feladatokhoz, ahol a WLM-funkció szükség szerint engedélyezhető, a HWC más fürtje pedig csak olyan számítási feladathoz, ahol a WLM-funkciót nem kell konfigurálni. Fontos megjegyezni, hogy a WLM-erőforráscsomagokat mindkét fürtből megtekintheti, még akkor is, ha csak egy fürtben van engedélyezve. Ne módosítsa az erőforrásterveket abban a fürtben, ahol a WLM szolgáltatás le van tiltva, mert az hatással lehet más fürtök WLM-funkcióira.
  • Bár a Spark támogatja az R számítástechnikai nyelvet az adatelemzés egyszerűsítése érdekében, a Hive Warehouse Connector (HWC) kódtár használata nem támogatott az R-vel. A HWC számítási feladatok végrehajtásához lekérdezéseket hajthat végre a Sparkból a Hive-be a JDBC-stílusú HiveWarehouseSession API-val, amely csak a Scalát, a Java-t és a Pythont támogatja.
  • A lekérdezések (olvasási és írási) végrehajtása a HiveServer2-n keresztül JDBC-módban nem támogatott olyan összetett adattípusok esetében, mint a Tömbök/Struct/Map típusok.
  • A HWC csak ORC-fájlformátumokban támogatja az írást. A nem ORC írások (pl. parquet és szöveges fájlformátumok) nem támogatottak a HWC-n keresztül.

A Hive Warehouse-összekötőnek külön fürtökre van szüksége a Spark- és interaktív lekérdezési számítási feladatokhoz. Ezeket a fürtöket az Azure HDInsightban az alábbi lépésekkel állíthatja be.

Támogatott fürttípusok > verziók

HWC-verzió Spark verzió InteractiveQuery-verzió
v1 Spark 2.4 | HDI 4.0 Interaktív lekérdezés 3.1 | HDI 4.0
v2 Spark 3.1 | HDI 5.0 Interaktív lekérdezés 3.1 | HDI 5.0

Fürtök létrehozása

  1. Hozzon létre egy HDInsight Spark 4.0-fürtöt egy tárfiókkal és egy egyéni Azure-beli virtuális hálózattal. A fürt Azure-beli virtuális hálózatban való létrehozásáról további információt a HDInsight hozzáadása meglévő virtuális hálózathoz című témakörben talál.

  2. Hozzon létre egy HDInsight Interactive Query (LLAP) 4.0-fürtöt ugyanazzal a tárfiókkal és Azure-beli virtuális hálózattal, mint a Spark-fürt.

HWC-beállítások konfigurálása

Előzetes információk összegyűjtése

  1. Egy webböngészőből lépjen arra a https://LLAPCLUSTERNAME.azurehdinsight.net/#/main/services/HIVE helyre, ahol az LLAPCLUSTERNAME az interaktív lekérdezési fürt neve.

  2. Lépjen az Összefoglaló>HiveServer2 interaktív JDBC URL-címre , és jegyezze fel az értéket. Az érték a következőhöz hasonló lehet: 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. Lépjen a Configs>Advanced>hive-site hive.zookeeper.quorum lapra>, és jegyezze fel az értéket. Az érték a következőhöz hasonló lehet: <zookeepername1>.rekufuk2y2cezcbowjkbwfnyvd.bx.internal.cloudapp.net:2181,<zookeepername2>.rekufuk2y2cezcbowjkbwfnyvd.bx.internal.cloudapp.net:2181,<zookeepername3>.rekufuk2y2cezcbowjkbwfnyvd.bx.internal.cloudapp.net:2181.

  4. Lépjen a Configs>Advanced>General>hive.metastore.uris webhelyre, és jegyezze fel az értéket. Az érték a következőhöz hasonló lehet: thrift://iqgiro.rekufuk2y2cezcbowjkbwfnyvd.bx.internal.cloudapp.net:9083,thrift://hn*.rekufuk2y2cezcbowjkbwfnyvd.bx.internal.cloudapp.net:9083.

  5. Lépjen a Configs>Advanced>hive-interactive-site>hive.llap.daemon.service.hosts webhelyre, és jegyezze fel az értéket. Az érték a következőhöz hasonló lehet: @llap0.

A Spark-fürt beállításainak konfigurálása

  1. Egy webböngészőből lépjen arra https://CLUSTERNAME.azurehdinsight.net/#/main/services/SPARK2/configs a helyre, ahol a CLUSTERNAME az Apache Spark-fürt neve.

  2. Bontsa ki az egyéni spark2 alapértelmezett értékeket.

    Apache Ambari Spark2-konfiguráció.

  3. Válassza a Tulajdonság hozzáadása... lehetőséget a következő konfigurációk hozzáadásához:

    Konfiguráció Érték
    spark.datasource.hive.warehouse.load.staging.dir Ha ADLS Gen2-tárfiókot használ, használja a abfss://STORAGE_CONTAINER_NAME@STORAGE_ACCOUNT_NAME.dfs.core.windows.net/tmp
    Ha Azure Blob Storage-fiókot használ, használja a .wasbs://STORAGE_CONTAINER_NAME@STORAGE_ACCOUNT_NAME.blob.core.windows.net/tmp
    Állítsa be egy megfelelő HDFS-kompatibilis átmeneti könyvtárra. Ha két különböző fürtje van, az átmeneti könyvtárnak az LLAP-fürt tárfiókjának átmeneti könyvtárában kell lennie, hogy a HiveServer2 hozzáférhessen hozzá. Cserélje le STORAGE_ACCOUNT_NAME a fürt által használt tárfiók nevére és STORAGE_CONTAINER_NAME a tároló nevére.
    spark.sql.hive.hiveserver2.jdbc.url A HiveServer2 Interactive JDBC URL-címéből korábban beszerzett érték
    spark.datasource.hive.warehouse.metastoreUri A hive.metastore.uris fájlból korábban beszerzett érték.
    spark.security.credentials.hiveserver2.enabled true a YARN-fürt módhoz és false a YARN ügyfélmódhoz.
    spark.hadoop.hive.zookeeper.quorum A hive.zookeeper.quorumból korábban beszerzett érték.
    spark.hadoop.hive.llap.daemon.service.hosts A hive.llap.daemon.service.hosts webhelyről korábban beszerzett érték.
  4. Mentse a módosításokat, és indítsa újra az összes érintett összetevőt.

HWC vállalati biztonsági csomag (ESP) fürtökhöz való konfigurálása

Az Enterprise Security Package (ESP) olyan nagyvállalati szintű képességeket biztosít, mint az Active Directory-alapú hitelesítés, a többfelhasználós támogatás és a szerepköralapú hozzáférés-vezérlés az Azure HDInsightban található Apache Hadoop-fürtökhöz. Az ESP-vel kapcsolatos további információkért lásd: Vállalati biztonsági csomag használata a HDInsightban.

Az előző szakaszban említett konfigurációkon kívül adja hozzá a következő konfigurációt a HWC esp-fürtökön való használatához.

  1. A Spark-fürt Ambari webes felhasználói felületén lépjen a Spark2>CONFIGS>Egyéni spark2 alapértelmezett beállításaihoz.

  2. Frissítse a következő tulajdonságot.

    Konfiguráció Érték
    spark.sql.hive.hiveserver2.jdbc.url.principal hive/<llap-headnode>@<AAD-Domain>
    • Egy webböngészőből lépjen arra a https://CLUSTERNAME.azurehdinsight.net/#/main/services/HIVE/summary helyre, ahol a CLUSTERNAME az interaktív lekérdezési fürt neve. Kattintson a HiveServer2 Interactive elemre. Megjelenik annak a fő csomópontnak a teljes tartományneve (FQDN), amelyen az LLAP fut a képernyőképen látható módon. Cserélje le <llap-headnode> erre az értékre.

      hive warehouse connector Head Node.

    • Az ssh paranccsal csatlakozzon az interaktív lekérdezési fürthöz. Keresse meg default_realm a paramétert a /etc/krb5.conf fájlban. Cserélje le <AAD-DOMAIN> ezt az értéket nagybetűs sztringként, ellenkező esetben a hitelesítő adatok nem találhatók.

      hive warehouse connector AAD Domain.

    • Például: hive/hn*.mjry42ikpruuxgs2qy2kpg4q5e.cx.internal.cloudapp.net@PKRSRVUQVMAE6J85.D2.INTERNAL.CLOUDAPP.NET.

  3. Mentse a módosításokat, és szükség szerint indítsa újra az összetevőket.

Hive Warehouse-összekötő használata

Az interaktív lekérdezési fürthöz való csatlakozáshoz és a lekérdezések a Hive Warehouse Connector használatával történő végrehajtásához választhat néhány különböző módszer közül. A támogatott módszerek a következő eszközöket tartalmazzák:

Az alábbiakban néhány példa látható a HWC-hez a Sparkból való csatlakozáshoz.

Spark-shell

Így interaktívan futtathatja a Sparkot a Scala-rendszerhéj módosított verzióján keresztül.

  1. Az ssh paranccsal csatlakozzon az Apache Spark-fürthöz. Szerkessze az alábbi parancsot úgy, hogy lecseréli a CLUSTERNAME nevet a fürt nevére, majd írja be a parancsot:

    ssh sshuser@CLUSTERNAME-ssh.azurehdinsight.net
    
  2. Az ssh-munkamenetben hajtsa végre a következő parancsot a hive-warehouse-connector-assembly verzió megjegyzéséhez:

    ls /usr/hdp/current/hive_warehouse_connector
    
  3. Szerkessze az alábbi kódot a hive-warehouse-connector-assembly fent azonosított verzióval. Ezután hajtsa végre a parancsot a Spark-rendszerhéj elindításához:

    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. A Spark-rendszerhéj elindítása után a Hive Warehouse Connector-példány a következő parancsokkal indítható el:

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

Spark-küldés

A Spark-submit segédprogram bármilyen Spark-programot (vagy feladatot) elküldhet a Spark-fürtökre.

A Spark-submit feladat az utasításoknak megfelelően beállítja és konfigurálja a Spark és a Hive Warehouse-összekötőt, végrehajtja a neki átadott programot, majd tisztán felszabadítja a használt erőforrásokat.

Miután a scala/java kódot és a függőségeket egy szerelvény jar-ba építette, az alábbi paranccsal elindíthat egy Spark-alkalmazást. Cserélje le és <APP_JAR_PATH> írja be <VERSION>a tényleges értékeket.

  • YARN-ügyfél mód

    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-fürt mód

    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
    

Ez a segédprogram akkor is használható, ha a pySparkban megírtuk a teljes alkalmazást, és fájlba .py (Pythonba) csomagoltuk, hogy a teljes kódot elküldhessük a Spark-fürtnek végrehajtás céljából.

Python-alkalmazások esetén adjon át egy .py fájlt a helyén /<APP_JAR_PATH>/myHwcAppProject.jar, és adja hozzá az alábbi konfigurációs (Python .zip) fájlt a keresési útvonalhoz --py-files.

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

Lekérdezések futtatása Vállalati biztonsági csomag (ESP) fürtökön

A spark-shell vagy a spark-submit indítása előtt használja kinit . Cserélje le a FELHASZNÁLÓNÉV elemet egy tartományi fiók nevére a fürt elérésére vonatkozó engedélyekkel, majd hajtsa végre a következő parancsot:

kinit USERNAME

Adatok védelme Spark ESP-fürtökön

  1. Hozzon létre egy táblázatot demo néhány mintaadattal a következő parancsok megadásával:

    create table demo (name string);
    INSERT INTO demo VALUES ('HDinsight');
    INSERT INTO demo VALUES ('Microsoft');
    INSERT INTO demo VALUES ('InteractiveQuery');
    
  2. A táblázat tartalmát az alábbi paranccsal tekintheti meg. A szabályzat alkalmazása előtt a táblázat a demo teljes oszlopot jeleníti meg.

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

    bemutató tábla a ranger-szabályzat alkalmazása előtt.

  3. Alkalmazzon olyan oszlopmaszkolási szabályzatot, amely csak az oszlop utolsó négy karakterét jeleníti meg.

    1. Lépjen a Ranger felügyeleti felhasználói felületére a következő címen https://LLAPCLUSTERNAME.azurehdinsight.net/ranger/: .

    2. Kattintson a fürt Hive szolgáltatására a Hive alatt. ranger service manager.

    3. Kattintson a Maszkolás lapra, majd az Új szabályzat hozzáadása parancsra

      hive warehouse connector ranger hive policy list.

    4. Adjon meg egy kívánt házirendnevet. Adatbázis kiválasztása: Alapértelmezett, Hive tábla: demo, Hive oszlop: név, Felhasználó: rsadmin2, Hozzáférési típusok: kiválasztás és Részleges maszk: az utolsó 4 megjelenítése a Maszkolás kiválasztása menüből . Kattintson a Hozzáadás gombra. szabályzat létrehozása.

  4. Tekintse meg újra a tábla tartalmát. A ranger-szabályzat alkalmazása után csak az oszlop utolsó négy karakterét láthatjuk.

    demótábla a ranger-szabályzat alkalmazása után.

Következő lépések