الاستعلام عن Apache Hive من خلال برنامج تشغيل JDBC في HDInsight

تعرف على كيفية استخدام برنامج تشغيل JDBC من تطبيق Java. لإرسال استعلامات Apache Hive إلى Apache Hadoop في Azure HDInsight. توضح المعلومات الواردة SQuirreL SQL في هذا المستند كيفية الاتصال برمجيا ومن العميل.

للحصول على مزيدٍ من المعلومات عن Hive JDBC Interface، راجع HiveJDBCInterface.

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

سلسلة اتصال JDBC

يتم إجراء اتصالات JDBC بمجموعة HDInsight على Azure عبر منفذ 443. يتم تأمين نسبة استخدام الشبكة باستخدام TLS/SSL. البوابة العامة التي تجلس خلفها المجموعات تعيد توجيه حركة المرور إلى المنفذ الذي يستمع إليه HiveServer2 بالفعل. توضح سلسلة الاتصال التالية التنسيق المطلوب استخدامه مع HDInsight:

    jdbc:hive2://CLUSTERNAME.azurehdinsight.net:443/default;transportMode=http;ssl=true;httpPath=/hive2

استبدل CLUSTERNAME باسم مجموعة HDInsight الخاصة بك.

اسم المضيف في سلسلة الاتصال

اسم المضيف "CLUSTERNAME.azurehdinsight.net" في سلسلة الاتصال هو عنوان URL نفسه الخاص بالمجموعة. يمكنك الحصول عليه من خلال مدخل Azure.

منفذ في سلسلة الاتصال

يمكنك فقط استخدام المنفذ 443 للاتصال بالمجموعة من بعض الأماكن خارج شبكة Azure الظاهرية. HDInsight هي خدمة مُدارة، مما يعني أن جميع الاتصالات إلى المجموعة تتم إدارتها عبر بوابة آمنة. لا يمكنك الاتصال بـ HiveServer 2 مباشرةً على المنفذين 10001 أو 10000. هذه المنافذ ليست مكشوفة للخارج.

المصادقة

عند إنشاء الاتصال، استخدم اسم مدير مجموعة HDInsight وكلمة المرور للمصادقة. من عملاء JDBC مثل SQuirreL SQL، أدخل اسم المسؤول وكلمة المرور في محددات الوحدة التابعة.

من تطبيق Java، يجب عليك استخدام الاسم وكلمة المرور عند إنشاء اتصال. على سبيل المثال، يفتح كود Java التالي اتصالاً جديدًا:

DriverManager.getConnection(connectionString,clusterAdmin,clusterPassword);

التواصل مع عميل SQuirreL SQL

SQuirreL SQL عبارة عن عميل JDBC يمكن استخدامه لتشغيل استعلامات Hive عن بُعد باستخدام مجموعة HDInsight الخاصة بك. تفترض الخطوات التالية أنك ثبّّتَ SQuirreL SQL بالفعل.

  1. أنشئ دليلاً يحتوي على ملفات معينة ليتم نسخها من المجموعة الخاصة بك.

  2. في البرنامج النصي التالي، استبدل sshuser باسم حساب مستخدم SSH للمجموعة. استبدل CLUSTERNAME باسم مجموعة HDInsight. من سطر الأوامر، غيِّر دليل العمل الخاص بك إلى الدليل الذي تم إنشاؤه في الخطوة السابقة، ثم أدخل الأمر التالي لنسخ الملفات من مجموعة HDInsight:

    scp sshuser@CLUSTERNAME-ssh.azurehdinsight.net:/usr/hdp/current/hadoop-client/{hadoop-auth.jar,hadoop-common.jar,lib/log4j-*.jar,lib/slf4j-*.jar,lib/curator-*.jar} . -> scp sshuser@CLUSTERNAME-ssh.azurehdinsight.net:/usr/hdp/current/hadoop-client/{hadoop-auth.jar,hadoop-common.jar,lib/reload4j-*.jar,lib/slf4j-*.jar,lib/curator-*.jar} .
    
    scp sshuser@CLUSTERNAME-ssh.azurehdinsight.net:/usr/hdp/current/hive-client/lib/{commons-codec*.jar,commons-logging-*.jar,hive-*-*.jar,httpclient-*.jar,httpcore-*.jar,libfb*.jar,libthrift-*.jar} .
    
  3. ابدأ تشغيل تطبيق SQuirreL SQL. من يسار النافذة، حدد برامج تشغيل الجهاز.

    Drivers tab on the left of the window.

  4. من الرموز الموجودة أعلى مربع حوار برامج تشغيل الجهاز، حدد رمز + لإنشاء برنامج تشغيل.

    SQuirreL SQL application drivers icon.

  5. في مربع الحوار برنامج التشغيل المضاف، أضف المعلومات التالية:

    الخاصية القيمة
    الاسم Hive
    مثال عنوان URL jdbc:hive2://localhost:443/default;transportMode=http;ssl=true;httpPath=/hive2
    مسار فئة إضافية استخدم زر إضافة لإضافة كافة ملفات jar التي تم تنزيلها مسبقًا.
    اسم الفئة org.apache.hive.jdbc.HiveDriver

    add driver dialog with parameters.

    حدد موافق لحفظ هذه الإعدادات.

  6. على يسار نافذة SQuirreL SQL، حدد الأسماء المستعارة. ثم حدد أيقونة + لإنشاء اسم مستعار للاتصال.

    `SQuirreL SQL add new alias dialog`.

  7. استخدم القيم التالية لمربع حوار إضافة اسم مستعار:

    الخاصية القيمة
    الاسم Hive على HDInsight
    برنامج التشغيل استخدم القائمة المنسدلة لتحديد محرك Hive.
    عنوان URL jdbc:hive2://CLUSTERNAME.azurehdinsight.net:443/default;transportMode=http;ssl=true;httpPath=/hive2. استبدل CLUSTERNAME باسم مجموعة HDInsight الخاصة بك.
    اسم المستخدم اسم حساب تسجيل دخول المجموعة لمجموعة HDInsight الخاصة بك. الاسم الافتراضي هو admin.
    كلمة المرور كلمة المرور لحساب تسجيل الدخول إلى المجموعة.

    add alias dialog with parameters.

    هام

    استخدم زر اختبار للتحقق من عمل الاتصال. عندما يظهر مربع حوار الاتصال بـ: Hive على HDInsight، حدد اتصال لإجراء الاختبار. في حالة نجاح الاختبار، سترى مربع حوار تم الاتصال بنجاح. في حالة حدوث خطأ، راجع استكشاف الأخطاء وإصلاحها.

    لحفظ الاسم المستعار للاتصال، استخدم زر موافق في الجزء السفلي من مربع حوار إضافة اسم مستعار.

  8. من القائمة المنسدلة اتصال بـ في الجزء العلوي من SQuirreL SQL، حدد Hive على HDInsight. عند المطالبة، حدد اتصال.

    connection dialog with parameters.

  9. بمجرد الاتصال، أدخل الاستعلام التالي في مربع حوار استعلام SQL، ثم حدد أيقونة تشغيل (شخص قيد التشغيل). يجب أن تعرض منطقة النتائج نتائج الاستعلام.

    select * from hivesampletable limit 10;
    

    sql query dialog, including results.

الاتصال من مثال تطبيق Java

مثال على استخدام عميل Java للاستعلام عن Hive على HDInsight متاح في https://github.com/Azure-Samples/hdinsight-java-hive-jdbc. اتبع التعليمات الواردة في المستودع لبناء العينة وتشغيلها.

استكشاف الأخطاء وإصلاحها

حدث خطأ غير متوقع أثناء محاولة فتح اتصال SQL

الأعراض: عند الاتصال بمجموعة HDInsight من الإصدار 3.3 أو أحدث، قد تتلقى خطأ بحدوث خطأ غير متوقع. يبدأ تتبع المكدس لهذا الخطأ بالأسطر التالية:

java.util.concurrent.ExecutionException: java.lang.RuntimeException: java.lang.NoSuchMethodError: org.apache.commons.codec.binary.Base64.<init>(I)V
at java.util.concurrent.FutureTas...(FutureTask.java:122)
at java.util.concurrent.FutureTask.get(FutureTask.java:206)

السبب: يحدث هذا الخطأ بسبب إصدار أقدم من ملف commons-codec.jar مضمن مع SQuirreL.

الحل: لإصلاح هذا الخطأ، استخدم الخطوات التالية:

  1. اخرج من SQuirreL، ثم انتقل إلى الدليل حيث تم تثبيت SQuirreL على نظامك، ربما C:\Program Files\squirrel-sql-4.0.0\lib. في دليل SquirreL، ضمن دليل lib، استبدل commons-codec.jar الحالي بالملف الذي تم تنزيله من مجموعة HDInsight.

  2. أعد تشغيل SQuirreL. ينبغي ألا يحدث الخطأ بعد الآن عند الاتصال بـ Hive على HDInsight.

قطع الاتصال عن طريق HDInsight

الأعراض: يقطع HDInsight الاتصال بشكل غير متوقع عند محاولة تنزيل كمية هائلة من البيانات (على سبيل المثال عدة GBs) من خلال JDBC/ODBC.

السبب: القيد على عقد البوابة يسبب هذا الخطأ. عند إحضار البيانات من JDBC/ODBC، يجب أن تمر جميع البيانات عبر عقدة البوابة. ومع ذلك، لم يتم تصميم البوابة لتنزيل كمية هائلة من البيانات، لذل قد تغلق البوابة الاتصال إذا لم تستطع التعامل مع نسبة استخدام الشبكة.

الحل: تجنب استخدام برنامج تشغيل JDBC/ODBC لتنزيل كميات ضخمة من البيانات. انسخ البيانات مباشرةً من تخزين blob بدلاً من ذلك.

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

الآن بعد أن تعلمت كيفية استخدام JDBC للعمل مع Hive، استخدم الروابط التالية لاستكشاف طرق أخرى للعمل مع Azure HDInsight.