استخدام كمبيوتر عميل Apache Beeline مع Apache Hive

توضح هذه المقالة كيفية استخدام سطر الأوامر من كمبيوتر عميل Apache Beeline لإنشاء وتنفيذ استعلامات Apache Hive عبر اتصال SSH.

الخلفية

Beeline هو كمبيوتر عميل Hive الذي يتم تضمينه على عقدة الرأس من نظام مجموعة HDInsight الخاص بك. توضح هذه المقالة كيفية استخدام هذه الأداة من خلال أمثلة باستخدام استعلام Apache Hive وملف HiveQL.

للاتصال بعميل Beeline المثبت على مجموعة HDInsight لديك، أو تثبيت Beeline محلياً، اتبع دليلنا للاتصال أو تثبيت Apache Beeline.

تستخدم Beeline استعلام JDBC للاتصال ب HiveServer2، وهي خدمة مستضافة على مجموعة HDInsight الخاصة بك. يمكنك أيضا استخدام Beeline للوصول إلى Hive على HDInsight عن بعد عبر الإنترنت. توفر الأمثلة التالية سلاسل الاتصال الأكثر شيوعا المستخدمة لاتصال HDInsight من Beeline.

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

  • مجموعة Hadoop على Azure HDInsight. إذا كنت بحاجة إلى مجموعة، فاتبع دليلنا لإنشاء مجموعة HDInsight.

  • لاحظ مخطط معرف الموارد المنتظم (URI) لمقطع التخزين الأساسي لنظام المجموعة الخاص بك. على سبيل المثال، wasb:// لـ Azure Storage، abfs:// لـ Azure Data Lake Storage Gen2، أو adl:// لـ Azure Data Lake Storage Gen1. إذا تم تمكين النقل الآمن لـ Azure Storage، فسيكون عنوان URI هو wasbs://. لمزيد من المعلومات، يرجى مراجعة النقل الآمن.

  • كمبيوتر عميل SSH. لمزيدٍ من المعلومات، يرجى الرجوع إلى الاتصال بـ HDInsight (Apache Hadoop) باستخدام SSH. تفترض معظم الخطوات في هذا المستند استخدام Beeline من جلسة عمل SSH إلى نظام المجموعة. يمكنك أيضا استخدام كمبيوتر عميل Beeline محلي ولكن هذه الخطوات غير موجودة في هذه المقالة.

تشغيل استعلام Hive

يعتمد هذا المثال على استخدام العميل الخطي من اتصال SSH.

  1. فتح اتصال SSH إلى نظام مجموعة مع التعليمة البرمجية أدناه. استبدل sshuser بمستخدم SSH لنظام مجموعتك، واستبدل CLUSTERNAME باسم مجموعتك. إذا طُلب منك، فأدخل كلمة المرور لحساب مستخدم SSH.

    ssh sshuser@CLUSTERNAME-ssh.azurehdinsight.net
    
  2. الاتصال إلى HiveServer2 مع عميل Beeline الخاص بك من جلسة SSH المفتوحة عن طريق إدخال الأمر التالي:

    beeline -u 'jdbc:hive2://headnodehost:10001/;transportMode=http'
    

    ملاحظة

    راجع جزء "إلى مجموعة HDInsight Enterprise Security Package (ESP) باستخدام Kerberos" في الاتصال ب HiveServer2 باستخدام Beeline أو تثبيت Beeline محلياً للاتصال من مكان محلي إذا كنت تستخدم مجموعة ممكنة لحزمة أمان المؤسسة (ESP)

  3. تبدأ أوامر Beeline بحرف !، على سبيل المثال !help يعرض التعليمات. ومع ذلك !، يمكن حذفه مع بعض الأوامر. على سبيل المثال، help يعمل أيضا.

    هناك !sql، والذي يستخدم لتنفيذ البيانات HiveQL. ومع ذلك، فإن HiveQL شائعة الاستخدام بحيث يمكنك حذف !sql السابق. العبارتان التاليتان متكافئتان:

    !sql show tables;
    show tables;
    

    على نظام مجموعة جديدة، يتم سرد جدول واحد فقط: hivesampletable.

  4. استخدم الأمر التالي لعرض المخطط لنموذج قالب Hive:

    describe hivesampletable;
    

    يسترجع هذا الأمر المعلومات التالية:

    +-----------------------+------------+----------+--+
    |       col_name        | data_type  | comment  |
    +-----------------------+------------+----------+--+
    | clientid              | string     |          |
    | querytime             | string     |          |
    | market                | string     |          |
    | deviceplatform        | string     |          |
    | devicemake            | string     |          |
    | devicemodel           | string     |          |
    | state                 | string     |          |
    | country               | string     |          |
    | querydwelltime        | double     |          |
    | sessionid             | bigint     |          |
    | sessionpagevieworder  | bigint     |          |
    +-----------------------+------------+----------+--+
    

    توضح هذه المعلومات الأعمدة الموجودة في الجدول.

  5. أدخل العبارات التالية لإنشاء جدول اسمه log4jLogs باستخدام نموذج البيانات المتوفرة مع نظام مجموعة HDInsight: (قم بالمراجعة حسب الحاجة استنادا إلى نظام URI الخاص بك.)

    DROP TABLE log4jLogs;
    CREATE EXTERNAL TABLE log4jLogs (
        t1 string,
        t2 string,
        t3 string,
        t4 string,
        t5 string,
        t6 string,
        t7 string)
    ROW FORMAT DELIMITED FIELDS TERMINATED BY ' '
    STORED AS TEXTFILE LOCATION 'wasbs:///example/data/';
    SELECT t4 AS sev, COUNT(*) AS count FROM log4jLogs
        WHERE t4 = '[ERROR]' AND INPUT__FILE__NAME LIKE '%.log'
        GROUP BY t4;
    

    تقوم الأوامر بالإجراءات الآتية:

    البيان الوصف
    إسقاط جدول إذا كان الجدول موجودا، يتم حذفه.
    إنشاء جدول خارجي إنشاء جدول خارجي في Hive. تخزن الجداول الخارجية تعريف الجدول في Hive فقط. تبقى البيانات في الموقع الأصلي.
    تنسيق الصف كيفية تنسيق البيانات. في هذه الحالة، توضع مسافة للفصل بين الحقول في كل سجل.
    تُخزن كموقع ملف نصي مكان تخزين البيانات وتنسيقها.
    SELECT حدد عدد لكل الصفوف حيث يحتوي العمود t4 على القيمة [خطأ]. يسترجع هذا الاستعلام القيمة 3 حيث يوجد ثلاثة صفوف تحتوي على هذه القيمة.
    INPUT__FILE__NAME LIKE '%.log' يحاول Apache Hive تطبيق مخطط قاعدة البيانات على كل الملفات في الدليل. في هذه الحالة، يحتوي الدليل على ملفات لا تتطابق مع المخطط. لمنع البيانات المهملة في النتائج، يُخبر هذا البيان Hive بضرورة إرجاع البيانات من الملفات التي تنتهي بـ .log فقط.

    ملاحظة

    يجب استخدام الجداول الخارجية عندما تتوقع أن يتم تحديث البيانات الأساسية بواسطة مصدر خارجي. على سبيل المثال، عملية تحميل بيانات تلقائية أو عملية MapReduce.

    إسقاط جدول خارجي لا يؤدي إلى حذف البيانات، فقط يُحذف تعريف الجدول.

    ناتج هذا الأمر يشبه النص التالي:

    INFO  : Tez session hasn't been created yet. Opening session
    INFO  :
    
    INFO  : Status: Running (Executing on YARN cluster with App id application_1443698635933_0001)
    
    INFO  : Map 1: -/-      Reducer 2: 0/1
    INFO  : Map 1: 0/1      Reducer 2: 0/1
    INFO  : Map 1: 0/1      Reducer 2: 0/1
    INFO  : Map 1: 0/1      Reducer 2: 0/1
    INFO  : Map 1: 0/1      Reducer 2: 0/1
    INFO  : Map 1: 0(+1)/1  Reducer 2: 0/1
    INFO  : Map 1: 0(+1)/1  Reducer 2: 0/1
    INFO  : Map 1: 1/1      Reducer 2: 0/1
    INFO  : Map 1: 1/1      Reducer 2: 0(+1)/1
    INFO  : Map 1: 1/1      Reducer 2: 1/1
    +----------+--------+--+
    |   sev    | count  |
    +----------+--------+--+
    | [ERROR]  | 3      |
    +----------+--------+--+
    1 row selected (47.351 seconds)
    
  6. للخروج من Beeline:

    !exit
    

تشغيل ملف HiveQL

المثال التالي استكمال للمثال السابق. استخدم الخطوات التالية لإنشاء ملف، ثم قم بتشغيله باستخدام Beeline.

  1. استخدم الأمر التالي لإنشاء ملف باسم query.hql:

    nano query.hql
    
  2. استخدام النص التالي كمحتويات لهذا الملف. ينشئ هذا الاستعلام جدول 'داخلي' جديد يسمى errorLogs:

    CREATE TABLE IF NOT EXISTS errorLogs (t1 string, t2 string, t3 string, t4 string, t5 string, t6 string, t7 string) STORED AS ORC;
    INSERT OVERWRITE TABLE errorLogs SELECT t1, t2, t3, t4, t5, t6, t7 FROM log4jLogs WHERE t4 = '[ERROR]' AND INPUT__FILE__NAME LIKE '%.log';
    

    تقوم الأوامر بالإجراءات الآتية:

    البيان الوصف
    إنشاء جدول إذا لم يكن موجوداً إذا لم يكن الجدول موجوداً، سيتم إنشاؤه. نظرا لعدم استخدام الكلمة الأساسية الخارجية، ينشئ جدول داخلي. يتم تخزين الجداول الداخلية في مستودع بيانات Hive ويتم إدارتها بالكامل بواسطة Hive أيضاً.
    يخزّن كملف تخزين عمودي مُحسن ORC تخزين البيانات بتنسيق عمود صف مُحسن (ORC). تنسيق ORC هو تنسيق محسن وفعال للغاية لتخزين بيانات Hive.
    إدراج بيانات جديدة وحذف البيانات القديمة ... اختار تحديد صفوف من جدول log4jLogs التي تحتوي على [خطأ]، ثم إدراج البيانات في جدول errorLogs.

    ملاحظة

    على عكس الجداول الخارجية، يؤدي إسقاط جدول داخلي إلى حذف البيانات الأساسية أيضا.

  3. لحفظ الملف، استخدم Ctrl+X، ثم أدخل Y، ثم أدخلأخيرا.

  4. استخدم التالي لتشغيل الملف باستخدام Beeline:

    beeline -u 'jdbc:hive2://headnodehost:10001/;transportMode=http' -i query.hql
    

    ملاحظة

    المعلمة -i تبدأ Beeline ثم تشغل العبارات في ملف query.hql. بمجرد اكتمال الاستعلام، تصل إلى المطالبة jdbc:hive2://headnodehost:10001/>. يمكنك أيضا تشغيل ملف باستخدام المعلمة -f التي تُنهي Beeline بعد اكتمال الاستعلام.

  5. للتحقق من إنشاء جدول errorLogs استخدم العبارة التالية لإرجاع جميع الصفوف من errorLogs:

    SELECT * from errorLogs;
    

    يجب إرجاع ثلاثة صفوف من البيانات، تحتوي جميعها على [خطأ] في العمود t4:

    +---------------+---------------+---------------+---------------+---------------+---------------+---------------+--+
    | errorlogs.t1  | errorlogs.t2  | errorlogs.t3  | errorlogs.t4  | errorlogs.t5  | errorlogs.t6  | errorlogs.t7  |
    +---------------+---------------+---------------+---------------+---------------+---------------+---------------+--+
    | 2012-02-03    | 18:35:34      | SampleClass0  | [ERROR]       | incorrect     | id            |               |
    | 2012-02-03    | 18:55:54      | SampleClass1  | [ERROR]       | incorrect     | id            |               |
    | 2012-02-03    | 19:25:27      | SampleClass4  | [ERROR]       | incorrect     | id            |               |
    +---------------+---------------+---------------+---------------+---------------+---------------+---------------+--+
    3 rows selected (0.813 seconds)
    

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