تشغيل وظائف MapReduce مع Apache Hadoop على HDInsight باستخدام REST
تعلم كيفية استخدام واجهة برمجة تطبيقات Apache Hive WebHCat REST لتشغيل مهام MapReduce على نظام مجموعة HDInsight. يُستخدم Curl لإظهار كيفية التفاعل مع HDInsight باستخدام طلبات HTTP البسيطة لتشغيل مهام MapReduce.
ملاحظة
إذا كنت معتاداً بالفعل على استخدام خوادم Hadoop المستندة إلى نظام Linux، ولكنك مبتدئ على HDInsight، فراجع مستند ما تحتاج إلى معرفته عن Apache Hadoop المستند إلى نظام Linux على HDInsight.
المتطلبات الأساسية
- مجموعة Apache Hadoop على HDInsight. راجعإنشاء أنظمة مجموعات Apache Hadoop باستخدام مدخل Azure.
إما:
تشغيل مهمة MapReduce
ملاحظة
عندما تستخدم Curl أو أي اتصال REST آخر مع WebHCat، يجب عليك مصادقة الطلبات من خلال توفير اسم المستخدم وكلمة المرور لمسؤول نظام مجموعة HDInsight. يجب استخدام اسم نظام المجموعة كجزء من معرف الموارد المنتظم المستخدم لإرسال الطلبات إلى الخادم.
يتم تأمين واجهة برمجة تطبيقات REST باستخدام مصادقة الوصول الأساسية. يجب عليك دائماً تقديم الطلبات باستخدام HTTPS لضمان إرسال بيانات الاعتماد الخاصة بك بشكل آمن إلى الخادم.
Curl
لسهولة الاستخدام، قم بتعيين المتغيرات أدناه. يستند هذا المثال إلى بيئة Windows، يمكنك المراجعة حسب الحاجة للبيئة الخاصة بك.
set CLUSTERNAME= set PASSWORD=
من سطر الأوامر، استخدم الأمر التالي للتحقق من أنه يمكنك الاتصال بنظام مجموعة HDInsight:
curl -u admin:%PASSWORD% -G https://%CLUSTERNAME%.azurehdinsight.net/templeton/v1/status
المعلمات المستخدمة مع هذا الأمر هي كما يلي:
- -u: يشير إلى اسم المستخدم وكلمة المرور المستخدمة لمصادقة الطلب
- -G: يشير إلى أن هذه العملية هي طلب GET
بداية معرف الموارد المنتظم،
https://CLUSTERNAME.azurehdinsight.net/templeton/v1
، هي نفسها لجميع الطلبات.ستتلقى رداً مشابهاً لـ JSON التالي:
{"version":"v1","status":"ok"}
لإرسال مهمة MapReduce، استخدم الأمر التالي. قم بتعديل المسار إلى jq حسب الحاجة.
curl -u admin:%PASSWORD% -d user.name=admin ^ -d jar=/example/jars/hadoop-mapreduce-examples.jar ^ -d class=wordcount -d arg=/example/data/gutenberg/davinci.txt -d arg=/example/data/output ^ https://%CLUSTERNAME%.azurehdinsight.net/templeton/v1/mapreduce/jar | ^ C:\HDI\jq-win64.exe .id
تخبر نهاية معرف الموارد المنتظم (/mapreduce/jar) WebHCat أن هذا الطلب يبدأ بمهمة MapReduce من فئة في ملف jar. المعلمات المستخدمة مع هذا الأمر هي كما يلي:
-
-d: لا يتم استخدام
-G
، لذا فإن الطلب يستخدم بشكل افتراضي أسلوب POST.-d
يحدد قيم البيانات التي يتم إرسالها مع الطلب.- user.name: المستخدم الذي يقوم بتشغيل الأمر
- jar: موقع ملف jar الذي يحتوي على الفئة التي سيتم تشغيلها
- class: الفئة التي تحتوي على منطق MapReduce
- arg: الوسيطات التي سيتم تمريرها إلى مهمة MapReduce. في هذه الحالة، ملف نص الإدخال والدليل اللذان يتم استخدامهما للإخراج
يجب أن يقوم هذا الأمر بإرجاع معرّف مهمة يمكن استخدامه للتحقق من حالة المهمة:
job_1415651640909_0026
.-
-d: لا يتم استخدام
للتحقق من حالة المهمة، استخدم الأمر التالي. استبدل القيمة
JOBID
بالقيمة الفعلية التي تم إرجاعها في الخطوة السابقة. راجع موقع jq حسب الحاجة.set JOBID=job_1415651640909_0026 curl -G -u admin:%PASSWORD% -d user.name=admin https://%CLUSTERNAME%.azurehdinsight.net/templeton/v1/jobs/%JOBID% | ^ C:\HDI\jq-win64.exe .status.state
PowerShell
لسهولة الاستخدام، قم بتعيين المتغيرات أدناه. استبدل
CLUSTERNAME
باسم نظام المجموعة الفعلي. قم بتنفيذ الأمر وإدخال كلمة مرور تسجيل الدخول لنظام المجموعة عند مطالبتك.$clusterName="CLUSTERNAME" $creds = Get-Credential -UserName admin -Message "Enter the cluster login password"
استخدم الأمر التالي للتحقق من أنه يمكنك الاتصال بنظام مجموعة HDInsight الخاصة بك:
$resp = Invoke-WebRequest -Uri "https://$clustername.azurehdinsight.net/templeton/v1/status" ` -Credential $creds ` -UseBasicParsing $resp.Content
ستتلقى رداً مشابهاً لـ JSON التالي:
{"version":"v1","status":"ok"}
لإرسال مهمة MapReduce، استخدم الأمر التالي:
$reqParams = @{} $reqParams."user.name" = "admin" $reqParams.jar = "/example/jars/hadoop-mapreduce-examples.jar" $reqParams.class = "wordcount" $reqParams.arg = @() $reqParams.arg += "/example/data/gutenberg/davinci.txt" $reqparams.arg += "/example/data/output" $resp = Invoke-WebRequest -Uri "https://$clusterName.azurehdinsight.net/templeton/v1/mapreduce/jar" ` -Credential $creds ` -Body $reqParams ` -Method POST ` -UseBasicParsing $jobID = (ConvertFrom-Json $resp.Content).id $jobID
تخبر نهاية معرف الموارد المنتظم (/mapreduce/jar) WebHCat أن هذا الطلب يبدأ بمهمة MapReduce من فئة في ملف jar. المعلمات المستخدمة مع هذا الأمر هي كما يلي:
- user.name: المستخدم الذي يقوم بتشغيل الأمر
- jar: موقع ملف jar الذي يحتوي على الفئة التي سيتم تشغيلها
- class: الفئة التي تحتوي على منطق MapReduce
- arg: الوسيطات التي سيتم تمريرها إلى مهمة MapReduce. في هذه الحالة، ملف نص الإدخال والدليل اللذان يتم استخدامهما للإخراج
يجب أن يقوم هذا الأمر بإرجاع معرّف مهمة يمكن استخدامه للتحقق من حالة المهمة:
job_1415651640909_0026
.للتحقق من حالة المهمة، استخدم الأمر التالي:
$reqParams=@{"user.name"="admin"} $resp = Invoke-WebRequest -Uri "https://$clusterName.azurehdinsight.net/templeton/v1/jobs/$jobID" ` -Credential $creds ` -Body $reqParams ` -UseBasicParsing # ConvertFrom-JSON can't handle duplicate names with different case # So change one to prevent the error $fixDup=$resp.Content.Replace("jobID","job_ID") (ConvertFrom-Json $fixDup).status.state
كلتا الطريقتين
إذا اكتملت المهمة، تكون الحالة التي تم إرجاعها هي
SUCCEEDED
.عند تغيير حالة المهمة إلى
SUCCEEDED
، يمكنك استرداد نتائج المهمة من تخزين Azure Blob.statusdir
تحتوي المعلمة التي تم تمريرها مع الاستعلام على موقع ملف الإخراج. في هذا المثال، الموقع هو/example/curl
. يخزن هذا العنوان ناتج المهمة في التخزين الافتراضي لأنظمة المجموعة في/example/curl
.
يمكنك سرد هذه الملفات وتنزيلها باستخدام Azure CLI. لمزيد من المعلومات حول استخدام Azure CLI للعمل مع تخزين Azure Blob، راجع التشغيل السريع: إنشاء الكائنات الثنائية كبيرة الحجم وتنزيلها وسردها باستخدام Azure CLI.
الخطوات التالية
للحصول على معلومات حول الطرق الأخرى التي يمكنك من خلالها العمل مع Hadoop على HDInsight:
لمزيد من المعلومات حول واجهة REST المستخدمة في هذه المقالة، راجع مرجع WebHCat.