Apache Phoenix في Azure HDInsight

يُعد Apache Phoenix طبقة قاعدة بيانات مفتوحة المصدر ارتباطية متوازية بصورة كبيرة مضمنة في Apache HBase. يسمح لك Phoenix باستخدام استعلامات مثل SQL عبر HBase. يستخدم Phoenix برامج تشغيل JDBC أدناه لتمكين المستخدمين من إنشاء، وحذف، وتغيير جداول، وفهارس، وطرق عرض، وتسلسل SQL، وupsert rows بشكل فردي وبكميات كبيرة. يستخدم Phoenix التحويل الأصلي لدى noSQL بدلاً من استخدام MapReduce لتحويل الاستعلامات، مما يتيح إمكانية إنشاء تطبيقات بزمن انتقال بطيء على HBase. يضيف Phoenix معالجات ثانوية لدعم تشغيل التعليمة البرمجية المقدمة من العميل في مساحة عنوان الخادم، وتنفيذ التعليمة البرمجية مع البيانات. يقلل هذا النهج نقل بيانات العميل/الخادم.

يفتح Apache Phoenix استعلامات البيانات الضخمة لغير المطورين الذين يمكنهم استخدام بناء جملة يشبه SQL بدلًا من البرمجة. Phoenix هو الأمثل للغاية لHBase، على عكس غيرها من الأدوات مثل Apache Hive وApache Spark SQL. الفائدة للمطورين هو كتابة استعلامات عالية الأداء مع رمز أقل بكثير.

عند إرسال استعلام SQL، تقوم Phoenix بتجميع الاستعلام إلى مكالمات أصلية HBase ثم تشغيل المسح الضوئي (أو خطة) بالتوازي للتحسين. تُحرر هذه الطبقة من التجريد المطور من كتابة مهام MapReduce، للتركيز بدلًا من ذلك على منطق العمل وسير العمل لتطبيقها حول تخزين البيانات الضخمة في Phoenix.

تحسين أداء الاستعلام وميزات أخرى

يضيف Apache Phoenix العديد من تحسينات الأداء وميزاته إلى استعلامات HBase.

الفهارس الثانوية

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

إنشاء فهرس ثانوي باستخدام الأمر CREATE INDEX:

CREATE INDEX ix_purchasetype on SALTEDWEBLOGS (purchasetype, transactiondate) INCLUDE (bookname, quantity);

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

طرق العرض

توفر طرق عرض Phoenix طريقة للتغلب على قيود HBase، حيث يبدأ الأداء في الانخفاض عندما تُنشئ أكثر من 100 جدول فعلي. تمكن طرق عرض Phoenix جداول ظاهرية متعددة لمشاركة جدول HBase فعلي أساسي.

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

على سبيل المثال، إليك جدول فعلي يسمى product_metrics بالتعريف التالي:

CREATE  TABLE product_metrics (
    metric_type CHAR(1)  NOT NULL,
    created_by VARCHAR,
    created_date DATE  NOT NULL,
    metric_id INTEGER  NOT NULL
    CONSTRAINT pk PRIMARY KEY (metric_type, created_by, created_date, metric_id));

تعريف طريقة عرض فوق هذا الجدول، مع المزيد من الأعمدة:

CREATE VIEW mobile_product_metrics (carrier VARCHAR, dropped_calls BIGINT) AS
SELECT * FROM product_metrics
WHERE metric_type = 'm';

لإضافة المزيد من الأعمدة لاحقًا، استخدم عبارة ALTER VIEW.

تخطي الفحص

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

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

الحركات

بينما يوفر HBase المعاملات على مستوى الصف، فإن Phoenix يدمج مع Tephra لإضافة معاملات عبر الصف وعبر الجدول مدعومة بدلالات ACID كاملة.

كما هو الحال مع معاملات SQL التقليدية، تسمح لك المعاملات المقدمة من خلال مدير معاملات Phoenix بالتأكد من رفع مستوى وحدة البيانات الذرية بنجاح، والعودة إلى الحالة السابقة للمعاملة إذا فشلت العملية المحدثة على أي جدول ممكن للمعاملة.

لتمكين معاملات Phoenix، راجع وثائق معاملات Apache Phoenix.

لإنشاء جدول جديد مع المعاملات الممكنة، قم بتعيين TRANSACTIONAL الخاصية إلى true في عبارةCREATE:

CREATE TABLE my_table (k BIGINT PRIMARY KEY, v VARCHAR) TRANSACTIONAL=true;

لتغيير جدول موجود ليكون معاملات، استخدم نفس الخاصية في عبارة ALTER:

ALTER TABLE my_other_table SET TRANSACTIONAL=true;

إشعار

لا يمكنك تبديل جدول معاملات إلى جدول غير معاملات.

جداول البيانات العشوائية

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

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

CREATE TABLE Saltedweblogs (
    transactionid varchar(500) Primary Key,
    transactiondate Date NULL,
    customerid varchar(50) NULL,
    bookid varchar(50) NULL,
    purchasetype varchar(50) NULL,
    orderid varchar(50) NULL,
    bookname varchar(50) NULL,
    categoryname varchar(50) NULL,
    invoicenumber varchar(50) NULL,
    invoicestatus varchar(50) NULL,
    city varchar(50) NULL,
    state varchar(50) NULL,
    paymentamount DOUBLE NULL,
    quantity INTEGER NULL,
    shippingamount DOUBLE NULL) SALT_BUCKETS=4;

تمكين وتناغم Phoenix مع pache Ambari

تتضمن مجموعة HBase HDInsight واجهة المستخدم Ambari لإجراء تغييرات التكوين.

  1. لتمكين Phoenix أو تعطيله، والتحكم في إعدادات مهلة الاستعلام الخاصة بـ Phoenix، قم بتسجيل الدخول إلى واجهة مستخدم ويب Ambari (https://YOUR_CLUSTER_NAME.azurehdinsight.net) باستخدام بيانات اعتماد مستخدم Hadoop الخاصة بك.

  2. حدد HBase من قائمة الخدمات في القائمة اليسرى، ثم حدد علامة التبويب Configs.

    تكوينات Apache Ambari HBase.

  3. ابحث عن المقطع تكوين phoenix SQL لتمكين phoenix أو تعطيله، ثم قم بتعيين مهلة الاستعلام.

    قسم تكوين Ambari Phoenix SQL.

(راجع أيضًا )