استخدام واجهة برمجة تطبيقات Apache Spark REST لإرسال المهام عن بُعد إلى نظام مجموعة HDInsight Spark

تعلم كيفية استخدام Apache Livy، واجهة برمجة تطبيقات Apache Spark REST، التي تُستخدم لإرسال المهام عن بُعد إلى نظام مجموعة Azure HDInsight Spark. للحصول على وثائق مفصلة، راجع Apache Livy.

يمكنك استخدام Livy لتشغيل Spark shells التفاعلية أو إرسال الوظائف الدفعية على Spark. يتناول هذا المقال استخدام Livy لإرسال الوظائف الدفعية. تستخدم القصاصات البرمجية في هذه المقالة cURL لإجراء استدعاءات واجهة برمجة تطبيقات REST إلى نقطة النهاية Livy Spark.

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

مجموعة Apache Spark على HDInsight. للحصول على إرشادات، يرجى مراجعة إنشاء مجموعات Apache Spark في Azure HDInsight.

إرسال وظيفة دفعية لـ Apache Livy Spark

قبل إرسال وظيفة دفعية، يجب تحميل jar الخاص بالتطبيق على مساحة تخزين نظام المجموعة المقترنة بنظام المجموعة. يمكنك استخدام الأداة المساعدة AzCopy، وهي أداة سطر الأوامر، للقيام بذلك. هناك العديد من أجهزة الكمبيوتر العميلة الأخرى التي يمكنك استخدامها لتحميل البيانات. يمكنك العثور على المزيد عنهم في بيانات تحميل وظائف Apache Hadoop في HDInsight.

curl -k --user "admin:password" -v -H "Content-Type: application/json" -X POST -d '{ "file":"<path to application jar>", "className":"<classname in jar>" }' 'https://<spark_cluster_name>.azurehdinsight.net/livy/batches' -H "X-Requested-By: admin"

أمثلة

  • إذا كان ملف jar على مساحة تخزين نظام المجموعة (WASBS)

    curl -k --user "admin:mypassword1!" -v -H "Content-Type: application/json" -X POST -d '{ "file":"wasbs://mycontainer@mystorageaccount.blob.core.windows.net/data/SparkSimpleTest.jar", "className":"com.microsoft.spark.test.SimpleFile" }' "https://mysparkcluster.azurehdinsight.net/livy/batches" -H "X-Requested-By: admin"
    
  • إذا كنت تريد تمرير اسم ملف jar واسم الفئة كجزء من ملف إدخال (في هذا المثال، input.txt)

    curl -k  --user "admin:mypassword1!" -v -H "Content-Type: application/json" -X POST --data @C:\Temp\input.txt "https://mysparkcluster.azurehdinsight.net/livy/batches" -H "X-Requested-By: admin"
    

الحصول على معلومات حول دُفعات Livy Spark التي تعمل على نظام المجموعة

بناء الجملة:

curl -k --user "admin:password" -v -X GET "https://<spark_cluster_name>.azurehdinsight.net/livy/batches"

أمثلة

  • إذا كنت ترغب في استرداد جميع دفعات Livy Spark التي تعمل على نظام المجموعة:

    curl -k --user "admin:mypassword1!" -v -X GET "https://mysparkcluster.azurehdinsight.net/livy/batches"
    
  • إذا كنت ترغب في استرداد دفعة محددة بمعرّف دُفعة معين

    curl -k --user "admin:mypassword1!" -v -X GET "https://mysparkcluster.azurehdinsight.net/livy/batches/{batchId}"
    

حذف وظيفة دفعية لـ Livy Spark

curl -k --user "admin:mypassword1!" -v -X DELETE "https://<spark_cluster_name>.azurehdinsight.net/livy/batches/{batchId}"

مثال

حذف وظيفة دفعية باستخدام معرّف الدُفعة 5.

curl -k --user "admin:mypassword1!" -v -X DELETE "https://mysparkcluster.azurehdinsight.net/livy/batches/5"

Livy Spark وقابلية الوصول العالية

يوفر Livy قابلية وصول عالية لمهام Spark التي تعمل على نظام المجموعة. وفيما يلي مثالان على ذلك.

  • إذا تعطلت خدمة Livy بعد إرسال مهمة عن بُعد إلى نظام مجموعة Spark، تستمر المهمة في العمل في الخلفية. عندما تعود خدمة Livy، فإنه تستعيد حالة المهمة والتقارير مرة أخرى.
  • يتم تشغيل دفاتر ملاحظات Jupyter لـ HDInsight بواسطة Livy في الخلفية. إذا كان دفتر ملاحظات يُشغل مهمة Spark وتم إعادة تشغيل خدمة Livy، يستمر دفتر الملاحظات في تشغيل خلايا التعليمات البرمجية.

عرض مثال

في هذا القسم، نعرض أمثلة لاستخدام Livy Spark لإرسال وظيفة دفعية، ومراقبة مدى تقدم المهمة، ثم حذفها. التطبيق الذي نستخدمه في هذا المثال هو الذي تم تطويره في المقالة إنشاء تطبيق Scala مستقل وتشغيله على نظام مجموعة HDInsight Spark. تفترض الخطوات هنا:

  • لقد قمت بالنسخ مسبقاً عبر jar للتطبيق إلى حساب التخزين المقترن بنظام المجموعة.
  • لقد قمت بتثبيت CuRL على الكمبيوتر حيث تحاول إجراء هذه الخطوات.

قم بتنفيذ الخطوات التالية:

  1. لسهولة الاستخدام، عيِّن متغيرات البيئة. يستند هذا المثال إلى بيئة Windows، راجع المتغيرات حسب الحاجة للبيئة لديك. استبدل CLUSTERNAME وPASSWORD بالقيم المناسبة.

    set clustername=CLUSTERNAME
    set password=PASSWORD
    
  2. تحقق من أن Livy Spark يعمل على نظام المجموعة. يمكننا القيام بذلك عن طريق الحصول على قائمة من الدفعات قيد التشغيل. إذا كنت تُشغل مهمة باستخدام Livy لأول مرة، فيجب أن يكون الناتج صفراً.

    curl -k --user "admin:%password%" -v -X GET "https://%clustername%.azurehdinsight.net/livy/batches"
    

    يجب أن تحصل على ناتج مماثل للقصاصات البرمجية التالية:

    < HTTP/1.1 200 OK
    < Content-Type: application/json; charset=UTF-8
    < Server: Microsoft-IIS/8.5
    < X-Powered-By: ARR/2.5
    < X-Powered-By: ASP.NET
    < Date: Fri, 20 Nov 2015 23:47:53 GMT
    < Content-Length: 34
    <
    {"from":0,"total":0,"sessions":[]}* Connection #0 to host mysparkcluster.azurehdinsight.net left intact
    

    لاحظ ما يبينه السطر الأخير في الناتج وهو total:0، والذي يقترح عدم وجود دفعات قيد التشغيل.

  3. دعونا الآن نرسل وظيفة دفعية. تستخدم القصاصة البرمجية التالية ملف إدخال (input.txt) لتمرير اسم jar واسم الفئة كمعلمات. إذا كنت تقوم بتشغيل هذه الخطوات من كمبيوتر يعمل بنظام Windows، فإن استخدام ملف إدخال هو الأسلوب المستحسن.

    curl -k --user "admin:%password%" -v -H "Content-Type: application/json" -X POST --data @C:\Temp\input.txt "https://%clustername%.azurehdinsight.net/livy/batches" -H "X-Requested-By: admin"
    

    يتم تعريف المعلمات في الملف input.txt كما يلي:

    { "file":"wasbs:///example/jars/SparkSimpleApp.jar", "className":"com.microsoft.spark.example.WasbIOTest" }
    

    يجب أن يظهر لك ناتج مشابه للقصاصة البرمجية التالية:

    < HTTP/1.1 201 Created
    < Content-Type: application/json; charset=UTF-8
    < Location: /0
    < Server: Microsoft-IIS/8.5
    < X-Powered-By: ARR/2.5
    < X-Powered-By: ASP.NET
    < Date: Fri, 20 Nov 2015 23:51:30 GMT
    < Content-Length: 36
    <
    {"id":0,"state":"starting","log":[]}* Connection #0 to host mysparkcluster.azurehdinsight.net left intact
    

    لاحظ ما يبينه السطر الأخير من الناتج وهو state:starting. ويذكر أيضاً، id:0. ومن هنا، فإن 0 هو معرف الدُفعة.

  4. يمكنك الآن استرداد حالة هذه الدفعة المحددة باستخدام معرّف الدفعة.

    curl -k --user "admin:%password%" -v -X GET "https://%clustername%.azurehdinsight.net/livy/batches/0"
    

    يجب أن يظهر لك ناتج مشابه للقصاصة البرمجية التالية:

    < HTTP/1.1 200 OK
    < Content-Type: application/json; charset=UTF-8
    < Server: Microsoft-IIS/8.5
    < X-Powered-By: ARR/2.5
    < X-Powered-By: ASP.NET
    < Date: Fri, 20 Nov 2015 23:54:42 GMT
    < Content-Length: 509
    <
    {"id":0,"state":"success","log":["\t diagnostics: N/A","\t ApplicationMaster host: 10.0.0.4","\t ApplicationMaster RPC port: 0","\t queue: default","\t start time: 1448063505350","\t final status: SUCCEEDED","\t tracking URL: http://myspar.lpel.jx.internal.cloudapp.net:8088/proxy/application_1447984474852_0002/","\t user: root","15/11/20 23:52:47 INFO Utils: Shutdown hook called","15/11/20 23:52:47 INFO Utils: Deleting directory /tmp/spark-b72cd2bf-280b-4c57-8ceb-9e3e69ac7d0c"]}* Connection #0 to host mysparkcluster.azurehdinsight.net left intact
    

    يُظهر الناتج الآن state:success، ما يشير إلى أن المهمة قد اكتملت بنجاح.

  5. إذا أردت ذلك، يمكنك الآن حذف الدُفعة.

    curl -k --user "admin:%password%" -v -X DELETE "https://%clustername%.azurehdinsight.net/livy/batches/0"
    

    يجب أن يظهر لك ناتج مشابه للقصاصة البرمجية التالية:

    < HTTP/1.1 200 OK
    < Content-Type: application/json; charset=UTF-8
    < Server: Microsoft-IIS/8.5
    < X-Powered-By: ARR/2.5
    < X-Powered-By: ASP.NET
    < Date: Sat, 21 Nov 2015 18:51:54 GMT
    < Content-Length: 17
    <
    {"msg":"deleted"}* Connection #0 to host mysparkcluster.azurehdinsight.net left intact
    

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

تبدأ التحديثات لتكوين Livy بإصدار 3.5 من HDInsight

تعمل نظم مجموعات HDInsight إصدار 3.5 وما فوق، بشكل افتراضي، بتعطيل استخدام مسارات الملفات المحلية للوصول إلى نماذج من ملفات البيانات أو ملفات jar. نحن نشجعك على استخدام مسار wasbs:// بدلاً من ذلك للوصول إلى ملفات jar أو نماذج من ملفات البيانات من نظام المجموعة.

إرسال مهام Livy لنظام المجموعة داخل شبكة ظاهرية في Azure

إذا قمت بالاتصال بنظام مجموعة HDInsight من داخل شبكة Azure الظاهرية، يمكنك الاتصال مباشرةً بخدمة Livy على نظام المجموعة. في مثل هذه الحالة، إن عنوان URL لنقطة نهاية Livy هو http://<IP address of the headnode>:8998/batches. وبذلك، إن 8998 هو المنفذ الذي يتم من خلاله تشغيل خدمة Livy على عقدة رأس نظام المجموعة. لمزيد من المعلومات حول الوصول إلى الخدمات على المنافذ غير العامة، راجع المنافذ المستخدمة من قِبل خدمات Apache Hadoop على HDInsight.

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