استخدام دفاتر ملاحظات Apache Zeppelin مع نظام مجموعة Apache Spark على Azure HDInsight

تشتمل أنظمة مجموعة HDInsight Spark على دفاتر ملاحظات Apache Zeppelin. استخدم دفاتر الملاحظات لتشغيل وظائف Apache Spark. في هذه المقالة، سوف تتعلم كيفية استخدام دفتر ملاحظات Zeppelin على نظام مجموعة HDInsight.

المتطلبات الأساسية

تشغيل دفتر ملاحظات Apache Zeppelin

  1. من صفحة النظرة العامة لنظام مجموعة Spark، حدد دفتر ملاحظات Zeppelin من لوحات معلومات نظام المجموعة. أدخل بيانات اعتماد المسؤول لنظام المجموعة.

    إشعار

    يمكنك أيضًا الوصول إلى دفتر ملاحظات Zeppelin لنظام المجموعة لديك عن طريق فتح عنوان URL التالي في المستعرض لديك. استبدل CLUSTERNAME باسم مجموعتك:

    https://CLUSTERNAME.azurehdinsight.net/zeppelin

  2. قم بإنشاء دفتر ملاحظات جديد. من جزء الرأس، انتقل إلى دفتر الملاحظات>إنشاء ملاحظة جديدة.

    Create a new Zeppelin notebook.

    أدخل اسمًا لدفتر الملاحظات، ثم حدد إنشاء ملاحظة.

  3. تأكد من أن رأس دفتر الملاحظات يظهر حالة متصلة. يشار إليها بنقطة خضراء في الزاوية العلوية اليمنى.

    Zeppelin notebook status.

  4. تحميل نموذج البيانات في جدول مؤقت. عند إنشاء نظام مجموعة Spark في HDInsight، يتم نسخ نموذج ملف البيانات hvac.csv، إلى حساب التخزين المقترن ضمن \HdiSamples\SensorSampleData\hvac.

    في الفقرة الفارغة التي يتم إنشاؤها بشكل افتراضي في دفتر الملاحظات الجديد، قم بلصق القصاصة البرمجية التالية.

    %livy2.spark
    //The above magic instructs Zeppelin to use the Livy Scala interpreter
    
    // Create an RDD using the default Spark context, sc
    val hvacText = sc.textFile("wasbs:///HdiSamples/HdiSamples/SensorSampleData/hvac/HVAC.csv")
    
    // Define a schema
    case class Hvac(date: String, time: String, targettemp: Integer, actualtemp: Integer, buildingID: String)
    
    // Map the values in the .csv file to the schema
    val hvac = hvacText.map(s => s.split(",")).filter(s => s(0) != "Date").map(
        s => Hvac(s(0),
                s(1),
                s(2).toInt,
                s(3).toInt,
                s(6)
        )
    ).toDF()
    
    // Register as a temporary table called "hvac"
    hvac.registerTempTable("hvac")
    

    اضغط SHIFT + ENTER أو حدد الزر تشغيل للفقرة لتشغيل القصاصة البرمجية. يجب أن تتقدم الحالة في الزاوية اليمنى من الفقرة من READY أو PENDING أو RUNNING إلى FINISHED. يظهر الناتج في أسفل نفس الفقرة. لقطة شاشة تبدو مثل الصورة التالية:

    Create a temporary table from raw data.

    يمكنك أيضًا توفير عنوان لكل فقرة. من الزاوية اليمنى للفقرة، حدد رمز الإعدادات (sprocket)، ثم حدد إظهار العنوان.

    إشعار

    لا يتم اعتماد مترجم %spark2 في دفاتر ملاحظات Zeppelin عبر جميع إصدارات HDInsight، ولن يتم اعتماد مترجم %sh من الإصدار HDInsight 4.0 وما بعده.

  5. يمكنك الآن تشغيل عبارات Spark SQL على جدول hvac. الصق الاستعلام التالي في فقرة جديدة. يسترد الاستعلام معرف المبنى. أيضًا الفرق بين درجة الحرارة المستهدفة ودرجات الحرارة الفعلية لكل مبنى في تاريخ معين. اضغط SHIFT+ ENTER.

    %sql
    select buildingID, (targettemp - actualtemp) as temp_diff, date from hvac where date = "6/1/13"
    

    تخبر عبارة %sql في البداية دفتر الملاحظات باستخدام مترجم Livy Scala.

  6. حدد رمز مخطط الشريط لتغيير العرض. تظهر الإعدادات بعد تحديد مخطط شريطي، تسمح لك باختيار المفاتيح والقيم. تعرض لقطة الشاشة التالية الناتج.

    Run a Spark SQL statement using the notebook1.

  7. يمكنك أيضًا تشغيل عبارات Spark SQL باستخدام متغيرات في الاستعلام. توضح القصاصة البرمجية التالية كيفية تعريف متغير، Temp، في الاستعلام مع القيم المحتملة التي تريد الاستعلام عنها. عند تشغيل الاستعلام لأول مرة، يتم ملء قائمة منسدلة تلقائيًا بالقيم التي حددتها للمتغير.

    %sql  
    select buildingID, date, targettemp, (targettemp - actualtemp) as temp_diff from hvac where targettemp > "${Temp = 65,65|75|85}"
    

    الصق القصاصة البرمجية التالية في فقرة جديدة، ثم اضغط على SHIFT + ENTER . ثم حدد 65 من القائمة المنسدلة Temp.

  8. حدد رمز مخطط الشريط لتغيير العرض. ثم حدد الإعدادات، قم بإجراء التغييرات التالية:

    • المجموعات: أضف targettemp.

    • القيم: 1. قم بإزالة التاريخ. 2. أضف temp_diff. 3. قم بتغيير أداة التجميع من SUM إلى AVG.

      تعرض لقطة الشاشة التالية الناتج.

      Run a Spark SQL statement using the notebook2.

كيف يمكنني استخدام الحزم الخارجية مع دفتر الملاحظات؟

يمكن لدفتر ملاحظات Zeppelin في نظام مجموعة Apache Spark على HDInsight استخدام الحزم الخارجية التي يساهم بها المجتمع والتي لم يتم تضمينها في نظام المجموعة. ابحث في مستودع Maven عن القائمة الكاملة للحزم المتوفرة. يمكنك أيضاً الحصول على قائمة بالحزم المتاحة من مصادر أخرى. على سبيل المثال، تتوفر قائمة كاملة بالحزم التي يساهم بها المجتمع في Spark Packages.

في هذه المقالة، سترى كيفية استخدام حزمة spark-csv مع دفتر ملاحظات Jupyter.

  1. افتح إعدادات المترجم الفوري. من أعلى الزاوية اليمنى، حدد اسم المستخدم الذي قام بتسجيل الدخول، ثم حدد المترجم الفوري.

    Launch interpreter.

  2. مرر إلى livy2، ثم حدد تحرير.

    Change interpreter settings1.

  3. انتقل إلى المفتاح livy.spark.jars.packages، ثم قم بتعيين قيمته بالتنسيق group:id:version. لذا، إذا كنت تريد استخدام حزمة spark-csv، يجب تعيين قيمة المفتاح إلى com.databricks:spark-csv_2.10:1.4.0.

    Change interpreter settings2.

    حدد حفظ ثم موافق لإعادة تشغيل المترجم الفوري Livy.

  4. إذا كنت تريد أن تفهم كيفية الوصول إلى قيمة المفتاح الذي تم إدخاله أعلاه، فإليك كيفية ذلك.

    أ. حدد موقع الحزمة في Maven Repository. بالنسبة لهذه المقالة، استخدمنا حزمة spark-csv.

    ب. من المستودع، اجمع قيم GroupId وArtifactId وVersion.

    Use external packages with Jupyter Notebook.

    جـ. قم بتسلسل القيم الثلاثة، مفصولة بنقطتين (:).

    com.databricks:spark-csv_2.10:1.4.0
    

أين يتم حفظ دفاتر ملاحظات Zeppelin؟

يتم حفظ دفاتر ملاحظات Zeppelin إلى عقد رأس نظام المجموعة. لذلك، إذا قمت بحذف نظام المجموعة، فسيتم حذف دفاتر الملاحظات أيضًا. إذا كنت تريد الاحتفاظ بدفاتر ملاحظاتك لاستخدامها لاحقًا على أنظمة مجموعات أخرى، يجب عليك تصديرها بعد الانتهاء من تشغيل المهام. لتصدير دفتر ملاحظات، حدد رمز التصدير كما هو موضح في الصورة أدناه.

Download notebook.

يحفظ هذا الإجراء دفتر الملاحظات كملف JSON في موقع التنزيل.

إشعار

  • في HDI 4.0، مسار دليل دفتر ملاحظات zeppelin هو، /usr/hdp/<version>/zeppelin/notebook/<notebook_session_id>/

    مثل. /usr/hdp/4.1.17.10/zeppelin/2JMC9BZ8X/

    حيث كما هو الحال في HDI 5.0 وما فوق هذا المسار مختلف /usr/hdp/<version>/zeppelin/notebook/<Kernel_name>/

    مثل. /usr/hdp/5.1.4.5/zeppelin/notebook/Scala/

  • يختلف اسم الملف المخزن في HDI 5.0. يتم تخزينه ك <notebook_name>_<sessionid>.zpln

    مثل. testzeppelin_2JJK53XQA.zpln

    في HDI 4.0، يتم تخزين اسم الملف فقط note.json ضمن دليل session_id.

    مثل. /2JMC9BZ8X/note.json

  • يحفظ HDI Zeppelin دائما دفتر الملاحظات في المسار /usr/hdp/<version>/zeppelin/notebook/ في قرص محلي hn0.

    إذا كنت تريد أن يكون دفتر الملاحظات متوفرا حتى بعد حذف نظام المجموعة ، يمكنك محاولة استخدام تخزين ملفات azure (باستخدام بروتوكول SMB) وربطه بالمسار المحلي. لمزيد من التفاصيل، راجع تحميل مشاركة ملف SMB Azure على Linux

    بعد تحميله، يمكنك تعديل تكوين zeppelin zeppelin.notebook.dir إلى المسار المثبت في واجهة مستخدم ambari.

  • لا ينصح بتخزين SMB fileshare كمخزن GitNotebookRepo للإصدار 0.10.1 من zeppelin

استخدام Shiro لتكوين الوصول إلى مترجمي Zeppelin الفوريين في أنظمة مجموعات حزمة أمان المؤسسة (ESP)

كما هو مذكور أعلاه، فإن المترجم الفوري %shغير مدعوم في الإصدار HDInsight 4.0 وما بعده. علاوة على ذلك، بما أن المترجم الفوري %sh يقدم مشكلات أمان محتملة، مثل keytabs الخاصة بالوصول باستخدام أوامر shell، فقد تمت إزالته من أنظمة مجموعات HDInsight 3.6 ESP أيضًا. يعني ذلك أن المترجم الفوري %sh غير متوفر عند النقر فوق إنشاء ملاحظة جديدة أو في واجهة مستخدم المترجم الفوري بشكل افتراضي.

يمكن لمستخدمي المجال المميز استخدام ملف Shiro.ini للتحكم في الوصول إلى واجهة مستخدم المترجم الفوري. يمكن لهؤلاء المستخدمين فقط إنشاء %sh مترجمين فوريين جدد وتعيين الأذونات على كل مترجم %sh جديد. للتحكم في الوصول باستخدام shiro.ini الملف، استخدم الخطوات التالية:

  1. قم بتعريف دور جديد باستخدام اسم مجموعة مجال موجود. في المثال التالي، يعد adminGroupName مجموعة من المستخدمين المميزين في AAD. لا تستخدم أحرفًا خاصة أو مسافات بيضاء في اسم المجموعة. الأحرف بعد = تمنح الأذونات لهذا الدور. يعني * أن المجموعة لديها أذونات كاملة.

    [roles]
    adminGroupName = *
    
  2. أضف الدور الجديد للوصول إلى مترجمي Zeppelin الفوريين. في المثال التالي، يتم منح كافة المستخدمين في adminGroupName الوصول إلى مترجمي Zeppelin الفوريين، ويمكن إنشاء مترجمين فوريين جدد. يمكنك وضع أدوار متعددة بين قوسين في roles[]، مع الفصل بينها بفواصل. ثم، يمكن للمستخدمين الذين لديهم الأذونات اللازمة الوصول إلى مترجمي Zeppelin الفوريين.

    [urls]
    /api/interpreter/** = authc, roles[adminGroupName]
    

مثال shiro.ini لمجموعات مجالات متعددة:

[main]
anyofrolesuser = org.apache.zeppelin.utils.AnyOfRolesUserAuthorizationFilter

[roles]
group1 = *
group2 = *
group3 = *

[urls]
/api/interpreter/** = authc, anyofrolesuser[group1, group2, group3]

إدارة جلسة ليفي Livy

تنشئ أول فقرة تعليمات برمجية في دفتر ملاحظات Zeppelin جلسة Livy جديدة في نظام مجموعتك. تتم مشاركة هذه الجلسة عبر كافة دفاتر ملاحظات Zeppelin التي تقوم بإنشائها لاحقاً. إذا تم إنهاء جلسة Livy لأي سبب من الأسباب، فلن يتم تشغيل الوظائف من دفتر ملاحظات Zeppelin.

في مثل هذه الحالة، يجب عليك القيام بالخطوات التالية قبل أن تتمكن من بدء تشغيل المهام من دفتر ملاحظات Zeppelin.

  1. أعد تشغيل المترجم Livy من دفتر ملاحظات Zeppelin. للقيام بذلك، افتح إعدادات المترجم عن طريق تحديد اسم المستخدم المسجل من أعلى اليسار، ثم حدد المترجم الفوري.

    Launch interpreter.

  2. انتقل إلى livy2، ثم حدد إعادة التشغيل.

    Restart the Livy interpreter.

  3. تشغيل خلية تعليمات برمجية من دفتر ملاحظات Zeppelin موجود. تنشئ هذه التعليمة البرمجية جلسة عمل Livy جديدة في نظام مجموعة HDInsight.

معلومات عامة

التحقق من صحة الخدمة

للتحقق من صحة الخدمة من Ambari، انتقل إلى https://CLUSTERNAME.azurehdinsight.net/#/main/services/ZEPPELIN/summary حيث CLUSTERNAME هو اسم نظام المجموعة لديك.

للتحقق من صحة الخدمة من سطر الأوامر، قم بتوجيه SSH إلى عقدة الرأس. بدِّل المستخدم إلى zeppelin باستخدام الأمر sudo su zeppelin. أوامر الحالة:

الأمر ‏‏الوصف
/usr/hdp/current/zeppelin-server/bin/zeppelin-daemon.sh status حالة الخدمة.
/usr/hdp/current/zeppelin-server/bin/zeppelin-daemon.sh --version إصدار الخدمة.
ps -aux | grep zeppelin تحديد PID.

مواقع السجل

الخدمة المسار
zeppelin-server /usr/hdp/current/zeppelin-server/
سجلات الخادم /var/log/zeppelin
مترجم التكوين، Shiro، site.xml، log4j /usr/hdp/current/zeppelin-server/conf أو /etc/zeppelin/conf
دليل PID /var/run/zeppelin

تمكين تسجيل تتبع الأخطاء

  1. انتقل إلى https://CLUSTERNAME.azurehdinsight.net/#/main/services/ZEPPELIN/summary حيث CLUSTERNAME هو اسم نظام المجموعة لديك.

  2. انتقل إلى CONFIGS>Advanced zeppelin-log4j-properties>log4j_properties_content.

  3. قم بتعديل log4j.appender.dailyfile.Threshold = INFO إلى log4j.appender.dailyfile.Threshold = DEBUG.

  4. أضف log4j.logger.org.apache.zeppelin.realm=DEBUG.

  5. احفظ التغييرات وأعد تشغيل الخدمة.

الخطوات التالية