كيفية تثبيت وتكوين HIVE M1Astore مع MYSQL

⚡ ملخص ذكي

يخزن مستودع بيانات Hive التعريفية كل تعريف جدول واسم عمود ونوع بيانات خلف Apache Hive، ونقل هذا المستودع من قاعدة بيانات Derby الافتراضية إلى MySQL وهذا ما يسمح لعدة مستخدمين بالاتصال في وقت واحد.

  • 🗄️ ما يحتويه: يحتفظ مخزن البيانات الوصفية ببيانات تعريف المخطط في جداول علائقية، بينما تبقى بيانات الجدول نفسها على نظام ملفات Hadoop الموزع (HDFS).
  • 🚫 لماذا فشل ديربي؟ يقبل مخزن البيانات الوصفية المدمج في Derby جلسة نشطة واحدة، مما يستبعد استخدامه لأي مجموعة مشتركة أو إنتاجية.
  • 🔧 أربع خصائص: الاتصالURLتشير عناصر ConnectionDriverName و ConnectionUserName و ConnectionPassword في ملف hive-site.xml إلى Hive في MySQL.
  • 🔗 موضع السائق: استخدم MySQL يجب ربط موصل JDBC بدليل مكتبة Hive قبل نجاح أي محاولة اتصال.
  • 🧱 المخطط أولاً: تقوم أداة schematool بإنشاء جداول metastore، ويرفض Hive البدء باستخدام مخطط غير مهيأ.
  • 🔎 تحقق في MySQL: يظهر الجدول الذي تم إنشاؤه في Hive على الفور كصف في جدول TBLS الخاص بقاعدة بيانات metastore.

كيفية تثبيت وتكوين مخزن بيانات Hive باستخدام MySQL

ما هو متجر HIVE للأثاث؟

مخزن بيانات Hive هو مستودع يخزن البيانات الوصفية (أسماء الأعمدة، وأنواع البيانات، والتعليقات، وما إلى ذلك) المتعلقة بـ اباتشي خلية استخدام MySQL or PostgreSQL. يتم تنفيذ هذا Hive metastore باستخدام الجداول الموجودة في قاعدة بيانات علائقية.

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

لماذا تستخدم MySQL في Hive باسم متجر

يُعدّ نظام إدارة البيانات الوصفية خيارًا، وليس جزءًا ثابتًا من Hive، والإعداد الافتراضي المُضمّن بسيطٌ عمدًا. ثلاثة قيود تدفع معظم عمليات التثبيت إلى الابتعاد عنه.

  • بشكل افتراضي، يأتي Hive مزودًا بقاعدة بيانات Derby كمخزن بيانات تعريفية.
  • لا يدعم برنامج ديربي سوى مستخدم واحد نشط في كل مرة.
  • لا يُنصح باستخدام ديربي في بيئة إنتاجية.

إذن الحل هنا هو

  • استعمل MySQL كمساحة تخزين بيانات وصفية في الواجهة الخلفية لربط عدة مستخدمين بـ Hive في وقت واحد
  • MySQL يُعد الخيار الأفضل لمتجر البيانات الوصفية المستقل

كيفية تثبيت وتكوين Hive MITEAstore MySQL قاعدة البيانات

تُنفَّذ الخطوات التسع التالية بالترتيب على جهاز مُثبَّت عليه مسبقًا كلٌّ من Hadoop وHive. وتنتهي كل خطوة بصورة شاشة لمخرجات الطرفية أو سطر الأوامر.

الخطوة 1) التثبيت MySQL المخدم
في هذه الخطوة، سنقوم بتنفيذ مهمتين

  1. تثبيت mysql-server
  2. فحص خادم MySQL وعملياته

باستخدام sudo apt-get install mysql-server أمر، يمكننا تنزيله MySQL الخادم. تثبيت MySQL كما هو موضح في لقطة الشاشة أدناه.

تشغيل الأمر sudo apt-get install mysql-server على الطرفية Ubuntu

بعد التثبيت الناجح ، MySQL سيتم تشغيله كما هو موضح في لقطة الشاشة أدناه، حيث يؤكد فحص العملية أن الخدمة تعمل.

تأكيد الطرفية على أن عملية خادم MySQL قيد التشغيل بعد التثبيت

الخطوة 2) التثبيت MySQL Java الموصل
تثبيت MySQL Java موصل. هذا لـ Java التبعيات وأغراض الاتصال، لأن Hive يصل MySQL عبر JDBC. تُظهر لقطة الشاشة التالية تثبيت الحزمة.

تثبيت مكتبة libmysql-java في الطرفية MySQL Java حزمة الموصلات

الخطوة 3) إنشاء رابط ناعم للموصل
إنشاء رابط رمزي للموصل في دليل مكتبة Hive. هذا هو الرابط الرمزي بين Java و MySQLوهذا ما يضع ملف JAR الخاص بالسائق في مسار فئة Hive. يظهر الأمر ونتيجته أدناه.

يقوم الطرفية بإنشاء رابط رمزي لـ MySQL ملف JAR الخاص بالموصل في دليل مكتبة Hive

الخطوة الرابعة: التهيئة MySQL التخزين في Hive
استخدم MySQL يجب فتح shell كحساب الجذر قبل إنشاء أي مستخدم Hive، كما هو موضح لاحقًا.

افتتاح المحطة MySQL shell باستخدام الأمر mysql -u root -p

  • اكتب mysql –u root –p متبوعًا بكلمة المرور
  • هنا، يمثل الرمز -u اسم المستخدم الجذر، ويشير الرمز -p إلى كلمة المرور.
  • بعد إدخال الأمر أعلاه، يتعين على المستخدم إدخال كلمة مرور صحيحة ثم الضغط على زر الإدخال (Enter).
  • ثم سيدخل في MySQL وضع الصدفة

الخطوة 5) إنشاء اسم المستخدم وكلمة المرور
إنشاء اسم مستخدم وكلمة مرور لـ MySQLومنح الصلاحيات. تُظهر لقطة الشاشة أدناه العبارات الثلاث التي يتم تشغيلها داخل MySQL قذيفة.

MySQL إنشاء حساب مستخدم Hive ومنحه الصلاحيات

علينا تنفيذ الأوامر كما هو موضح أدناه،

mysql> CREATE USER 'hiveuser'@'%' IDENTIFIED BY 'hivepassword'; 
mysql> GRANT all on *.* to 'hiveuser'@localhost identified by 'hivepassword';
mysql>  flush privileges;

On MySQL 8. لم يعد بالإمكان تحليل الصيغة المدمجة للعبارة الثانية، لأن عبارة IDENTIFIED BY قد أُزيلت من أمر GRANT. أنشئ الحساب أولاً ثم امنحه الصلاحيات، وكرر سطر CREATE USER لكل من المضيف المحلي (localhost) والمضيف ذي النطاق العام (wildcard).

الخطوة 6) تهيئة ملف hive-site.xml

  • بعد الخطوة الخامسة، يتم تعيين اسم مستخدم وكلمة مرور لـ MySQL قاعدة البيانات ومنح الامتيازات.
  • سنقوم هنا بضبط بعض الخصائص في Hive للحصول على اتصال مع MySQL قاعدة البيانات.

يتم فتح ملف التكوين من دليل Hive conf، كما توضح لقطة الشاشة التالية.

يفتح الطرفية ملف hive-site.xml للتعديل في دليل إعدادات Hive

تُظهر لقطة الشاشة التالية الملف النهائي مع جميع الخصائص الأربع في مكانها.

ملف hive-site.xml يعرض خصائص الاتصال الأربعة javax.jdo.option

من لقطة الشاشة أعلاه، نلاحظ ما يلي. هنا نحدد 4 خصائص ضرورية لإنشاء MySQL كمستودع بيانات تعريفية في Hive.

هذه كالتالي:

  1. هذه الخاصية مخصصة للاتصال URLهنا نُعرّف مفهوم الاتصالURL في هذه الخاصية. تعمل كسلسلة اتصال JDBC وتمثل موقع مخزن البيانات الوصفية أيضًا.
  2. هذه الخاصية مخصصة لاسم برنامج تشغيل الاتصال. هنا، com.mysql.jdbc.Driver هي القيمة التي يجب ذكرها في علامة القيمة.
  3. تُستخدم هذه الخاصية لتحديد اسم مستخدم الاتصال. في هذا المثال، حددنا "hiveuser" كاسم المستخدم.
  4. تُستخدم هذه الخاصية لتحديد كلمة مرور الاتصال. في هذا المثال، حددنا "hivepassword" ككلمة مرور المستخدم.

بعد وضع الخصائص في ملف hive-site.xml، يجب حفظ الملف يدويًا (Ctrl+S) وإغلاقه. بعد إغلاق هذا الملف، يجب إنشاء جدول Hive والتحقق من تفاصيل الجدول في MySQL تخزين.

ضع هذا الكود في hive-site.xml

خلية-site.xml

<configuration>
	<property>
		<name>javax.jdo.option.ConnectionURL</name>
		<value>jdbc:mysql://localhost/metastore?createDatabaseIfNotExist=true</value>
		<description>metadata is stored in a MySQL server</description>
	</property>
	<property>
		<name>javax.jdo.option.ConnectionDriverName</name>
		<value>com.mysql.jdbc.Driver</value>
		<description>MySQL JDBC driver class</description>
	</property>
	<property>
		<name>javax.jdo.option.ConnectionUserName</name>
		<value>hiveuser</value>
		<description>user name for connecting to mysql server</description>
	</property>
	<property>
		<name>javax.jdo.option.ConnectionPassword</name>
		<value>hivepassword</value>
		<description>password for connecting to mysql server</description>
	</property>
</configuration>

تعتمد القيمتان المذكورتان أعلاه على إصدار الموصل المستخدم. MySQL أعاد Connector/J 8 تسمية فئة برنامج التشغيل إلى com.mysql.cj.jdbc.Driver، ويتوقع أيضًا منفذًا وإعداد SSL صريحين، لذا فهو حديث URL عادةً ما يكون عنوان URL هو jdbc:mysql://localhost:3306/metastore?createDatabaseIfNotExist=true&useSSL=false. ولأن كلمة المرور موجودة كنص عادي، يجب أن يكون الملف قابلاً للقراءة فقط بواسطة حساب خدمة Hive.

الخطوة 7) إنشاء الجدول
قم بإنشاء جدول "guru99" في Hive، كما هو موضح في واجهة Hive أدناه.

إنشاء جدول guru99 باستخدام Hive shell، مع عمود من نوع عدد صحيح وعمود من نوع سلسلة نصية.

من لقطة الشاشة أعلاه، يمكننا ملاحظة ما يلي

  • إنشاء جدول باسم "guru99" يحتوي على اسمين للعمودين
  • تم ذكر أسماء الأعمدة مع أنواع بياناتها، أحدهما عدد صحيح والآخر سلسلة نصية

في الخطوة التالية، سنتحقق مما إذا كان مخزناً في MySQL أم لا.

الخطوة 8) الدخول إلى MySQL وضع الصدفة
يتم تحديد قاعدة بيانات metastore أولاً، ويتم عرض قائمة الجداول التي تليها أدناه.

MySQL استخدم الأمر `use metastore` في سطر الأوامر لعرض جداول البيانات الوصفية. ثم استخدم الأمر `show tables` لعرض جداول البيانات الوصفية.

من لقطة الشاشة أعلاه، يمكننا ملاحظة ما يلي

  • أولاً، علينا تحديد قاعدة البيانات باستخدام "استخدام مخزن البيانات الوصفية".
  • بمجرد اختيار مخزن البيانات الوصفية، يمكننا التحقق من الجداول الموجودة فيه باستخدام الأمر "show tables" كما هو موضح في لقطة الشاشة.
  • بغض النظر عن الجداول التي يتم إنشاؤها في Hive، يتم تخزين البيانات الوصفية المقابلة لتلك الجداول ضمن TBLS في MySQL قاعدة بيانات
  • يتم إنشاء جدول "guru99" في Hive، لذا يتم تخزين البيانات الوصفية المقابلة في MySQL تحت TBLS

الخطوة 9) أدخل حدد * من TBLS
التحقق مما إذا كان الجدول الذي تم إنشاؤه موجودًا في MySQL أو لا. يظهر الاستعلام ونتيجته في لقطة الشاشة أدناه.

MySQL يقوم shell بتشغيل الأمر select * from TBLS وعرض صف الجدول guru99

من خلال إدخال تحديد * من TBLS، سيتم عرض الجداول التي أنشأناها في وضع Hive Shell

من لقطة الشاشة أعلاه يمكننا ملاحظة الأشياء التالية:

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

كيفية تهيئة مخطط Hive Metatastore باستخدام schematool

علامة createDatabaseIfNotExist في الاتصال URL يُنشئ قاعدة بيانات فارغة، لكنه لا يُنشئ الجداول السبعين تقريبًا التي يتوقعها Hive بداخلها. في Hive 1.x والإصدارات الأحدث، تقع هذه المهمة على عاتق أداة schematool، لذا يُنصح بتجاوزها.ping وهو السبب الأكثر شيوعًا لرفض مخزن البيانات الوصفية الذي تم تكوينه حديثًا البدء.

$HIVE_HOME/bin/schematool -dbType mysql -initSchema

يقرأ الأمر نفس الخصائص الأربع من ملف hive-site.xml، ويتصل بحساب مستخدم Hive، ثم يُشغّل نص SQL المرفق الذي يتوافق مع إصدار Hive. عند نجاح العملية، تظهر رسالة تأكيد، وبعدها يمكن التحقق من الحالة في أي وقت.

$HIVE_HOME/bin/schematool -dbType mysql -info

تغطي العلامات أدناه دورة حياة مخطط البيانات الوصفية بالكامل.

خيار ماذا يفعل
-dbType يُحدد اسم قاعدة البيانات الخلفية، مثل mysql أو derby أو postgres أو oracle أو mssql
-initSchema يقوم بإنشاء جداول البيانات الوصفية لإصدار Hive الحالي
-معلومات يعرض إصدار المخطط المسجل في قاعدة البيانات
-ترقية المخطط يقوم بنقل مخطط موجود بعد ترقية Hive
-تحقق يتحقق من المخطط بحثًا عن الجداول المفقودة وعدم تطابق الإصدارات.

هناك خاصية ذات صلة يجدر معرفتها قبل البدء الأول. عندما تكون قيمة hive.metastore.schema.verification صحيحة، يقارن Hive إصدار المخطط في MySQL يتعارض مع نفسه ويرفض التشغيل في حالة عدم التوافق. هذا الفحص هو إجراء وقائي، لذا فإن الاستجابة الصحيحة هي تشغيل الترقية بدلاً من إيقافها. MySQL يتم استخدام الواجهة الخلفية بواسطة تثبيت Hive المشمول في قم بتثبيت Hive على Ubuntu.

أخطاء شائعة في متجر Hive وكيفية إصلاحها

معظم حالات الفشل في هذه المرحلة تنتج واحدة من عدد قليل من الرسائل، وتشير كل منها إلى خطوة محددة أعلى بدلاً من الإشارة إلى Hive نفسه.

عرض السبب والحل
لم يتم العثور على معلومات الإصدار في مخزن البيانات الوصفية لم يتم إنشاء المخطط مطلقًا. شغّل أداة schematool مع الخيار -initSchema على قاعدة البيانات نفسها المُسماة في الاتصال. URL
استثناء ClassNotFoundException لبرنامج تشغيل JDBC ملف JAR الخاص بالموصل مفقود من مجلد مكتبة Hive، أو أن الإصدار 8 من Connector/J قيد الاستخدام، والفئة الآن هي com.mysql.cj.jdbc.Driver. أعد التحقق من الرابط الرمزي من الخطوة 3.
تم رفض الوصول للمستخدم hiveuser تم منح الصلاحيات لمضيف واحد فقط. أنشئ حسابًا لكل من المضيف المحلي والمضيف العام، ثم نفّذ الأمر flush privileges.
خطأ في بناء الجملة بالقرب من IDENTIFIED BY MySQL 8. قم بإزالة IDENTIFIED BY من عبارة GRANT. قم بتنفيذ CREATE USER أولاً ثم GRANT بعد ذلك.
لا يُسمح باسترجاع المفتاح العام يرفض موصل JDBC 8 المصافحة غير المشفرة افتراضيًا. أضف useSSL=false و allowPublicKeyRetrieval=true إلى JDBC URL على شبكة موثوقة
اختفت الجداول بعد ترقية Hive لا يزال المخطط مطابقًا للإصدار القديم. شغّل أداة schematool مع الخيار -upgradeSchema بدلاً من تعطيل التحقق من المخطط.

بمجرد أن يجيب مخزن البيانات الوصفية بشكل موثوق، يتم إنشاء تعريفات الجداول التي يسجلها باستخدام العبارات الموضحة في إنشاء وتعديل وحذف الجداول في Hive.

الأسئلة الشائعة

سفن هايف تدعم ديربي، MySQL, PostgreSQL, Oracle و Microsoft SQL Serverويقبل برنامج schematool كلًا منها عبر علامة -dbType. ويبقى Derby هو الخيار الافتراضي ويقتصر استخدامه على جلسة واحدة.

يقوم النظام المدمج بتشغيل Derby داخل عملية Hive. أما النظام المحلي فيقوم بتشغيل كود مخزن البيانات الوصفية داخل Hive ولكن على قاعدة بيانات خارجية مثل MySQL. يقوم Remote بتشغيل مخزن البيانات الوصفية كخدمة Thrift خاصة به يتشاركها العديد من العملاء.

تُسجّل قواعد بيانات DBS، وجداول سجلات TBLS، وتعريفات أعمدة سجلات COLUMNS_V2، ومُعرّفات تخزين سجلات SDS، وإدخالات أقسام سجلات PARTITIONS. هذه الأسماء داخلية، لذا يُرجى الاستعلام عنها للاطلاع عليها بدلاً من تعديلها يدويًا.

قم بتخزينها في مخزن مفاتيح موفر بيانات اعتماد Hadoop، ووجّه hive.metastore.credential.provider.path إلى ذلك الملف، ثم احذف القيمة الأصلية. يُعد تقييد أذونات الملف hive-site.xml الحد الأدنى من الحلول البديلة.

تبقى الملفات على نظام ملفات Hadoop الموزع (HDFS) سليمة، ولكن كل تعريف للجدول والقسم والعمود يختفي، ولا يستطيع Hive قراءتها. MySQL وبالتالي، فإن نسخ قاعدة بيانات metastore تُعد جزءًا من النسخ الاحتياطي العادي للمجموعة.

تستمع خدمة Thrift metastore على المنفذ 9083 افتراضيًا، والذي يتم ضبطه من خلال hive.metastore.port. يصل العملاء إليها باستخدام hive.metastore.uris بدلاً من بيانات اعتماد JDBC المباشرة، مما يحافظ على كلمة مرور قاعدة البيانات بعيدة عن أجهزة العملاء.

نعم. يكشف نظام كشف الشذوذ في سجلات استعلامات قاعدة البيانات الوصفية عن ارتفاعات مفاجئة في عدد الاستدعاءات، وبطء في عرض الأقسام، ونمو غير طبيعي في الجداول قبل انتهاء مهلة العمليات. يُحدد النموذج الأسباب المحتملة، ويؤكد المسؤول السبب النهائي.

يقوم Copilot بصياغة كتلة خصائص javax.jdo.option من تعليق قصير، ويمكن للمساعدين الآليين برمجة الإعداد بالكامل. تحقق من فئة برنامج التشغيل والمنفذ، لأن بيانات التدريب لا تزال تفضل اسم الموصل القديم.

تلخيص هذه التدوينة بـ: