تشغيل مهام Apache Sqoop في HDInsight باستخدام Curl

تعرف على كيفية استخدام Curl لتشغيل مهام Apache Sqoop على نظام مجموعة Apache Hadoop في HDInsight. توضح هذه المقالة كيفية تصدير البيانات من تخزين Azure واستيرادها إلى قاعدة بيانات SQL Server باستخدام Curl. هذه المقالة تابعة لـ استخدام Apache Sqoop مع Hadoop في HDInsight.

يُستخدم Curl لإظهار كيفية التعامل مع HDInsight باستخدام طلبات HTTP الأولية لتشغيل نتائج مهام Sqoop ومراقبتها واستردادها. يعمل ذلك باستخدام واجهة برمجة تطبيقات WebHCat REST (المعروف سابقًا باسم Templeton) التي يوفرها نظام مجموعة HDInsight.

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

إرسال مهام Apache Sqoop باستخدام Curl

استخدم Curl لتصدير البيانات باستخدام مهام Apache Sqoop من تخزين Azure إلى SQL Server.

ملاحظة

عند استخدام Curl أو أي اتصال REST آخر مع WebHCat، يجب عليك مصادقة الطلبات من خلال توفير اسم المستخدم وكلمة المرور لمسؤول نظام مجموعة HDInsight. يجب أيضًا استخدام اسم نظام المجموعة كجزء من معرف الموارد الموحد (URI) المستخدم لإرسال الطلبات إلى الخادم.

للأوامر الموجودة في هذا القسم استبدال USERNAME باسم المستخدم للمصادقة إلى نظام المجموعة واستبدال PASSWORD بكلمة المرور لحساب المستخدم. استبدل CLUSTERNAME باسم نظام مجموعتك.

يتم تأمين واجهة برمجة تطبيقات REST عبر المصادقة الأساسية. يجب عليك دائمًا تقديم الطلبات باستخدام HTTP (HTTPS) آمن، للمساعدة في ضمان إرسال بيانات الاعتماد الخاصة بك بشكل آمن إلى الخادم.

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

    set CLUSTERNAME=
    set USERNAME=admin
    set PASSWORD=
    set SQLDATABASESERVERNAME=
    set SQLDATABASENAME=
    set SQLPASSWORD=
    set SQLUSER=sqluser
    
  2. من سطر الأوامر، استخدم الأمر التالي للتحقق من أنه يمكنك الاتصال بنظام مجموعة HDInsight:

    curl -u %USERNAME%:%PASSWORD% -G https://%CLUSTERNAME%.azurehdinsight.net/templeton/v1/status
    

    ينبغي أن تتلقى ردًا مشابهًا للرد التالي:

    {"status":"ok","version":"v1"}
    
  3. استخدم ما يلي لإرسال مهمة sqoop:

    curl -u %USERNAME%:%PASSWORD% -d user.name=%USERNAME% -d command="export --connect jdbc:sqlserver://%SQLDATABASESERVERNAME%.database.windows.net;user=%SQLUSER%@%SQLDATABASESERVERNAME%;password=%PASSWORD%;database=%SQLDATABASENAME% --table log4jlogs --export-dir /example/data/sample.log --input-fields-terminated-by \0x20 -m 1" -d statusdir="wasb:///example/data/sqoop/curl" https://%CLUSTERNAME%.azurehdinsight.net/templeton/v1/sqoop
    

    المعلمات المستخدمة مع هذا الأمر هي كما يلي:

    • -d - نظرًا لعدم استخدام -G، يتم تعيين الطلب افتراضيًا إلى أسلوب POST. -d يحدد قيم البيانات التي يتم إرسالها مع الطلب.

      • user.name - المستخدم الذي يقوم بتشغيل الأمر.

      • الأمر - أمر Sqoop الذي سيتم تنفيذه.

      • statusdir - الدليل الذي ستتم كتابة حالة هذه المهمة إليه.

      يجب أن يقوم هذا الأمر بإرجاع معرّف مهمة يمكن استخدامه للتحقق من حالة المهمة.

      {"id":"job_1415651640909_0026"}
      
  4. للتحقق من حالة المهمة، استخدم الأمر التالي. استبدل JOBID بالقيمة التي تم إرجاعها في الخطوة السابقة. على سبيل المثال، إذا كانت قيمة الإرجاع {"id":"job_1415651640909_0026"}، ستكون JOBID هي job_1415651640909_0026. راجع موقع jq حسب الحاجة.

    set JOBID=job_1415651640909_0026
    
    curl -G -u %USERNAME%:%PASSWORD% -d user.name=%USERNAME% https://%CLUSTERNAME%.azurehdinsight.net/templeton/v1/jobs/%JOBID% | C:\HDI\jq-win64.exe .status.state
    

    إذا انتهت المهمة، ستكون الحالة ناجحة.

    ملاحظة

    يُرجع طلب Curl هذا مستند JavaScript Object Notation (JSON) مع معلومات حول المهمة، ويُستخدم jq لاسترداد قيمة الحالة فقط.

  5. بمجرد تغير حالة المهمة إلى ناجحة، يمكنك استرداد نتائج المهمة من تخزين Azure Blob. تحتوي المعلمة statusdir التي تم تمريرها مع الاستعلام على موقع ملف الإخراج، في هذه الحالة، wasb:///example/data/sqoop/curl. يخزن هذا العنوان إخراج المهمة في الدليل example/data/sqoop/curl على حاوية التخزين الافتراضية المستخدمة بواسطة نظام مجموعة HDInsight.

    يمكنك استخدام مدخل Microsoft Azure للوصول إلى stderr وstdout blobs.

  6. للتحقق من أن البيانات قد تم تصديرها، استخدم الاستعلامات التالية من عميل SQL لعرض البيانات التي تم تصديرها:

    SELECT COUNT(*) FROM [dbo].[log4jlogs] WITH (NOLOCK);
    SELECT TOP(25) * FROM [dbo].[log4jlogs] WITH (NOLOCK);
    

التقييدات

  • تصدير كمية كبيرة - مع HDInsight المستند إلى نظام التشغيل Linux، لا يتم دعم موصل Sqoop المستخدم لتصدير البيانات إلى Microsoft SQL Server أو قاعدة بيانات Azure SQL حاليًا إدراج كميات كبيرة.
  • إرسال في دفعات- مع HDInsight المستند إلى نظام التشغيل Linux، عند استخدام مفتاح التبديل -batch عند تنفيذ الإدراجات، يقوم Sqoop بإدراجات متعددة بدلاً من الإرسال في دفعات.

الملخص

كما هو موضح في هذه الوثيقة، يمكنك استخدام طلب HTTP الأولي لتشغيل نتائج مهام Sqoop ومراقبتها واستردادها على نظام مجموعة HDInsight الخاصة بك.

لمزيد من المعلومات حول واجهة REST المستخدمة في هذه المقالة، راجع دليل واجهة برمجة تطبيقات REST لـApache Sqoop.

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

استخدام Apache Sqoop مع Apache Hadoop في HDInsight

بالنسبة لمقالات HDInsight الأخرى التي تتضمن curl: