Zintegruj platformę Apache Spark z programem Apache Hive za pomocą łącznika Hive Warehouse Connector w usłudze Azure HDInsight

Apache Hive Warehouse Połączenie or (HWC) to biblioteka, która umożliwia łatwiejsze pracę z platformami Apache Spark i Apache Hive. Obsługuje zadania, takie jak przenoszenie danych między ramkami danych platformy Spark i tabelami Hive. Ponadto poprzez kierowanie danych przesyłanych strumieniowo platformy Spark do tabel programu Hive. Usługa Hive Warehouse Połączenie or działa jak most między platformą Spark i programem Hive. Obsługuje również język Scala, Java i Python jako języki programowania na potrzeby programowania.

Usługa Hive Warehouse Połączenie or umożliwia korzystanie z unikatowych funkcji technologii Hive i Spark w celu tworzenia zaawansowanych aplikacji danych big data.

Apache Hive oferuje obsługę transakcji bazy danych, które są niepodzielne, spójne, izolowane i trwałe (ACID). Aby uzyskać więcej informacji na temat acid i transakcji w usłudze Hive, zobacz Hive Transactions (Transakcje hive). Usługa Hive oferuje również szczegółowe mechanizmy kontroli zabezpieczeń za pośrednictwem platformy Apache Ranger i przetwarzania analitycznego o małych opóźnieniach (LLAP), które nie są dostępne na platformie Apache Spark.

Platforma Apache Spark ma interfejs API przesyłania strumieniowego ze strukturą, który zapewnia możliwości przesyłania strumieniowego niedostępne w usłudze Apache Hive. Począwszy od usług HDInsight 4.0, Apache Spark 2.3.1 i nowszych oraz Apache Hive 3.1.0 mają oddzielne wykazy magazynów metadanych, co utrudnia współdziałanie.

Usługa Hive Warehouse Połączenie or (HWC) ułatwia jednoczesne korzystanie z platform Spark i Hive. Biblioteka HWC ładuje dane z demonów LLAP do funkcji wykonawczych platformy Spark równolegle. Ten proces sprawia, że jest bardziej wydajny i dostosowywany niż standardowe połączenie JDBC z platformy Spark do programu Hive. Spowoduje to wyświetlenie dwóch różnych trybów wykonywania dla HWC:

  • Tryb Hive JDBC za pośrednictwem serwera HiveServer2
  • Tryb LLAP programu Hive przy użyciu demonów LLAP [Zalecane]

Domyślnie HWC jest skonfigurowany do używania demonów HIVe LLAP. Aby wykonać zapytania Hive (zarówno odczyt, jak i zapis) przy użyciu powyższych trybów z odpowiednimi interfejsami API, zobacz Interfejsy API HWC.

hive warehouse connector architecture.

Niektóre operacje obsługiwane przez usługę Hive Warehouse Połączenie or to:

  • Opisywanie tabeli
  • Tworzenie tabeli dla danych w formacie ORC
  • Wybieranie danych programu Hive i pobieranie ramki danych
  • Zapisywanie ramki danych w usłudze Hive w partii
  • Wykonywanie instrukcji aktualizacji programu Hive
  • Odczytywanie danych tabeli z programu Hive, przekształcanie ich na platformie Spark i zapisywanie ich w nowej tabeli Programu Hive
  • Zapisywanie ramki danych lub strumienia Spark w usłudze Hive przy użyciu technologii HiveStreaming

Konfiguracja Połączenie or magazynu Hive

Ważne

  • Wystąpienie interaktywne HiveServer2 zainstalowane w klastrach pakietu Enterprise Security Platformy Spark 2.4 nie jest obsługiwane do użycia z usługą Hive Warehouse Połączenie or. Zamiast tego należy skonfigurować oddzielny klaster HiveServer2 Interactive do hostowania obciążeń interaktywnych HiveServer2. Konfiguracja usługi Hive Warehouse Połączenie or korzystająca z pojedynczego klastra Spark 2.4 nie jest obsługiwana.
  • Biblioteka Połączenie or magazynu Hive (HWC) nie jest obsługiwana w przypadku klastrów zapytań interakcyjnych, w których włączono funkcję zarządzania obciążeniami (WLM).
    W scenariuszu, w którym masz tylko obciążenia platformy Spark i chcesz używać biblioteki HWC, upewnij się, że klaster zapytań interakcyjnych nie ma włączonej funkcji zarządzania obciążeniami (hive.server2.tez.interactive.queue konfiguracja nie jest ustawiona w konfiguracjach programu Hive).
    W przypadku scenariusza, w którym istnieją obciążenia platformy Spark (HWC) i obciążenia natywne LLAP, należy utworzyć dwa oddzielne klastry zapytań interakcyjnych z udostępnioną bazą danych magazynu metadanych. Jeden klaster dla natywnych obciążeń LLAP, w których można włączyć funkcję WLM w zależności od potrzeb, a drugi klaster tylko dla obciążenia HWC, w którym nie należy konfigurować funkcji WLM. Należy pamiętać, że można wyświetlić plany zasobów WLM z obu klastrów, nawet jeśli jest on włączony tylko w jednym klastrze. Nie wprowadzaj żadnych zmian w planach zasobów w klastrze, w którym funkcja WLM jest wyłączona, ponieważ może to mieć wpływ na funkcjonalność WLM w innym klastrze.
  • Mimo że platforma Spark obsługuje język przetwarzania R w celu uproszczenia analizy danych, biblioteka Połączenie or (HWC) usługi Hive Warehouse nie jest obsługiwana do użycia z językiem R. Aby wykonywać obciążenia HWC, można wykonywać zapytania z platformy Spark do programu Hive przy użyciu interfejsu API HiveWarehouseSession w stylu JDBC, który obsługuje tylko język Scala, Java i Python.
  • Wykonywanie zapytań (zarówno odczytu, jak i zapisu) za pośrednictwem serwera HiveServer2 za pośrednictwem trybu JDBC nie jest obsługiwane w przypadku złożonych typów danych, takich jak Arrays/Struct/Map.
  • HWC obsługuje zapisywanie tylko w formatach plików ORC. Zapisy inne niż ORC (np. formaty plików parquet i tekstowych) nie są obsługiwane za pośrednictwem HWC.

Usługa Hive Warehouse Połączenie or wymaga oddzielnych klastrów dla obciążeń Spark i Interactive Query. Wykonaj następujące kroki, aby skonfigurować te klastry w usłudze Azure HDInsight.

Obsługiwane typy klastrów i wersje

Wersja HWC Wersja platformy Spark Wersja interactiveQuery
v1 Spark 2.4 | HDI 4.0 Interakcyjne zapytanie 3.1 | HDI 4.0
v2 Spark 3.1 | HDI 5.0 Interakcyjne zapytanie 3.1 | HDI 5.0

Tworzenie klastrów

  1. Utwórz klaster platformy Spark 4.0 usługi HDInsight z kontem magazynu i niestandardową siecią wirtualną platformy Azure. Aby uzyskać informacje na temat tworzenia klastra w sieci wirtualnej platformy Azure, zobacz Dodawanie usługi HDInsight do istniejącej sieci wirtualnej.

  2. Utwórz klaster interaktywnego zapytania usługi HDInsight (LLAP) 4.0 z tym samym kontem magazynu i siecią wirtualną platformy Azure co klaster Spark.

Konfigurowanie ustawień HWC

Zbieranie informacji wstępnych

  1. W przeglądarce internetowej przejdź do https://LLAPCLUSTERNAME.azurehdinsight.net/#/main/services/HIVE lokalizacji LLAPCLUSTERNAME jest nazwą klastra interakcyjnego zapytań.

  2. Przejdź do pozycji Podsumowanie>Serwera HiveServer2 Interactive JDBC URL i zanotuj wartość. Wartość może być podobna do: 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. Przejdź do pozycji Configs>Advanced Advanced>hive-site>hive.zookeeper.quorum i zanotuj wartość . Wartość może być podobna do: <zookeepername1>.rekufuk2y2cezcbowjkbwfnyvd.bx.internal.cloudapp.net:2181,<zookeepername2>.rekufuk2y2cezcbowjkbwfnyvd.bx.internal.cloudapp.net:2181,<zookeepername3>.rekufuk2y2cezcbowjkbwfnyvd.bx.internal.cloudapp.net:2181.

  4. Przejdź do adresu Configs>Advanced General>>hive.metastore.uris i zanotuj wartość . Wartość może być podobna do: thrift://iqgiro.rekufuk2y2cezcbowjkbwfnyvd.bx.internal.cloudapp.net:9083,thrift://hn*.rekufuk2y2cezcbowjkbwfnyvd.bx.internal.cloudapp.net:9083.

  5. Przejdź do pozycji Configs>Advanced Advanced>hive-interactive-site>hive.llap.daemon.service.hosts i zanotuj wartość . Wartość może być podobna do: @llap0.

Konfigurowanie ustawień klastra Spark

  1. W przeglądarce internetowej przejdź do https://CLUSTERNAME.azurehdinsight.net/#/main/services/SPARK2/configs lokalizacji CLUSTERNAME to nazwa klastra Apache Spark.

  2. Rozwiń węzeł Niestandardowe wartości spark2-defaults.

    Apache Ambari Spark2 configuration.

  3. Wybierz pozycję Dodaj właściwość... aby dodać następujące konfiguracje:

    Konfigurowanie Wartość
    spark.datasource.hive.warehouse.load.staging.dir Jeśli używasz konta magazynu usługi ADLS Gen2, użyj polecenia abfss://STORAGE_CONTAINER_NAME@STORAGE_ACCOUNT_NAME.dfs.core.windows.net/tmp
    Jeśli używasz konta usługi Azure Blob Storage, użyj polecenia wasbs://STORAGE_CONTAINER_NAME@STORAGE_ACCOUNT_NAME.blob.core.windows.net/tmp.
    Ustaw odpowiedni katalog przejściowy zgodny z systemem plików HDFS. Jeśli masz dwa różne klastry, katalog przejściowy powinien być folderem w katalogu przejściowym konta magazynu klastra LLAP, aby serwer HiveServer2 miał do niego dostęp. Zastąp STORAGE_ACCOUNT_NAME ciąg nazwą konta magazynu używanego przez klaster i STORAGE_CONTAINER_NAME nazwą kontenera magazynu.
    spark.sql.hive.hiveserver2.jdbc.url Wartość uzyskana wcześniej z adresu URL interaktywnego JDBC serwera HiveServer2
    spark.datasource.hive.warehouse.metastoreUri Wartość uzyskana wcześniej z hive.metastore.uris.
    spark.security.credentials.hiveserver2.enabled true dla trybu klastra YARN i false trybu klienta YARN.
    spark.hadoop.hive.zookeeper.quorum Wartość uzyskana wcześniej z hive.zookeeper.quorum.
    spark.hadoop.hive.llap.daemon.service.hosts Wartość uzyskana wcześniej z hive.llap.daemon.service.hosts.
  4. Zapisz zmiany i uruchom ponownie wszystkie objęte składniki.

Konfigurowanie serwera HWC dla klastrów pakietu Enterprise Security (ESP)

Pakiet Enterprise Security (ESP) zapewnia funkcje klasy korporacyjnej, takie jak uwierzytelnianie oparte na usłudze Active Directory, obsługa wielu użytkowników i kontrola dostępu oparta na rolach dla klastrów Apache Hadoop w usłudze Azure HDInsight. Aby uzyskać więcej informacji na temat esp, zobacz Use Enterprise Security Package in HDInsight (Korzystanie z pakietu Enterprise Security w usłudze HDInsight).

Oprócz konfiguracji wymienionych w poprzedniej sekcji dodaj następującą konfigurację, aby używać funkcji HWC w klastrach ESP.

  1. W internetowym interfejsie użytkownika systemu Ambari klastra Spark przejdź do pozycji Spark2 CONFIGS Custom spark2-defaults>(Niestandardowe ustawienia spark2-defaults platformy Spark2).>

  2. Zaktualizuj następującą właściwość.

    Konfigurowanie Wartość
    spark.sql.hive.hiveserver2.jdbc.url.principal hive/<llap-headnode>@<AAD-Domain>
    • W przeglądarce internetowej przejdź do https://CLUSTERNAME.azurehdinsight.net/#/main/services/HIVE/summary lokalizacji clusterNAME to nazwa klastra interactive query. Kliknij pozycję HiveServer2 Interactive. Zobaczysz w pełni kwalifikowaną nazwę domeny (FQDN) węzła głównego, na którym działa llAP, jak pokazano na zrzucie ekranu. Zastąp <llap-headnode> wartość tą wartością.

      hive warehouse connector Head Node.

    • Użyj polecenia SSH, aby nawiązać połączenie z klastrem Interactive Query. default_realm Wyszukaj parametr w /etc/krb5.conf pliku . Zastąp ciąg tą wartością wielkimi literami. W <AAD-DOMAIN> przeciwnym razie poświadczenie nie zostanie znalezione.

      hive warehouse connector AAD Domain.

    • Na przykład hive/hn*.mjry42ikpruuxgs2qy2kpg4q5e.cx.internal.cloudapp.net@PKRSRVUQVMAE6J85.D2.INTERNAL.CLOUDAPP.NET.

  3. Zapisz zmiany i uruchom ponownie składniki zgodnie z potrzebami.

Użycie usługi Hive Warehouse Połączenie or

Możesz wybrać między kilkoma różnymi metodami nawiązywania połączenia z klastrem zapytań interakcyjnych i wykonywać zapytania przy użyciu Połączenie or magazynu Hive. Obsługiwane metody obejmują następujące narzędzia:

Poniżej przedstawiono kilka przykładów nawiązywania połączenia z systemem HWC z platformy Spark.

Powłoka spark

Jest to sposób interaktywnego uruchamiania platformy Spark za pomocą zmodyfikowanej wersji powłoki Scala.

  1. Użyj polecenia ssh, aby nawiązać połączenie z klastrem Apache Spark. Zmodyfikuj poniższe polecenie, zastępując ciąg CLUSTERNAME nazwą klastra, a następnie wprowadź polecenie:

    ssh sshuser@CLUSTERNAME-ssh.azurehdinsight.net
    
  2. W sesji SSH wykonaj następujące polecenie, aby zanotować hive-warehouse-connector-assembly wersję:

    ls /usr/hdp/current/hive_warehouse_connector
    
  3. Zmodyfikuj poniższy kod, hive-warehouse-connector-assembly aby wersję zidentyfikowaną powyżej. Następnie wykonaj polecenie , aby uruchomić powłokę 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 uruchomieniu powłoki spark można uruchomić wystąpienie usługi Hive Warehouse Połączenie or przy użyciu następujących poleceń:

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

Przesyłanie na platformie Spark

Spark-submit to narzędzie do przesyłania dowolnego programu Spark (lub zadania) do klastrów Spark.

Zadanie przesyłania platformy Spark skonfiguruje i skonfiguruje usługę Spark i Hive Warehouse Połączenie or zgodnie z naszymi instrukcjami, wykonaj przekazany do niego program, a następnie oczyści zasoby, które były używane.

Po utworzeniu kodu scala/java wraz z zależnościami w pliku jar zestawu użyj poniższego polecenia, aby uruchomić aplikację Spark. Zastąp <VERSION>wartości i <APP_JAR_PATH> wartościami rzeczywistymi.

  • Tryb klienta usługi 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
    
  • Tryb klastra 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
    

To narzędzie jest również używane, gdy napisaliśmy całą aplikację w narzędziu pySpark i spakowaliśmy do .py plików (Python), dzięki czemu możemy przesłać cały kod do klastra Spark w celu wykonania.

W przypadku aplikacji języka Python przekaż plik .py w miejscu /<APP_JAR_PATH>/myHwcAppProject.jar, a następnie dodaj poniższy plik konfiguracji (Python .zip) do ścieżki wyszukiwania za pomocą --py-filespolecenia .

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

Uruchamianie zapytań w klastrach pakietu Enterprise Security (ESP)

Przed uruchomieniem powłoki spark lub spark-submit użyj kinit polecenia . Zastąp ciąg USERNAME nazwą konta domeny z uprawnieniami dostępu do klastra, a następnie wykonaj następujące polecenie:

kinit USERNAME

Zabezpieczanie danych w klastrach Spark ESP

  1. Utwórz tabelę demo z przykładowymi danymi, wprowadzając następujące polecenia:

    create table demo (name string);
    INSERT INTO demo VALUES ('HDinsight');
    INSERT INTO demo VALUES ('Microsoft');
    INSERT INTO demo VALUES ('InteractiveQuery');
    
  2. Wyświetl zawartość tabeli za pomocą następującego polecenia. Przed zastosowaniem zasad tabela demo zawiera pełną kolumnę.

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

    demo table before applying ranger policy.

  3. Zastosuj zasady maskowania kolumn, które wyświetlają tylko cztery ostatnie znaki kolumny.

    1. Przejdź do interfejsu użytkownika platformy Ranger Administracja pod adresem https://LLAPCLUSTERNAME.azurehdinsight.net/ranger/.

    2. Kliknij usługę Hive dla klastra w obszarze Hive. ranger service manager.

    3. Kliknij kartę Maskowanie , a następnie pozycję Dodaj nowe zasady

      hive warehouse connector ranger hive policy list.

    4. Podaj żądaną nazwę zasad. Wybierz bazę danych: domyślną, tabelę Programu Hive: demo, kolumnę Hive: name, User: rsadmin2, Access Types: select i Partial maska: show last 4 z menu Select Masking Option (Wybieranie opcji maskowania). Kliknij przycisk Dodaj. create policy.

  4. Ponownie wyświetl zawartość tabeli. Po zastosowaniu zasad ranger możemy zobaczyć tylko cztery ostatnie znaki kolumny.

    demo table after applying ranger policy.

Następne kroki