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 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.queueyapı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
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.
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
Bir web tarayıcısında
https://LLAPCLUSTERNAME.azurehdinsight.net/#/main/services/HIVEllAPCLUSTERNAME ifadesinin kümenizin adı olduğu Interactive Query gidin.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.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.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.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
Bir web tarayıcısında
https://CLUSTERNAME.azurehdinsight.net/#/main/services/SPARK2/configsCLUSTERNAME'in kümenizin adı olduğu Apache Spark gidin.Özel spark2-defaults'i genişletin.
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.dirwasbs://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 veSTORAGE_CONTAINER_NAMEdepolama kapsayıcısının adıyla değiştirin.spark.sql.hive.hiveserver2.jdbc.urlHiveServer2 ıNTERACTIVE JDBC URL 'sinden daha önce edindiğiniz değer spark.datasource.hive.warehouse.metastoreUriDaha önce Hive. metaser. Uri'lerden edindiğiniz değer. spark.security.credentials.hiveserver2.enabledtrueYARN küme modu vefalseYarn istemci modu için.spark.hadoop.hive.zookeeper.quorumDaha önce Hive. Zookeeper. Quorum öğesinden edindiğiniz değer. spark.hadoop.hive.llap.daemon.service.hostsDaha önce Hive. LLAP. Daemon. Service. konaklarından edindiğiniz değer. 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.
Spark kümesinin ambarı Web kullanıcı arabiriminden Spark2 > configs > Custom Spark2-Defaults dizinine gidin.
Aşağıdaki özelliği güncelleştirin.
Yapılandırma Değer spark.sql.hive.hiveserver2.jdbc.url.principalhive/<llap-headnode>@<AAD-Domain>Bir Web tarayıcısından, CLUSTERNAME öğesine gidin ve
https://CLUSTERNAME.azurehdinsight.net/#/main/services/HIVE/summaryetkileş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.
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.
Örneğin,
hive/hn*.mjry42ikpruuxgs2qy2kpg4q5e.cx.internal.cloudapp.net@PKRSRVUQVMAE6J85.D2.INTERNAL.CLOUDAPP.NET.
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
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.netSSH oturumunuzdan aşağıdaki komutu yürütarak sürümü not
hive-warehouse-connector-assemblyedin:ls /usr/hdp/current/hive_warehouse_connectorAşağıdaki kodu yukarıda tanımlanan
hive-warehouse-connector-assemblysü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=falseSpark 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.jarYARN 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
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');Aşağıdaki komutla tablonun içeriğini görüntüleyin. İlkeyi uygulamadan önce,
demotablo tam sütunu gösterir.hive.executeQuery("SELECT * FROM demo").show()
Sütunun yalnızca son dört karakterini gösteren bir sütun maskeleme ilkesi uygulayın.
Adresindeki Ranger Yönetici Kullanıcı arabirimine gidin
https://LLAPCLUSTERNAME.azurehdinsight.net/ranger/.Hive altındaki kümeniz için Hive hizmetine tıklayın.
Maskeleme sekmesine tıklayın ve ardından Yeni ilke ekleyin
İ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.
Tablonun içeriğini yeniden görüntüleme. Ranger ilkesi uygulanarak sütunun yalnızca son dört karakteri görebiliriz.