تشغيل Apache Oozie في مجموعات Azure HDInsight مع حزمة أمان المؤسسات

إن Apache Oozie هو سير عمل ونظام تنسيق يدير مهام Apache Hadoop. يتم تكامل Oozie مع مكدس ذاكرة مؤقتة Hadoop، ويدعم الوظائف التالية:

  • Apache MapReduce
  • Apache Pig
  • Apache Hive
  • Apache Sqoop

يمكنك أيضاً استخدام Oozie لجدولة المهام الخاصة بنظام ما، مثل برامج Java أو البرامج النصية shell.

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

مجموعة نظام Azure HDInsight Hadoop مع حزمة أمان المؤسسات (ESP). راجع تكوين أنظمة مجموعات HDInsight مع ESP.

ملاحظة

للحصول على إرشادات مفصلة حول كيفية استخدام Oozie على المجموعات غير المتضمنة لحزمة أمان المؤسسات، راجع استخدام مهام سير عمل Apache Oozie في Azure HDInsight المستند إلى نظام Linux.

الاتصال بنظام مجموعة ESP

لمزيد من المعلومات حولSecure Shell (SSH)، راجع الاتصال بـ DInsight (Hadoop) باستخدام SSH.

  1. اتصل بنظام مجموعة HDInsight باستخدام SSH:

    ssh [DomainUserName]@<clustername>-ssh.azurehdinsight.net
    
  2. للتحقق من مصادقة Kerberos الناجحة، استخدم الأمر klist. إذا لم يكن الأمر كذلك، فاستخدم kinit لبدء مصادقة Kerberos.

  3. سجّل الدخول إلى بوابة HDInsight لتسجيل رمز OAuth المميز المطلوب للوصول إلى Azure Data Lake Storage:

    curl -I -u [DomainUserName@Domain.com]:[DomainUserPassword] https://<clustername>.azurehdinsight.net
    

    يشير رمز استجابة الحالة 200 OK إلى عملية تسجيل ناجحة. تحقق من اسم المستخدم وكلمة المرور في حالة تلقي رد غير مصرح به، مثل 401.

تعريف سير العمل

تتم كتابة تعريفات سير عمل Oozie بلغة تعريف عملية Apache Hadoop (hPDL). تُعد hPDL هي لغة تعريف عملية XML. اتبع الخطوات التالية لتعريف سير العمل:

  1. إعداد مساحة عمل مستخدم المجال:

    hdfs dfs -mkdir /user/<DomainUser>
    cd /home/<DomainUserPath>
    cp /usr/hdp/<ClusterVersion>/oozie/doc/oozie-examples.tar.gz .
    tar -xvf oozie-examples.tar.gz
    hdfs dfs -put examples /user/<DomainUser>/
    

    استبدال DomainUser باسم مستخدم المجال. استبدال DomainUserPath بمسار الدليل الرئيسي لمستخدم المجال. استبدال ClusterVersion بإصدار النظام الأساسي لبيانات نظام المجموعة.

  2. استخدم العبارة التالية لإنشاء ملف جديد وتحريره:

    nano workflow.xml
    
  3. بعد فتح محرر النانو، أدخل XML التالي كمحتويات الملف:

    <?xml version="1.0" encoding="UTF-8"?>
    <workflow-app xmlns="uri:oozie:workflow:0.4" name="map-reduce-wf">
       <credentials>
          <credential name="metastore_token" type="hcat">
             <property>
                <name>hcat.metastore.uri</name>
                <value>thrift://<active-headnode-name>-<clustername>.<Domain>.com:9083</value>
             </property>
             <property>
                <name>hcat.metastore.principal</name>
                <value>hive/_HOST@<Domain>.COM</value>
             </property>
          </credential>
          <credential name="hs2-creds" type="hive2">
             <property>
                <name>hive2.server.principal</name>
                <value>${jdbcPrincipal}</value>
             </property>
             <property>
                <name>hive2.jdbc.url</name>
                <value>${jdbcURL}</value>
             </property>
          </credential>
       </credentials>
       <start to="mr-test" />
       <action name="mr-test">
          <map-reduce>
             <job-tracker>${jobTracker}</job-tracker>
             <name-node>${nameNode}</name-node>
             <prepare>
                <delete path="${nameNode}/user/${wf:user()}/examples/output-data/mrresult" />
             </prepare>
             <configuration>
                <property>
                   <name>mapred.job.queue.name</name>
                   <value>${queueName}</value>
                </property>
                <property>
                   <name>mapred.mapper.class</name>
                   <value>org.apache.oozie.example.SampleMapper</value>
                </property>
                <property>
                   <name>mapred.reducer.class</name>
                   <value>org.apache.oozie.example.SampleReducer</value>
                </property>
                <property>
                   <name>mapred.map.tasks</name>
                   <value>1</value>
                </property>
                <property>
                   <name>mapred.input.dir</name>
                   <value>/user/${wf:user()}/${examplesRoot}/input-data/text</value>
                </property>
                <property>
                   <name>mapred.output.dir</name>
                   <value>/user/${wf:user()}/${examplesRoot}/output-data/mrresult</value>
                </property>
             </configuration>
          </map-reduce>
          <ok to="myHive2" />
          <error to="fail" />
       </action>
       <action name="myHive2" cred="hs2-creds">
          <hive2 xmlns="uri:oozie:hive2-action:0.2">
             <job-tracker>${jobTracker}</job-tracker>
             <name-node>${nameNode}</name-node>
             <jdbc-url>${jdbcURL}</jdbc-url>
             <script>${hiveScript2}</script>
             <param>hiveOutputDirectory2=${hiveOutputDirectory2}</param>
          </hive2>
          <ok to="myHive" />
          <error to="fail" />
       </action>
       <action name="myHive" cred="metastore_token">
          <hive xmlns="uri:oozie:hive-action:0.2">
             <job-tracker>${jobTracker}</job-tracker>
             <name-node>${nameNode}</name-node>
             <configuration>
                <property>
                   <name>mapred.job.queue.name</name>
                   <value>${queueName}</value>
                </property>
             </configuration>
             <script>${hiveScript1}</script>
             <param>hiveOutputDirectory1=${hiveOutputDirectory1}</param>
          </hive>
          <ok to="end" />
          <error to="fail" />
       </action>
       <kill name="fail">
          <message>Oozie job failed, error message[${wf:errorMessage(wf:lastErrorNode())}]</message>
       </kill>
       <end name="end" />
    </workflow-app>
    
  4. استبدال clustername باسم نظام المجموعة.

  5. لحفظ الملف، حدد Ctrl+X. أدخل Y. ثم حدد إدخال.

    ينقسم سير العمل إلى جزأين:

    • بيانات الاعتماد. يتطلب هذا القسم بيانات الاعتماد المستخدمة لمصادقة إجراءات Oozie:

      يستخدم هذا المثال المصادقة لإجراءات Apache Hive. لمعرفة المزيد، راجع مصادقة الإجراء.

      تسمح خدمة بيانات الاعتماد لإجراءات Oozie بانتحال صفة المستخدم للوصول إلى خدمات Hadoop.

    • Action. يحتوي هذا القسم على ثلاثة إجراءات: تصغير الخريطة، وخادم Apache Hive 2، وخادم Apache Hive 1:

      • يُشغل إجراء تصغير الخريطة نموذج من حزمة Oozie لتصغير الخريطة التي تقوم بإخراج عدد الكلمات المجمعة.

      • يقوم كل من إجراءات خادم Apache Hive 2 وخادم Apache Hive 1 بتشغيل استعلام على نموذج من جدول Apache Hive المتوفر مع HDInsight.

      تستخدم إجراءات Apache Hive بيانات الاعتماد المعرفة في قسم بيانات الاعتماد للمصادقة باستخدام الكلمة الأساسية cred في عنصر الإجراء.

  6. استخدم الأمر التالي لنسخ الملف workflow.xml إلى /user/<domainuser>/examples/apps/map-reduce/workflow.xml:

    hdfs dfs -put workflow.xml /user/<domainuser>/examples/apps/map-reduce/workflow.xml
    
  7. استبدل domainuser باسم المستخدم الخاص بك للنطاق.

تعريف ملف الخصائص لمهمة Oozie

  1. استخدم العبارة التالية لإنشاء ملف جديد لخصائص المهمة وتحريره:

    nano job.properties
    
  2. بعد فتح محرر النانو، استخدم XML التالي كمحتويات الملف:

    nameNode=adl://home
    jobTracker=headnodehost:8050
    queueName=default
    examplesRoot=examples
    oozie.wf.application.path=${nameNode}/user/[domainuser]/examples/apps/map-reduce/workflow.xml
    hiveScript1=${nameNode}/user/${user.name}/countrowshive1.hql
    hiveScript2=${nameNode}/user/${user.name}/countrowshive2.hql
    oozie.use.system.libpath=true
    user.name=[domainuser]
    jdbcPrincipal=hive/<active-headnode-name>.<Domain>.com@<Domain>.COM
    jdbcURL=[jdbcurlvalue]
    hiveOutputDirectory1=${nameNode}/user/${user.name}/hiveresult1
    hiveOutputDirectory2=${nameNode}/user/${user.name}/hiveresult2
    
    • استخدم عنوان URI adl://home للخاصية nameNode إذا كان لديك Azure Data Lake Storage Gen1 كمساحة تخزين نظام المجموعة الأساسية. إذا كنت تستخدم Azure Blob Storage، فقم بالتغيير إلى wasb://home. إذا كنت تستخدم Azure Data Lake Storage Gen2، فقم بالتغيير إلى abfs://home.
    • استبدل domainuser باسم المستخدم الخاص بك للنطاق.
    • استبدل ClusterShortName باسم قصير لنظام المجموعة. على سبيل المثال، إذا كان اسم نظام المجموعة https:// [ مثال للارتباط] sechadoopcontoso.azurehdisnight.net، فإن clustershortname هو الأحرف الستة الأولى من نظام المجموعة: sechad.
    • استبدل jdbcurlvalue بعنوان JDBC URL من تكوين Apache Hive. مثال على ذلك jdbc:hive2://headnodehost:10001/;transportMode=http.
    • لحفظ الملف، حدد Ctrl+X، وأدخل Y، ثم حدد إدخال.

    يجب أن يكون ملف الخصائص هذا موجوداً محلياً عند تشغيل مهام Oozie.

إنشاء برامج نصية مخصصة لـ Apache Hive لمهام Oozie

يمكنك إنشاء اثنين من البرامج النصية لـ Apache Hive لخادمApache Hive 1 وخادم Apache Hive 2 كما هو موضح في الأقسام التالية.

ملف خادم Apache Hive 1

  1. إنشاء ملف وتحريره لإجراءات خادم Apache Hive 1:

    nano countrowshive1.hql
    
  2. إنشاء البرنامج النصي:

    INSERT OVERWRITE DIRECTORY '${hiveOutputDirectory1}'
    ROW FORMAT DELIMITED FIELDS TERMINATED BY ','
    select devicemake from hivesampletable limit 2;
    
  3. حفظ الملف إلى نظام الملفات الموزعة لـ Apache Hadoop (HDFS):

    hdfs dfs -put countrowshive1.hql countrowshive1.hql
    

ملف خادم Apache Hive 2

  1. إنشاء حقل وتحريره لإجراءات خادم Apache Hive 2:

    nano countrowshive2.hql
    
  2. إنشاء البرنامج النصي:

    INSERT OVERWRITE DIRECTORY '${hiveOutputDirectory1}' 
    ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' 
    select devicemodel from hivesampletable limit 2;
    
  3. حفظ الملف إلى HDFS:

    hdfs dfs -put countrowshive2.hql countrowshive2.hql
    

إرسال مهام Oozie

يشبه إرسال مهام Oozie لأنظمة مجموعات حزمة أمان المؤسسات إرسال مهام Oozie في مجموعات غير المتضمنة لحزمة أمان المؤسسات.

لمزيد من المعلومات، راجع استخدام Apache Oozie مع Apache Hadoop لتحديد وتشغيل سير عمل على Azure HDInsight المستند إلى نظام Linux.

نتائج من عملية إرسال مهمة Oozie

يتم تشغيل وظائف Oozie للمستخدم. يعرض كل من Apache Hadoop YARN وسجلات تدقيق Apache Ranger audit المهام التي يجري تشغيلها كمستخدم تم انتحال صفته. يبدو إخراج واجهة سطر الأوامر لمهمة Oozie مثل التعليمات البرمجية التالية:

Job ID : 0000015-180626011240801-oozie-oozi-W
------------------------------------------------------------------------------------------------
Workflow Name : map-reduce-wf
App Path      : adl://home/user/alicetest/examples/apps/map-reduce/wf.xml
Status        : SUCCEEDED
Run           : 0
User          : alicetest
Group         : -
Created       : 2018-06-26 19:25 GMT
Started       : 2018-06-26 19:25 GMT
Last Modified : 2018-06-26 19:30 GMT
Ended         : 2018-06-26 19:30 GMT
CoordAction ID: -

Actions
------------------------------------------------------------------------------------------------
ID                        Status    Ext ID            ExtStatus                 ErrCode
------------------------------------------------------------------------------------------------
0000015-180626011240801-oozie-oozi-W@:start:    OK    -                         OK             -
------------------------------------------------------------------------------------------------
0000015-180626011240801-oozie-oozi-W@mr-test    OK    job_1529975666160_0051    SUCCEEDED      -
------------------------------------------------------------------------------------------------
0000015-180626011240801-oozie-oozi-W@myHive2    OK    job_1529975666160_0053    SUCCEEDED      -
------------------------------------------------------------------------------------------------
0000015-180626011240801-oozie-oozi-W@myHive    OK     job_1529975666160_0055    SUCCEEDED      -
------------------------------------------------------------------------------------------------
0000015-180626011240801-oozie-oozi-W@end       OK     -                         OK             -
-----------------------------------------------------------------------------------------------

تعرض سجلات التدقيق Ranger لإجراءات خادم Apache Hive 2 عملية تشغيل Oozie لإجراء للمستخدم. حالات عرض Ranger وYARN مرئية فقط لمسؤول نظام المجموعة.

تكوين تخويل المستخدم في Oozie

يملك Oozie في حد ذاته عملية تكوين تخويل المستخدم التي يمكن أن تمنع المستخدمين من وقف أو حذف مهام المستخدمين الآخرين. لتمكين هذا التكوين، قم بتعيين oozie.service.AuthorizationService.security.enabled إلى true.

لمزيد من معلومات، راجع تثبيت وتكوين Apache Oozie.

بالنسبة لمكونات مثل خادم Apache Hive 1 حيث لا يتوفر ولا يتم دعم المكون الإضافي Ranger، لا يمكن الحصول إلا على تخويل HDFS المجمع. تتوفر عملية التخويل المجمعة فقط من خلال مكونات Ranger الإضافية.

الحصول واجهة مستخدم الويب لـ Oozie

توفر واجهة مستخدم الويب لـ Oozie طريقة عرض تستند إلى الويب بحالة مهام Oozie على نظام المجموعة. للحصول على واجهة مستخدم الويب، اتبع الخطوات التالية في أنظمة مجموعات ESP:

  1. إضافة عُقدة حافة وتمكين مصادقة Kerberos SSH.

  2. اتبع خطوات واجهة مستخدم الويب لـ Oozie لتمكين توجيه SSH لأسفل إلى عقدة الحافة والوصول إلى واجهة مستخدم الويب.

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