تكامل موصل Hive Warehouse مع Apache Zeppelin على Azure HDInsight
تشمل أنظمة مجموعات HDInsight Spark دفاتر Apache Zeppelin مع مترجمين فوريين مختلفين. في هذه المقالة، نركز فقط على مترجم Livy للوصول إلى جداول Hive من Spark باستخدام Hive Warehouse الاتصال or.
إشعار
تحتوي هذه المقالة على مراجع لمصطلح لم تعد Microsoft تستخدمه. عند إزالة المصطلح من البرنامج، بالتالي سنزيله من هذه المقالة.
المتطلب الأساسي
أكمل خطوات إعداد موصل Hive Warehouse.
الشروع في العمل
استخدم الأمر ssh للاتصال بنظام مجموعة Apache Spark الخاص بك. قم بتحرير الأمر التالي عن طريق استبدال CLUSTERNAME باسم نظام المجموعة الخاص بك، ثم أدخل الأمر :
ssh sshuser@CLUSTERNAME-ssh.azurehdinsight.net
من جلسة عمل ssh الخاصة بك، نفذ الأمر التالي لملاحظة الإصدارات الخاصة بـ
hive-warehouse-connector-assembly
وpyspark_hwc
:ls /usr/hdp/current/hive_warehouse_connector
حفظ الإخراج لاستخدامه في وقت لاحق عند تكوين Apache Zeppelin.
تكوين Livy
التكوينات التالية مطلوبة للوصول إلى جداول الخلية من Zeppelin مع مترجم Livy.
نظام مجموعة استعلام تفاعلي
من مستعرض ويب، انتقل إلى
https://LLAPCLUSTERNAME.azurehdinsight.net/#/main/services/HDFS/configs
حيث LLAPCLUSTERNAME هو اسم مجموعة الاستعلام التفاعلي.انتقل إلى موقع مخصص >بذاكرة أساسية. حدد Add Property... لإضافة التكوينات التالية:
التكوين القيمة hadoop.proxyuser.livy.groups * hadoop.proxyuser.livy.hosts * احفظ التغييرات وأعد تشغيل جميع المكونات المتأثرة.
نظام مجموعة Spark
من متصفح ويب، انتقل إلى
https://CLUSTERNAME.azurehdinsight.net/#/main/services/SPARK2/configs
CLUSTERNAME مكان اسم نظام مجموعة Apache Spark.توسيع Custom livy2-conf. حدد إضافة خاصية... لإضافة التكوين التالي:
التكوين القيمة livy.file.local-dir-whitelist /usr/hdp/current/hive_warehouse_connector/ احفظ التغييرات وأعد تشغيل جميع المكونات المتأثرة.
تكوين مترجم Livy في واجهة مستخدم Zeppelin (نظام مجموعة Spark)
من أي مستعرض ويب، انتقل إلى
https://CLUSTERNAME.azurehdinsight.net/zeppelin/#/interpreter
، حيث سيكونCLUSTERNAME
مكان اسم نظام مجموعة Apache Spark.انتقل إلى livy2.
إضافة التكوينات التالية:
التكوين القيمة livy.spark.hadoop.hive.llap.daemon.service.hosts @llap0 livy.spark.security.credentials.hiveserver2.enabled صحيح livy.spark.sql.hive.llap صحيح livy.spark.yarn.security.credentials.hiveserver2.enabled صحيح livy.superusers Livy, zeppelin livy.spark.jars file:///usr/hdp/current/hive_warehouse_connector/hive-warehouse-connector-assembly-VERSION.jar
.
استبدل VERSION بالقيمة التي حصلت عليها من بدء الاستخدام، في وقت سابق.livy.spark.submit.pyFiles file:///usr/hdp/current/hive_warehouse_connector/pyspark_hwc-VERSION.zip
.
استبدل VERSION بالقيمة التي حصلت عليها من بدء الاستخدام، في وقت سابق.livy.spark.sql.hive.hiveserver2.jdbc.url قم بتعيينه إلى عنوان موقع ويب لـHiveServer2 Interactive JDBC من نظام مجموعة Interactive Query. spark.security.credentials.hiveserver2.enabled صحيح بالنسبة لأنظمة مجموعات ESP فقط، أضف التكوين التالي:
التكوين القيمة livy.spark.sql.hive.hiveserver2.jdbc.url.principal hive/_HOST@<AAD-Domain>
استخدم الأمر ssh للاتصال بنظام مجموعة Interactive Query الخاص بك. ابحث عن المعلمة
default_realm
في ملف/etc/krb5.conf
. استبدل<AAD-DOMAIN>
بهذه القيمة كسلسلة كبيرة، وإلا يتعذر العثور على بيانات الاعتماد.
حفظ التغييرات وإعادة تشغيل مترجم Livy.
إذا لم يكن يمكن الوصول إلى مترجم Livy، فقم بتعديل ملف shiro.ini
الموجود داخل مكون Zeppelin في Ambari. للمزيد من المعلومات، راجع تكوين أمان Apache Zeppelin.
تشغيل الاستعلامات في Zeppelin
تشغيل دفتر ملاحظات Zeppelin باستخدام مترجم Livy وتنفيذ ما يلي
%livy2
import com.hortonworks.hwc.HiveWarehouseSession
import com.hortonworks.hwc.HiveWarehouseSession._
import org.apache.spark.sql.SaveMode
# Initialize the hive context
val hive = HiveWarehouseSession.session(spark).build()
# Create a database
hive.createDatabase("hwc_db",true)
hive.setDatabase("hwc_db")
# Create a Hive table
hive.createTable("testers").ifNotExists().column("id", "bigint").column("name", "string").create()
val dataDF = Seq( (1, "foo"), (2, "bar"), (8, "john")).toDF("id", "name")
# Validate writes to the table
dataDF.write.format("com.hortonworks.spark.sql.hive.llap.HiveWarehouseConnector").mode("append").option("table", "hwc_db.testers").save()
# Validate reads
hive.executeQuery("select * from testers").show()