Apache Spark ve Apache Hive'Hive Warehouse Connector Azure HDInsight

Apache Hive Ambarı Bağlayıcısı (HWC), depolama ve depolama ile daha kolay çalışma Apache Spark bir Apache Hive. Spark DataFrames ile Hive tabloları arasında veri taşıma gibi görevleri destekler. Ayrıca, Spark akış verilerini Hive tablolarına yönlendirerek. Hive Warehouse Connector Spark ve Hive arasındaki bir köprü gibi çalışır. Ayrıca Scala, Java ve Python'ın geliştirme için programlama dillerini de destekler.

Bu Hive Warehouse Connector, güçlü büyük veri uygulamaları oluşturmak için Hive ve Spark'ın benzersiz özelliklerinden yararlanmaya olanak sağlar.

Apache Hive Atomik, Tutarlı, Yalıtılmış ve Dayanıklı (ACID) veritabanı işlemleri için destek sunar. Acid ve Hive'daki işlemler hakkında daha fazla bilgi için bkz. Hive İşlemleri. Hive ayrıca Apache Ranger aracılığıyla ayrıntılı güvenlik denetimleri de sunar ve düşük gecikme süresine sahip analitik işlem (LLAP) Apache Spark.

Apache Spark, veri akışı özellikleri veren yapılandırılmış bir Akış API'sini Apache Hive. HDInsight 4.0'dan itibaren Apache Spark 2.3.1 ve Apache Hive 3.1.0'da ayrı meta veri deposu vardır. Ayrı meta veri deposu, birlikte çalışabilirliği zorlaştırebilir. Bu Hive Warehouse Connector Spark ve Hive'ın birlikte kullanımını kolaylaştırır. HWC kitaplığı LLAP daemon'larından Spark yürütücülerine paralel olarak veri yükler. Bu işlem, Spark'tan Hive'a standart JDBC bağlantısından daha verimli ve uyarlanabilir hale getirir.

hive warehouse bağlayıcısı mimarisi

Hive Warehouse Connector tarafından desteklenen Hive Warehouse Connector:

  • Bir tabloyu açıklama
  • ORC biçimli veriler için tablo oluşturma
  • Hive verilerini seçme ve bir veri çerçevesini alma
  • Toplu işteki bir veri çerçevesini Hive 'e yazma
  • Hive güncelleştirme ekstresi yürütülüyor
  • Hive 'den tablo verilerini okuma, Spark 'ta dönüştürme ve yeni bir Hive tablosuna yazma
  • HiveStreaming kullanarak Hive 'e veri çerçevesi veya Spark akışı yazma

Hive ambar Bağlayıcısı kurulumu

Önemli

  • Spark 2,4 Kurumsal Güvenlik Paketi kümelerinde yüklü olan HiveServer2 Interactive örneği, Hive ambarı Bağlayıcısı ile kullanım için desteklenmez. Bunun yerine, HiveServer2 etkileşimli iş yüklerinizi barındırmak için ayrı bir HiveServer2 Interactive kümesi yapılandırmanız gerekir. Tek bir Spark 2,4 kümesinden yararlanan bir Hive ambar Bağlayıcısı yapılandırması desteklenmez.
  • Hive ambar Bağlayıcısı (HWC) kitaplığı, Iş yükü yönetimi (WLM) özelliğinin etkin olduğu etkileşimli sorgu kümeleriyle birlikte kullanılmak üzere desteklenmez.
    Yalnızca Spark iş yüklerine sahip olduğunuz ve HWC kitaplığını kullanmak istediğiniz bir senaryoda, etkileşimli sorgu kümesinde Iş yükü yönetimi özelliğinin etkin olmadığından emin olun ( hive.server2.tez.interactive.queue yapılandırma Hive configs içinde ayarlanmadı).
    Hem Spark iş yüklerinin (HWC) hem de LLAP yerel iş yükünün bulunduğu bir senaryoda, paylaşılan meta veri tabanı ile iki ayrı etkileşimli sorgu kümesi oluşturmanız gerekir. WLM özelliğinin gerekli olması ve yalnızca WLM özelliğinin yapılandırılmadığı iş yükü için diğer kümelerinizde, yerel LLAP iş yükleri için bir küme. Yalnızca bir kümede etkinleştirilmiş olsa bile, her iki kümeden da WLM kaynak planlarını görüntüleyebileceğinizi unutmayın. WLM özelliğinin devre dışı bırakıldığı kümedeki kaynak planlarında herhangi bir değişiklik yapmayın çünkü bu, diğer kümedeki WLM işlevselliğini etkileyebilir.

Hive ambarı Bağlayıcısı Spark ve etkileşimli sorgu iş yükleri için ayrı kümeler gerektirir. Bu kümeleri Azure HDInsight 'ta ayarlamak için aşağıdaki adımları izleyin.

Küme oluşturma

  1. Depolama hesabı ve özel bir Azure sanal ağı ile bir HDInsight Spark 4,0 kümesi oluşturun. Azure sanal ağına küme oluşturma hakkında daha fazla bilgi için bkz. HDInsight'ı mevcut bir sanal ağa ekleme.

  2. Spark kümesiyle aynı depolama Interactive Query Azure sanal ağına sahip bir HDInsight Interactive Query (LLAP) 4.0 kümesi oluşturun.

HWC ayarlarını yapılandırma

Ön bilgileri toplama

  1. Bir web tarayıcısında https://LLAPCLUSTERNAME.azurehdinsight.net/#/main/services/HIVE llAPCLUSTERNAME ifadesinin kümenizin adı olduğu Interactive Query gidin.

  2. Summary > HiveServer2 Interactive JDBC URL'sini seçin ve değeri not edin. Değer aşağıdakine benzer olabilir: 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. Yapılandırmalar Gelişmiş > > hive-site > hive.zookeeper.quorum'a gidin ve değeri not edin. Değer aşağıdakine benzer olabilir: <zookeepername1>.rekufuk2y2cezcbowjkbwfnyvd.bx.internal.cloudapp.net:2181,<zookeepername2>.rekufuk2y2cezcbowjkbwfnyvd.bx.internal.cloudapp.net:2181,<zookeepername3>.rekufuk2y2cezcbowjkbwfnyvd.bx.internal.cloudapp.net:2181 .

  4. Configs Advanced > > General > hive.metastore.uris dosyasına gidin ve değeri not edin. Değer aşağıdakine benzer olabilir: thrift://iqgiro.rekufuk2y2cezcbowjkbwfnyvd.bx.internal.cloudapp.net:9083,thrift://hn*.rekufuk2y2cezcbowjkbwfnyvd.bx.internal.cloudapp.net:9083 .

  5. Yapılandırmalar Gelişmiş > > hive-interactive-site > hive.llap.daemon.service.hosts'a gidin ve değeri not edin. Değer aşağıdakine benzer olabilir: @llap0 .

Spark kümesi ayarlarını yapılandırma

  1. Bir web tarayıcısında https://CLUSTERNAME.azurehdinsight.net/#/main/services/SPARK2/configs CLUSTERNAME'in kümenizin adı olduğu Apache Spark gidin.

  2. Özel spark2-defaults'i genişletin.

    Apache Ambari Spark2 yapılandırması

  3. Aşağıdaki yapılandırmaları eklemek için Özellik Ekle... öğesini seçin:

    Yapılandırma Değer
    spark.datasource.hive.warehouse.load.staging.dir wasbs://STORAGE_CONTAINER_NAME@STORAGE_ACCOUNT_NAME.blob.core.windows.net/tmp.
    Uygun bir HDFS uyumlu hazırlama dizinine ayarlayın. İki farklı kümeniz varsa hazırlama dizini, HiveServer2'nin erişime sahip olması için LLAP kümesi depolama hesabının hazırlama dizininde bir klasör olmalıdır. STORAGE_ACCOUNT_NAMEKüme tarafından kullanılan depolama hesabının adıyla ve STORAGE_CONTAINER_NAME depolama kapsayıcısının adıyla değiştirin.
    spark.sql.hive.hiveserver2.jdbc.url HiveServer2 ıNTERACTIVE JDBC URL 'sinden daha önce edindiğiniz değer
    spark.datasource.hive.warehouse.metastoreUri Daha önce Hive. metaser. Uri'lerden edindiğiniz değer.
    spark.security.credentials.hiveserver2.enabled true YARN küme modu ve false Yarn istemci modu için.
    spark.hadoop.hive.zookeeper.quorum Daha önce Hive. Zookeeper. Quorum öğesinden edindiğiniz değer.
    spark.hadoop.hive.llap.daemon.service.hosts Daha önce Hive. LLAP. Daemon. Service. konaklarından edindiğiniz değer.
  4. Değişiklikleri kaydedin ve etkilenen tüm bileşenleri yeniden başlatın.

Kurumsal Güvenlik Paketi (ESP) kümeleri için HWC 'yi yapılandırma

Kurumsal Güvenlik Paketi (ESP), Azure HDInsight 'ta Apache Hadoop kümelerine yönelik Active Directory tabanlı kimlik doğrulaması, çoklu Kullanıcı desteği ve rol tabanlı erişim denetimi gibi kurumsal düzeyde yetenekler sağlar. ESP hakkında daha fazla bilgi için bkz. HDInsight 'ta kurumsal güvenlik paketi kullanma.

Önceki bölümde bahsedilen yapılandırmalardan ayrı olarak, ESP kümelerinde HWC kullanmak için aşağıdaki yapılandırmayı ekleyin.

  1. Spark kümesinin ambarı Web kullanıcı arabiriminden Spark2 > configs > Custom Spark2-Defaults dizinine gidin.

  2. Aşağıdaki özelliği güncelleştirin.

    Yapılandırma Değer
    spark.sql.hive.hiveserver2.jdbc.url.principal hive/<llap-headnode>@<AAD-Domain>
    • Bir Web tarayıcısından, CLUSTERNAME öğesine gidin ve https://CLUSTERNAME.azurehdinsight.net/#/main/services/HIVE/summary etkileşimli sorgu kümenizin adıdır. HiveServer2 Interactive seçeneğine tıklayın. Ekran görüntüsünde gösterildiği gibi LLAP 'nin çalıştığı baş düğümün tam etki alanı adını (FQDN) görürsünüz. <llap-headnode>Bu değerle değiştirin.

      Hive ambar Bağlayıcısı baş düğümü

    • Etkileşimli sorgu kümenize bağlanmak için SSH komutunu kullanın. default_realmDosyadaki parametreyi bulun /etc/krb5.conf . değerini <AAD-DOMAIN> bu değerle büyük harf dizesi olarak değiştirin; aksi takdirde kimlik bilgisi bulunmayacaktır.

      hive warehouse bağlayıcısı AAD Etki Alanı

    • Örneğin, hive/hn*.mjry42ikpruuxgs2qy2kpg4q5e.cx.internal.cloudapp.net@PKRSRVUQVMAE6J85.D2.INTERNAL.CLOUDAPP.NET .

  3. Değişiklikleri kaydedin ve bileşenleri gerektiğinde yeniden başlatın.

Hive Warehouse Connector kullanımı

Interactive Query kümenize bağlanmak ve Hive Warehouse Connector kullanarak sorgu yürütmek için birkaç farklı yöntem Hive Warehouse Connector. Desteklenen yöntemler aşağıdaki araçları içerir:

Spark'tan HWC'ye bağlanmak için bazı örnekler aşağıda verilmiştir.

Spark-shell

  1. Kümenize bağlanmak için ssh Apache Spark kullanın. CLUSTERNAME'i kümenizin adıyla değiştirerek aşağıdaki komutu düzenleyin ve ardından komutu girin:

    ssh sshuser@CLUSTERNAME-ssh.azurehdinsight.net
    
  2. SSH oturumunuzdan aşağıdaki komutu yürütarak sürümü not hive-warehouse-connector-assembly edin:

    ls /usr/hdp/current/hive_warehouse_connector
    
  3. Aşağıdaki kodu yukarıda tanımlanan hive-warehouse-connector-assembly sürümle düzenleyin. Ardından spark kabuğunu başlatmak için komutunu yürütün:

    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. Spark kabuğu başlatıldıktan sonra Hive Warehouse Connector aşağıdaki komutlar kullanılarak bir örnek başlatabilirsiniz:

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

Spark-submit

Scala/java kodunu derlemek için derleme jar kodundaki bağımlılıklarla birlikte aşağıdaki komutu kullanarak bir Spark uygulaması başlatabilirsiniz. <VERSION>, ve değerlerini gerçek <APP_JAR_PATH> değerlerle değiştirin.

  • YARN Istemci modu

    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 küme modu

    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
    

Python için aşağıdaki yapılandırmayı da ekleyin.

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

Kurumsal Güvenlik Paketi (ESP) kümelerinde sorguları çalıştırma

kinitSpark-Shell veya Spark-Gönder ' i başlatmadan önce kullanın. Kullanıcı adını kümeye erişim izinleri olan bir etki alanı hesabının adıyla değiştirin, ardından aşağıdaki komutu yürütün:

kinit USERNAME

Spark ESP kümelerinde verilerin güvenliğini sağlama

  1. demoAşağıdaki komutları girerek bazı örnek verilerle tablo oluşturun:

    create table demo (name string);
    INSERT INTO demo VALUES ('HDinsight');
    INSERT INTO demo VALUES ('Microsoft');
    INSERT INTO demo VALUES ('InteractiveQuery');
    
  2. Aşağıdaki komutla tablonun içeriğini görüntüleyin. İlkeyi uygulamadan önce, demo tablo tam sütunu gösterir.

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

    Ranger ilkesini uygulamadan önce demo tablosu

  3. Sütunun yalnızca son dört karakterini gösteren bir sütun maskeleme ilkesi uygulayın.

    1. Adresindeki Ranger Yönetici Kullanıcı arabirimine gidin https://LLAPCLUSTERNAME.azurehdinsight.net/ranger/ .

    2. Hive altındaki kümeniz için Hive hizmetine tıklayın. Ranger Service Manager

    3. Maskeleme sekmesine tıklayın ve ardından Yeni ilke ekleyin

      Hive ambar Bağlayıcısı Ranger Hive ilke listesi

    4. İstenen bir ilke adı belirtin. Veritabanı seçin: varsayılan, Hive tablosu: demo, Hive sütunu: ad, Kullanıcı: Rsadmin2, erişim türleri: Select ve kısmi maske: maskeleme seç seçenek menüsünden son 4 ' ü göster. Ekle'ye tıklayın. ilke oluştur

  4. Tablonun içeriğini yeniden görüntüleme. Ranger ilkesi uygulanarak sütunun yalnızca son dört karakteri görebiliriz.

    Ranger ilkesi uygulamadan sonra demo tablosu

Sonraki adımlar