استخدام أداة Apache HBase HBCK2
توضح لك هذه المقالة كيفية استخدام أداة HBase HBCK2. HBCK2 هي أداة الإصلاح لمجموعات Apache HBase.
نظرة عامة على HBCK2
HBCK2 هي حاليا أداة بسيطة تقوم بشيء واحد فقط في كل مرة. في hbase-2.x، الشكل الرئيسي هو الحكم النهائي لجميع الحالات، لذلك فإن المبدأ العام لمعظم أوامر HBCK2 هو أنه يطلب من الرئيس إجراء جميع الإصلاحات.
يجب أن يكون Master قيد التشغيل قبل أن تتمكن من تشغيل أوامر HBCK2. أجرى HBCK1 تحليلا وأبلغ عن مجموعتك على أنها جيدة أو سيئة، ولكن HBCK2 أقل افتراضا. في hbase-2.x، يحدد المشغل ما يجب إصلاحه ثم يستخدم الأدوات، بما في ذلك HBCK2، لإجراء الإصلاحات.
HBCK2 مقابل HBCK1
HBCK2 هو خلف HBCK، أداة الإصلاح التي تم شحنها مع hbase-1.x (المعروفة أيضا باسم HBCK1). يمكنك استخدام HBCK2 بدلا من HBCK1 لإجراء إصلاحات مقابل مجموعات hbase-2.x. لا ينبغي تشغيل HBCK1 مقابل تثبيت hbase-2.x لأنه قد يحدث تلفا. تمت إزالة مرفق الكتابة الخاص به (-fix
). يمكنه الإبلاغ عن حالة نظام مجموعة hbase-2.x، ولكن تقييماته غير دقيقة لأنه لا يفهم الأعمال الداخلية ل hbase-2.x.
لا يعمل HBCK2 بالطريقة التي اعتاد عليها HBCK1، حتى في الحالات التي يتم فيها تسمية الأوامر بشكل مماثل عبر الإصدارين.
الحصول على HBCK2
يمكنك العثور على الإصدار ضمن دليل توزيع HBase. لمزيد من المعلومات، راجع صفحة تنزيلات HBase.
واجهة المستخدم الرئيسية: تقرير HBCK
تظهر صفحة تقرير HBCK المضافة إلى الشكل الرئيسي في 2.1.6 في /hbck.jsp
الإخراج من فحصين يتم تشغيلهما بواسطة Master على فاصل زمني. أحدهما هو الإخراج حسب CatalogJanitor
كلما تم تشغيله. إذا تم العثور على تداخلات أو ثقوب في hbase:meta
، يسرد CatalogJanitor
ما عثر عليه. تقارن عملية خلفية chore
أخرى محتوى نظام الملفات hbase:meta
و. إذا تم العثور على حالة شاذة، فإنه يقوم بتدوين ملاحظة في قسم تقرير HBCK الخاص به.
لتشغيل CatalogJanitor
، قم بتنفيذ الأمر في hbase shell: catalogjanitor_run
.
لتشغيل hbck chore
، قم بتنفيذ الأمر في hbase shell: hbck_chore_run
.
لا يأخذ كلا الأمرين أي مدخلات.
تشغيل HBCK2
يمكنك تشغيل hbck
الأمر عن طريق تشغيله عبر $HBASE_HOME/bin/hbase
البرنامج النصي. بشكل افتراضي، عند تشغيل bin/hbase hbck
، يتم تشغيل أدوات HBCK1 المضمنة. لتشغيل HBCK2، تحتاج إلى الإشارة إلى جرة HBCK2 مضمنة -j
باستخدام الخيار ، كما هو الحال في هذا المثال:
hbase --config /etc/hbase/conf hbck -j ~/hbase-operator-tools/hbase-hbck2/target/hbase-hbck2-1.x.x-SNAPSHOT.jar
يطبع هذا الأمر تعليمات HBCK2، دون تمرير الخيارات أو الوسيطات.
أوامر HBCK2
ملاحظة
اختبر هذه الأوامر على نظام مجموعة اختبار لفهم الوظائف قبل تشغيلها في بيئة إنتاج.
assigns [OPTIONS] <ENCODED_REGIONNAME/INPUTFILES_FOR_REGIONNAMES>... | -i <INPUT_FILE>...
خيارات:
-o,--override
: يتجاوز الملكية عن طريق إجراء آخر.-i,--inputFiles
: يأخذ اسما واحدا أو أكثر من أسماء المناطق المشفرة.
يمكن استخدام هذا raw
التعيين حتى أثناء التهيئة الرئيسية (إذا تم تحديد العلامة -skip
). فهو ينورة المعالجات المشتركة ويمرر اسما واحدا أو أكثر من أسماء المناطق المشفرة. de00010733901a05f5a2a3a382e27dd4
هو مثال على ما يبدو عليه اسم المنطقة المشفرة لمساحة المستخدم. على سبيل المثال:
hbase --config /etc/hbase/conf hbck -j ~/hbase-operator-tools/hbase-hbck2/target/hbase-hbck2-1.x.x-SNAPSHOT.jar assigns de00010733901a05f5a2a3a382e27dd4
يقوم بإرجاع PIDs للمنشأة AssignProcedures
أو -1 إذا لم يكن أي منها. إذا -i or --inputFiles
تم تحديده، فإنه يمرر اسما واحدا أو أكثر من أسماء ملفات الإدخال. يحتوي كل ملف على أسماء مناطق مشفرة، واحدة لكل سطر. على سبيل المثال:
hbase --config /etc/hbase/conf hbck -j ~/hbase-operator-tools/hbase-hbck2/target/hbase-hbck2-1.x.x-SNAPSHOT.jar assigns -i fileName1 fileName2
unassigns [OPTIONS] <ENCODED_REGIONNAME>...| -i <INPUT_FILE>...
خيارات:
-o,--override
: يتجاوز الملكية عن طريق إجراء آخر.-i,--inputFiles
: يأخذ منها أو أكثر من ملفات الإدخال من الأسماء المشفرة.
يمكن استخدام هذا raw
إلغاء التعيين حتى أثناء التهيئة الرئيسية (إذا تم تحديد العلامة -skip
). فهو ينورة المعالجات المشتركة ويمرر اسما واحدا أو أكثر من أسماء المناطق المشفرة. de00010733901a05f5a2a3a382e27dd4
مثال على ما يبدو عليه اسم المنطقة المشفرة لتجاوز المستخدم للمساحة. على سبيل المثال:
hbase --config /etc/hbase/conf hbck -j ~/hbase-operator-tools/hbase-hbck2/target/hbase-hbck2-1.x.x-SNAPSHOT.jar unassign de00010733901a05f5a2a3a382e27dd4
يقوم بإرجاع PIDs للمنشأة UnassignProcedures
أو -1 إذا لم يكن أي منها. إذا -i or --inputFiles
تم تحديده، فإنه يمرر اسما واحدا أو أكثر من أسماء ملفات الإدخال. يحتوي كل ملف على أسماء مناطق مشفرة، واحدة لكل سطر. على سبيل المثال:
hbase --config /etc/hbase/conf hbck -j ~/hbase-operator-tools/hbase-hbck2/target/hbase-hbck2-1.x.x-SNAPSHOT.jar unassigns fileName1 -i fileName2
bypass [OPTIONS] <PID>...
خيارات:
-o,--override
: يتجاوز إذا كان الإجراء قيد التشغيل أو عالقا.-r,--recursive
: يتجاوز الأصل وأبنائه. هذا الخيار بطيء ومكلفة.-w,--lockWait
: ينتظر بالمللي ثانية قبل الاستسلام. Default=1.-i,--inputFiles
: يأخذ ملف إدخال واحد أو أكثر من PIDs.
يمرر واحدا أو أكثر من PIDs لإجراء لتخطي إلى انتهاء الإجراء. يتخطى أصل الإجراء الذي تم تجاوزه إلى النهاية. يتم ترك الكيانات في حالة غير متناسقة وتتطلب إصلاحا يدويا. قد يحتاج إلى إعادة تشغيل رئيسية لمسح الأقفال التي لا تزال محفوظة. يفشل التجاوز إذا كان الإجراء يحتوي على أطفال. أضف recursive
إذا كان كل ما لديك هو PID أصل لإنهاء الأصل والأولاد. هذا الخيار بطيء وخطير، لذا استخدمه بشكل انتقائي. لا يعمل دائما.
hbase --config /etc/hbase/conf hbck -j ~/hbase-operator-tools/hbase-hbck2/target/hbase-hbck2-1.x.x-SNAPSHOT.jar bypass <PID>
إذا -i or --inputFiles
تم تحديده، فمرر اسما واحدا أو أكثر من أسماء ملفات الإدخال. يحتوي كل ملف على PIDs، واحد لكل سطر. على سبيل المثال:
hbase --config /etc/hbase/conf hbck -j ~/hbase-operator-tools/hbase-hbck2/target/hbase-hbck2-1.x.x-SNAPSHOT.jar bypass -i fileName1 fileName2
reportMissingRegionsInMeta <NAMESPACE|NAMESPACE:TABLENAME>... | -i <INPUT_FILE>...
الخيار:
i,--inputFiles
: يأخذ ملف إدخال واحد أو أكثر من مساحة الاسم أو أسماء الجداول.
استخدم هذا الخيار عندما تكون المناطق مفقودة من hbase:meta
ولكن عندما لا تزال الدلائل موجودة في HDFS. هذا الأمر هو أسلوب فحص فقط. تم تصميمه لأغراض إعداد التقارير ولا يقوم بأي إصلاحات. يوفر طريقة عرض للمناطق (إن وجدت) التي ستتم إعادة إضافتها إلى hbase:meta
، مجمعة حسب الجدول أو مساحة الاسم المعنية.
للمناطق المقروءة بفعالية في التعريف، قم بتشغيل addFsRegionsMissingInMeta
. يجب hbase:meta
أن يكون هذا الأمر متصلا بالإنترنت. لكل مساحة اسم/جدول تم تمريره كمعلمة، فإنه يقوم بإجراء تباعد بين المناطق المتوفرة في hbase:meta
مقابل dirs المناطق الموجودة على HDFS. تتم طباعة diات المنطقة بدون تطابقات مجمعة تحت اسم الجدول ذي الصلة. تظهر الجداول التي لا تحتوي على مناطق مفقودة رسالة "لا توجد مناطق مفقودة". إذا لم يتم تحديد مساحة اسم أو جدول، فإنه يتحقق من جميع المناطق الموجودة.
يقبل مجموعة من مساحات الأسماء والجداول المتعددة. يجب أن تتضمن أسماء الجداول جزء مساحة الاسم، حتى بالنسبة للجداول في مساحة الاسم الافتراضية. وإلا، فإنه يفترض قيمة مساحة الاسم. يؤدي هذا المثال إلى تشغيل تقارير المناطق المفقودة للجداول table_1
و table_2
، ضمن مساحة اسم افتراضية:
hbase --config /etc/hbase/conf hbck -j ~/hbase-operator-tools/hbase-hbck2/target/hbase-hbck2-1.x.x-SNAPSHOT.jar reportMissingRegionsInMeta default:table_1 default:table_2
يؤدي هذا المثال إلى تشغيل تقرير المناطق المفقودة للجدول table_1
ضمن مساحة اسم افتراضية، ولكل الجداول من مساحة ns1
الاسم :
hbase --config /etc/hbase/conf hbck -j ~/hbase-operator-tools/hbase-hbck2/target/hbase-hbck2-1.x.x-SNAPSHOT.jar reportMissingRegionsInMeta default:table_1 ns1
يقوم بإرجاع قائمة بالمناطق المفقودة لكل جدول تم تمريره كمعلمة، أو لكل جدول على مساحات الأسماء المحددة كمعلمة. إذا -i or --inputFiles
تم تحديده، فإنه يمرر اسما واحدا أو أكثر من أسماء ملفات الإدخال. يحتوي كل ملف على <NAMESPACE|NAMESPACE:TABLENAME>
، واحد لكل سطر. على سبيل المثال:
hbase --config /etc/hbase/conf hbck -j ~/hbase-operator-tools/hbase-hbck2/target/hbase-hbck2-1.x.x-SNAPSHOT.jar reportMissingRegionsInMeta -i fileName1 fileName2
addFsRegionsMissingInMeta <NAMESPACE|NAMESPACE:TABLENAME>... | -i <INPUT_FILE>...
الخيار:
-i,--inputFiles
: يأخذ ملف إدخال واحد أو أكثر من أسماء جداول مساحة الاسم لاستخدامها عندما تكون المناطق مفقودة منhbase:meta
ولكن الدلائل لا تزال موجودة في HDFS. يجبhbase:meta
أن تكون متصلا بالإنترنت.
لكل اسم جدول تم تمريره كمعلمة، فإنه يقوم بإجراء تباعد بين المناطق المتوفرة في hbase:meta
ومناطق dirs على HDFS. ثم بالنسبة إلى dirs بدون hbase:meta
تطابقات، فإنه يقرأ regioninfo
ملف بيانات التعريف ويعيد إنشاء منطقة معينة في hbase:meta
. تتم إعادة إنشاء المناطق في حالة CLOSED في hbase:meta
الجدول، ولكن ليس في Masters
ذاكرة التخزين المؤقت. لم يتم تعيينها أيضا. للحصول على هذه المناطق عبر الإنترنت، قم بتشغيل الأمر HBCK2 assigns
المطبوع عند انتهاء تشغيل هذا الأمر.
إذا كنت تستخدم إصدارات hbase أقدم من 2.3.0، يلزم إعادة تشغيل HMasters قبل تنفيذ مجموعة assigns
الإخراج. يضيف هذا المثال مناطق مفقودة للجداول tbl_1
في مساحة الاسم الافتراضية، tbl_2
وفي مساحة n1
الاسم، ولكل الجداول من مساحة n2
الاسم :
hbase --config /etc/hbase/conf hbck -j ~/hbase-operator-tools/hbase-hbck2/target/hbase-hbck2-1.x.x-SNAPSHOT.jar addFsRegionsMissingInMeta default:tbl_1 n1:tbl_2 n2
يقوم بإرجاع HBCK2 والأمر assigns
مع جميع المناطق التي تمت إعادة إدخالها. إذا -i or --inputFiles
تم تحديده، فإنه يمرر اسما واحدا أو أكثر من أسماء ملفات الإدخال. يحتوي كل ملف على <NAMESPACE|NAMESPACE:TABLENAME>
، واحد لكل سطر. على سبيل المثال:
hbase --config /etc/hbase/conf hbck -j ~/hbase-operator-tools/hbase-hbck2/target/hbase-hbck2-1.x.x-SNAPSHOT.jar addFsRegionsMissingInMeta -i fileName1 fileName2
extraRegionsInMeta <NAMESPACE|NAMESPACE:TABLENAME>... | -i <INPUT_FILE>...
خيارات:
-f, --fix
: إصلاح التعريف عن طريق إزالة جميع المناطق الإضافية التي تم العثور عليها.-i,--inputFiles
: يأخذ ملف إدخال واحد أو أكثر من مساحة الاسم أو أسماء الجداول.
يبلغ عن المناطق الموجودة على hbase:meta
ولكن بدون دلائل ذات صلة على نظام الملفات. يجب hbase:meta
أن تكون متصلا بالإنترنت. لكل اسم جدول تم تمريره كمعلمة، فإنه ينفذ تباينا بين المناطق المتوفرة في hbase:meta
و dirs المنطقة على نظام الملفات المحدد. سيتم حذف مناطق إضافية من Meta إذا مرت بالخيار --fix
.
ملاحظة
قبل أن تقرر استخدام --fix
الخيار، يجدر التحقق مما إذا كانت المناطق الإضافية المبلغ عنها متداخلة مع المناطق الصالحة الحالية. إذا كان الأمر كذلك، فهذا extraRegionsInMeta --fix
هو الحل الأمثل. وإلا، assigns
فإن الأمر هو الحل الأبسط. يعيد إنشاء dirs للمناطق في نظام الملفات، إذا لم تكن موجودة.
يؤدي هذا المثال إلى تشغيل تقارير مناطق إضافية ضمن table_1
مساحة الاسم الافتراضية، ولكل الجداول من مساحة ns1
الاسم :
hbase --config /etc/hbase/conf hbck -j ~/hbase-operator-tools/hbase-hbck2/target/hbase-hbck2-1.x.x-SNAPSHOT.jar extraRegionsInMeta default:table_1 ns1
يؤدي هذا المثال إلى تشغيل تقارير مناطق إضافية ضمن table_1
مساحة الاسم الافتراضية، ولكل الجداول من مساحة ns1
الاسم مع خيار الإصلاح:
hbase --config /etc/hbase/conf hbck -j ~/hbase-operator-tools/hbase-hbck2/target/hbase-hbck2-1.x.x-SNAPSHOT.jar extraRegionsInMeta -f default:table_1 ns1
يقوم بإرجاع قائمة بالمناطق الإضافية لكل جدول تم تمريره كمعلمة، أو لكل جدول على مساحات الأسماء المحددة كمعلمة. إذا -i or --inputFiles
تم تحديده، فمرر اسما واحدا أو أكثر من أسماء ملفات الإدخال. يحتوي كل ملف على <NAMESPACE|NAMESPACE:TABLENAME>
، واحد لكل سطر. على سبيل المثال:
hbase --config /etc/hbase/conf hbck -j ~/hbase-operator-tools/hbase-hbck2/target/hbase-hbck2-1.x.x-SNAPSHOT.jar extraRegionsInMeta -i fileName1 fileName2
fixMeta
ملاحظة
لا يعمل هذا الخيار بشكل جيد مع HBase 2.1.6. لا نوصي باستخدامه على نظام مجموعة HBase 2.1.6.
قم بإصلاح من جانب الخادم للحالة السيئة أو غير المتسقة في hbase:meta
. تحتوي واجهة المستخدم الرئيسية على علامة تبويب جديدة HBCK Report
مطابقة تقوم بتفريغ التقارير التي تم إنشاؤها بواسطة أحدث تشغيل و catalogjanitor
جديد hbck chore
.
من الضروري أولا أن hbase:meta
تكون سليمة قبل إجراء أي إصلاحات أخرى. يقوم بإصلاح holes
و overlaps
، وإنشاء أدلة منطقة (فارغة) في HDFS لمطابقة المناطق المضافة إلى hbase:meta
.
هذا الأمر ليس نفس الأمر hbck1 القديم المسمى بالمثل. يعمل مقابل التقارير التي تم إنشاؤها بواسطة الأخير catalog_janitor
ويتم hbck chore
تشغيله. إذا لم يكن هناك شيء لإصلاحه، فإن التشغيل هو حلقة. وإلا، إذا كانت HBCK Report
واجهة المستخدم تبلغ عن مشاكل، فإن تشغيل المشكلات fixMeta
يمسح hbase:meta
المشكلات.
hbase --config /etc/hbase/conf hbck -j ~/hbase-operator-tools/hbase-hbck2/target/hbase-hbck2-1.x.x-SNAPSHOT.jar fixMeta
generateMissingTableDescriptorFile <NAMESPACE:TABLENAME>
يحاول هذا الأمر إصلاح جدول معزول عن طريق إنشاء ملف واصف جدول مفقود. هذا الأمر ليس له أي تأثير إذا كان مجلد الجدول مفقودا أو إذا كان .tableinfo
موجودا. (لا نتجاوز واصفات الجدول الموجودة.) يتحقق هذا الأمر أولا مما إذا كان TableDescriptor
مخزنا مؤقتا في HBase Master، وفي هذه الحالة يتم استرداده .tableinfo
وفقا لذلك. إذا TableDescriptor
لم يتم تخزينه مؤقتا في Master، فإنه ينشئ ملفا افتراضيا .tableinfo
بالعناصر التالية:
- اسم الجدول.
- قائمة عائلة العمود التي تم تحديدها استنادا إلى نظام الملفات.
- الخصائص الافتراضية لكل من
TableDescriptor
وColumnFamilyDescriptors
..tableinfo
إذا تم إنشاء الملف باستخدام المعلمات الافتراضية، فتأكد من التحقق من خصائص عائلة الجدول أو العمود لاحقا. (قم بتغييرها إذا لزم الأمر.) لا يغير هذا الأسلوب أي شيء في HBase. يكتب الملف الجديد.tableinfo
فقط إلى نظام الملفات. بالنسبة للجداول المعزولة، على سبيل المثال،ServerCrashProcedures
لتثبيتها، قد تحتاج إلى إصلاح الخطأ بعد إنشاء ملفات معلومات الجدول المفقودة.
hbase --config /etc/hbase/conf hbck -j ~/hbase-operator-tools/hbase-hbck2/target/hbase-hbck2-1.x.x-SNAPSHOT.jar generateMissingTableDescriptorFile namespace:table_name
replication [OPTIONS] [<NAMESPACE:TABLENAME>... | -i <INPUT_FILE>...]
خيارات:
-f, --fix
: إصلاح أي مشكلات في النسخ المتماثل تم العثور عليها.-i,--inputFiles
: يأخذ ملف إدخال واحد أو أكثر من أسماء الجداول.
يبحث عن قوائم انتظار النسخ المتماثل غير المنسوخة ويحذفها إذا اجتاز --fix
الخيار . يمرر اسم جدول للتحقق من وجود حاجز النسخ المتماثل وإزالة إذا .--fix
hbase --config /etc/hbase/conf hbck -j ~/hbase-operator-tools/hbase-hbck2/target/hbase-hbck2-1.x.x-SNAPSHOT.jar replication namespace:table_name
إذا -i or --inputFiles
تم تحديده، فإنه يمرر اسما واحدا أو أكثر من أسماء ملفات الإدخال. يحتوي كل ملف على <TABLENAME>
، واحد لكل سطر. على سبيل المثال:
hbase --config /etc/hbase/conf hbck -j ~/hbase-operator-tools/hbase-hbck2/target/hbase-hbck2-1.x.x-SNAPSHOT.jar replication -i fileName1 fileName2
setRegionState [<ENCODED_REGIONNAME> <STATE> | -i <INPUT_FILE>...]
الخيار:
-i,--inputFiles
: يأخذ ملف إدخال واحد أو أكثر من أسماء المناطق المرمزة وحالاتها.
حالات المنطقة المحتملة:
- دون اتصال
- فتح
- فتح
- CLOSIN
- مغلقه
- تقسيم
- تقسيم
- FAILED_OPEN
- FAILED_CLOSE
- دمج
- المدمجه
- SPLITTING_NEW
- MERGING_NEW
- ABNORMALLY_CLOSED
تحذير
هذا الخيار المحفوء بالمخاطر مخصص للاستخدام فقط كملاذ أخير.
تتضمن سيناريوهات المثال إلغاء التعيينات أو التعيينات التي لا يمكن المضي قدما لأن المنطقة في حالة غير متناسقة في hbase:meta
. على سبيل المثال، unassigns
يمكن متابعة الأمر فقط إذا تم تمرير منطقة في إحدى الحالات التالية: SPLITTING أو SPLIT أو MERGING أو OPEN أو CLOSING.
قبل تعيين حالة منطقة يدويا باستخدام هذا الأمر، تأكد من أن هذه المنطقة لا تتم معالجتها بواسطة إجراء قيد التشغيل، مثل assign
أو split
. يمكنك الحصول على عرض لإجراءات التشغيل في hbase shell باستخدام list_procedures
الأمر . يعين هذا المثال المنطقة de00010733901a05f5a2a3a382e27dd4
إلى إغلاق:
hbase --config /etc/hbase/conf hbck -j ~/hbase-operator-tools/hbase-hbck2/target/hbase-hbck2-1.x.x-SNAPSHOT.jar setRegionState de00010733901a05f5a2a3a382e27dd4 CLOSING
ترجع 0
إذا تغيرت حالة المنطقة وبخلاف 1
ذلك. إذا -i or --inputFiles
تم تحديده، فمرر اسما واحدا أو أكثر من أسماء ملفات الإدخال. يحتوي كل ملف على <ENCODED_REGIONNAME> <STATE>
، زوج واحد لكل سطر. على سبيل المثال:
hbase --config /etc/hbase/conf hbck -j ~/hbase-operator-tools/hbase-hbck2/target/hbase-hbck2-1.x.x-SNAPSHOT.jar setRegionState -i fileName1 fileName2
setTableState [<TABLENAME> <STATE> | -i <INPUT_FILE>...]
الخيار:
-i,--inputFiles
: يأخذ ملف إدخال واحد أو أكثر من أسماء الجداول وحالاتها.
يتم تمكين حالات الجدول المحتملة وتعطيلها وتعطيلها وتمكينها.
لقراءة حالة الجدول الحالية، في hbase shell، قم بتشغيل:
hbase> get 'hbase:meta', '<TABLENAME>', 'table:state'
قيمة x08x00 == ENABLED، x08x01 == DISABLED، إلخ. كما يمكن تشغيله describe <TABLENAME>
في موجه shell. يجعل هذا المثال اسم الجدول ممكنا للمستخدم:
hbase --config /etc/hbase/conf hbck -j ~/hbase-operator-tools/hbase-hbck2/target/hbase-hbck2-1.x.x-SNAPSHOT.jar setTableState users ENABLED
يقوم بإرجاع كل ما كانت عليه حالة الجدول السابقة. إذا -i or --inputFiles
تم تحديده، فإنه يمرر اسما واحدا أو أكثر من أسماء ملفات الإدخال. يحتوي كل ملف على <TABLENAME> <STATE>
، زوج واحد لكل سطر. على سبيل المثال:
hbase --config /etc/hbase/conf hbck -j ~/hbase-operator-tools/hbase-hbck2/target/hbase-hbck2-1.x.x-SNAPSHOT.jar setTableState -i fileName1 fileName2
scheduleRecoveries <SERVERNAME>... | -i <INPUT_FILE>...
الخيار:
-i,--inputFiles
: يأخذ ملف إدخال واحد أو أكثر من أسماء الخوادم.
جدولة ServerCrashProcedure(SCP)
قائمة ب RegionServers
. تنسيق اسم الخادم ك <HOSTNAME>,<PORT>,<STARTCODE>
. (راجع HBase UI/logs.)
يستخدم RegionServer
a.example.org, 29100,1540348649479
هذا المثال :
hbase --config /etc/hbase/conf hbck -j ~/hbase-operator-tools/hbase-hbck2/target/hbase-hbck2-1.x.x-SNAPSHOT.jar scheduleRecoveries a.example.org,29100,1540348649479
يقوم بإرجاع PIDs للمنشأة ServerCrashProcedures
أو -1 إذا لم يتم إنشاء أي إجراء. (راجع السجلات الرئيسية لمعرفة سبب عدم وجودها.) تتم إضافة دعم الأوامر في إصدارات HBase 2.0.3 أو 2.1.2 أو 2.2.0 أو أحدث. إذا -i or --inputFiles
تم تحديده، فإنه يمرر اسما واحدا أو أكثر من أسماء ملفات الإدخال. يحتوي كل ملف على <SERVERNAME>
، واحد لكل سطر. على سبيل المثال:
hbase --config /etc/hbase/conf hbck -j ~/hbase-operator-tools/hbase-hbck2/target/hbase-hbck2-1.x.x-SNAPSHOT.jar scheduleRecoveries -i fileName1 fileName2
إصلاح المشاكل
يساعدك هذا القسم في استكشاف المشكلات الشائعة وإصلاحها.
المبادئ العامة
عند إجراء إصلاح، تأكد من أن يكون hbase:meta
متناسقا أولا قبل إصلاح أي نوع مشكلة آخر، مثل انحراف نظام الملفات. يجب معالجة الانحراف في نظام الملفات أو المشاكل المتعلقة بالتعيين بعد hbase:meta
وضع الترتيب. إذا كان hbase:meta
لديه مشكلات، لا يمكن ل Master إجراء المواضع المناسبة عند اعتماد بيانات نظام الملفات المعزولة أو إجراء تعيينات المنطقة.
لا يمكن تعيين منطقة إذا كانت في حالة CLOSING (أو العكس، غير معين إذا كانت في حالة الفتح) دون الانتقال أولا عبر CLOSED. يجب أن تنتقل المناطق دائما من مغلقة، إلى فتح، إلى فتح، ثم إلى إغلاق وإغلاق.
عند إجراء إصلاح، قم بإصلاح الجداول واحدا تلو الآخر.
إذا تم تعطيل جدول، فلا يمكنك تعيين منطقة. في السجلات الرئيسية، سترى أن التقارير الرئيسية تم تخطيها لأن الجدول معطل. يمكنك تعيين منطقة لأنها حاليا في حالة الفتح وتريدها في حالة CLOSED بحيث توافق على حالة DISABLED الخاصة بالجدول. في هذه الحالة، قد تضطر إلى تعيين حالة الجدول مؤقتا إلى ممكن حتى تتمكن من إجراء التعيين. ثم تقوم بتعيينه مرة أخرى بعد عبارة إلغاء التعيين. لدى HBCK2 مرفق للسماح لك بإجراء هذا التغيير. راجع إخراج استخدام HBCK2.
تعيين وإلغاء تعيين
بشكل عام، عند التعيين، يستمر Master حتى ينجح. يأخذ التعيين تأمينا حصريا على المنطقة. يمنع التأمين تعيينا متزامنا أو إلغاء تعيينه من التشغيل. ينتظر التعيين مقابل منطقة مؤمنة حتى يتم تحرير التأمين قبل إحراز تقدم.
Master startup cannot progress, in holding-pattern until region online
:
2018-10-01 22:07:42,792 WARN org.apache.hadoop.hbase.master.HMaster: hbase:meta,1.1588230740 isn't online; state={1588230740 state=CLOSING, ts=1538456302300, server=ve1017.example.org,22101,1538449648131}; ServerCrashProcedures=true. Master startup cannot progress, in holding-pattern until region online.
يتعذر على Master متابعة بدء التشغيل لأنه لا يوجد إجراء لتعيينه hbase:meta
(أو hbase:namespace
). لإدخال واحدة، استخدم أداة HBCK2:
hbase --config /etc/hbase/conf hbck -j ~/hbase-operator-tools/hbase-hbck2/target/hbase-hbck2-1.x.x-SNAPSHOT.jar assigns -skip 1588230740
في هذا المثال، 1588230740 هو الاسم hbase:meta
المشفر للمنطقة. -skip
مرر خيار إيقاف HBCK2 من إجراء فحص إصدار مقابل Master البعيد. إذا لم يكن "الشكل الرئيسي" البعيد لأعلى، فإن التحقق من الإصدار يطالب ب Master is initializing response
أو PleaseHoldException
ويسقط محاولة التعيين. يتجنب -skip
الأمر فحص الإصدار ويهبط التعيين المجدول.
قد يحدث الشيء نفسه لجدول hbase:namespace
النظام. ابحث عن اسم hbase:namespace
المنطقة المشفرة للمنطقة واتخذ خطوات مماثلة لما فعلناه من أجل hbase:meta
. في هذه الحالة الأخيرة، يطبع الشكل الرئيسي بالفعل رسالة مفيدة تبدو مثل هذا المثال:
2019-07-09 22:08:38,966 WARN [master/localhost:16000:becomeActiveMaster] master.HMaster: hbase:namespace,,1562733904278.9559cf72b8e81e1291c626a8e781a6ae. isn't online; state={9559cf72b8e81e1291c626a8e781a6ae state=CLOSED, ts=1562735318897, server=null}; ServerCrashProcedures=true. Master startup cannot progress, in holding-pattern until region onlined.
لجدولة تعيين للجدول hbase:namespace
المذكور في سطر السجل السابق:
hbase --config /etc/hbase/conf hbck -j ~/hbase-operator-tools/hbase-hbck2/target/hbase-hbck2-1.x.x-SNAPSHOT.jar -skip assigns 9559cf72b8e81e1291c626a8e781a6ae
مرر الاسم المشفر لمنطقة مساحة الاسم. (يختلف الاسم المشفر لكل عملية نشر.)
المناطق المفقودة في hbase:meta region/table restore/rebuild
تمت إزالة مناطق الجدول من الجدول في hbase:meta
بعض الحالات غير العادية. وكشفت فرز هذه الحالات عن أنها كانت محفزة للمشغل. قام المستخدمون بتشغيل أداة HBCK1 القديمة OfflineMetaRepair مقابل نظام مجموعة HBCK2. OfflineMetaRepair هي أداة معروفة لإصلاح hbase:meta
المشكلات المتعلقة بالجدول على إصدارات HBase 1.x. الإصدار الأصلي غير متوافق مع HBase 2.x أو إصدارات أعلى، وقد خضع لبعض التعديلات. في الحالات القصوى، يمكن تشغيله الآن عبر HBCK2.
في معظم هذه الحالات، ينتهي الأمر بالمناطق المفقودة hbase:meta
عشوائيا، ولكن قد تظل hbase قيد التشغيل. في مثل هذه الحالات، يمكن معالجة المشكلة مع Master عبر الإنترنت باستخدام addFsRegionsMissingInMeta
الأمر في HBCK2. هذا الأمر أقل تعطيلا ل hbase من إعادة البناء الكاملة hbase:meta
، والتي تتم تغطيتها لاحقا. يمكن استخدامه حتى لاسترداد منطقة جدول مساحة الاسم.
مناطق إضافية في hbase:meta region/table restore/rebuild
يمكن أن تكون هناك أيضا حالات تمت فيها إزالة مناطق الجدول في نظام الملفات ولكن لا تزال هناك إدخالات ذات صلة على hbase:meta
الجدول. قد يحدث هذا السيناريو بسبب مشاكل في التقسيم أو أخطاء العملية اليدوية (مثل حذف أو نقل منطقة dir يدويا)، أو حتى مشكلات فقدان بيانات معلومات التعريف مثل HBASE-21843.
يمكن معالجة مثل هذه المشاكل باستخدام Master عبر الإنترنت باستخدام extraRegionsInMeta --fix
الأمر في HBCK2. هذا الأمر أقل تعطيلا ل hbase من إعادة البناء الكاملة hbase:meta
، والتي تتم تغطيتها لاحقا. من المفيد أيضا عندما يحدث هذا على الإصدارات التي لا تدعم fixMeta
خيار HBCK2 (أي إصدارات قبل 2.0.6 أو 2.1.6 أو 2.2.1 أو 2.3.0 أو 3.0.0).
وصفة إعادة إنشاء hbase:meta عبر الإنترنت
إذا hbase:meta
لم يكن الفساد حرجا للغاية، فلا يزال بإمكان hbase إحضاره عبر الإنترنت. حتى إذا كانت منطقة مساحة الاسم من بين المناطق المفقودة، فمن الممكن الفحص hbase:meta
أثناء فترة التهيئة، حيث ينتظر Master تعيين مساحة الاسم. للتحقق من هذا الموقف، hbase:meta
يمكن تنفيذ أمر فحص. إذا لم مهلة أو تظهر أي أخطاء، يكون متصلا hbase:meta
بالإنترنت:
echo "scan 'hbase:meta', {COLUMN=>'info:regioninfo'}" | hbase shell
يمكن استخدام HBCK2 addFsRegionsMissingInMeta
إذا لم تظهر الرسالة أي أخطاء. يقرأ معلومات بيانات تعريف المنطقة المتوفرة على دلائل منطقة FS لإعادة إنشاء المناطق في hbase:meta
. نظرا لأنه يمكن تشغيله مع hbase يعمل جزئيا، فإنه يحاول تعطيل الجداول عبر الإنترنت المتأثرة بالمشكلة التي تم الإبلاغ عنها وينتقل إلى المناطق المقروءة إلى hbase:meta
. يمكنه التحقق من وجود جداول أو مساحات أسماء معينة، أو جميع الجداول من جميع مساحات الأسماء. يوضح هذا المثال إضافة مناطق مفقودة للجداول tbl_1
في مساحة الاسم الافتراضية، tbl_2
في مساحة n1
الاسم ، ولكل الجداول من مساحة n2
الاسم :
hbase --config /etc/hbase/conf hbck -j ~/hbase-operator-tools/hbase-hbck2/target/hbase-hbck2-1.x.x-SNAPSHOT.jar addFsRegionsMissingInMeta default:tbl_1 n1:tbl_2 n2
نظرا لأنه يعمل بشكل مستقل عن Master، بعد الانتهاء بنجاح، يلزم اتخاذ المزيد من الخطوات لتعيين المناطق المعاد إضافتها. يتم سرد هذه الرسائل على النحو التالي:
addFsRegionsMissingInMeta
إخراج أمر تعيين مع جميع المناطق التي تمت إعادة إضافتها. يجب تنفيذ هذا الأمر لاحقا، لذا انسخه واحفظه للراحة.- بالنسبة لإصدارات HBase قبل 2.3.0، بعد
addFsRegionsMissingInMeta
الانتهاء بنجاح وحفظ الإخراج، أعد تشغيل جميع HBase Masters قيد التشغيل.
بعد إعادة تشغيل Masters والإنترنت hbase:meta
بالفعل (تحقق مما إذا كان يمكن الوصول إلى واجهة مستخدم الويب)، قم بتشغيل الأمر assigns من addFsRegionsMissingInMeta
الإخراج المحفوظ سابقا.
ملاحظة
إذا كانت منطقة مساحة الاسم من بين المناطق المفقودة، فستحتاج إلى إضافة العلامة --skip
في بداية الأمر تعيينات التي تم إرجاعها.
إذا عانى نظام مجموعة من خسارة كارثية للجدول hbase:meta
، فمن الممكن إعادة بناء تقريبية باستخدام الوصفة التالية. في المخطط التفصيلي، نقوم بإيقاف نظام المجموعة. قم بتشغيل أداة HBCK2 OfflineMetaRepair، التي تقرأ الدلائل وبيانات التعريف التي تم إسقاطها في نظام الملفات وتبذل قصارى جهدها في إعادة إنشاء جدول قابل للتطبيق hbase:met
. أعد تشغيل نظام المجموعة. أدخل تعيينا لإحضار جدول مساحة اسم النظام عبر الإنترنت. وأخيرا، أعد تعيين جداول مساحة المستخدم التي تريد تمكينها. (تنشئ إعادة الإنشاء hbase:meta
جدولا مع كافة الجداول دون اتصال ولا يتم تعيين أي مناطق.)
وصفة إعادة بناء مفصلة
ملاحظة
استخدم هذا الخيار فقط كملاذ أخير. لا نوصي بذلك.
إيقاف نظام المجموعة.
قم بتشغيل أمر إعادة البناء
hbase:meta
من HBCK2. ينقل هذا الأمر جانبا الأصلhbase:meta
ويضع في مكان واحد أعيد إنشاؤه حديثا. يوضح هذا المثال كيفية تشغيل الأداة. يضيف العلامة-details
بحيث تقوم الأداة بنسخ المعلومات عن المناطق التي وجدتها في HDFS:hbase --config /etc/hbase/conf -j ~/hbase-operator-tools/hbase-hbck2/target/hbase-hbck2-1.x.x-SNAPSHOT.jar org.apache.hbase.hbck1.OfflineMetaRepair -details
بدء تشغيل نظام المجموعة. لن يبدأ بشكل كامل. إنه عالق لأن جدول مساحة الاسم غير متصل ولا يوجد إجراء تعيين في مخزن الإجراءات لهذا الطوارئ. يعرض سجل HBase Master هذه الحالة. يوضح هذا المثال ما يسجله:
2019-07-10 18:30:51,090 WARN [master/localhost:16000:becomeActiveMaster] master.HMaster: hbase:namespace,,1562808216225.725a0fe6c2c869d3d0a9ed82bfa80fa3. isn't online; state={725a0fe6c2c869d3d0a9ed82bfa80fa3 state=CLOSED, ts=1562808619952, server=null}; ServerCrashProcedures=false. Master startup can't progress, in holding-pattern until region onlined.
لتعيين منطقة جدول مساحة الاسم، لا يمكنك استخدام shell. إذا كنت تستخدم shell، فإنه يفشل مع
PleaseHoldException
لأن Master لم يصل بعد. (ينتظر أن يأتي جدول مساحة الاسم عبر الإنترنت قبل أن يعلن عن نفسه "لأعلى".) يجب عليك استخدام الأمر تعيين HBCK2. لتعيين، تحتاج إلى اسم مشفر لمساحة الاسم. يظهر في السجل المقتبس.725a0fe6c2c869d3d0a9ed82bfa80fa3
هذا في هذه الحالة. يجب عليك تمرير-skip
الأمر لتخطي التحقق من الإصدار الرئيسي. (بدونه، استدعاء HBCK2 الخاص بك يثيرPleaseHoldException
لأن Master لم يصل بعد.) يضيف هذا المثال تعيين جدول مساحة الاسم:hbase --config /etc/hbase/conf hbck -j ~/hbase-operator-tools/hbase-hbck2/target/hbase-hbck2-1.x.x-SNAPSHOT.jar -skip assigns 725a0fe6c2c869d3d0a9ed82bfa80fa3
إذا كان استدعاء يعود مع
Connection refused
، هل ماستر يصل؟ يتم إيقاف تشغيل Master بعد فترة من الوقت إذا لم يتمكن من تهيئة نفسه. أعد تشغيل نظام المجموعة/الشكل الرئيسي وأعد تشغيل الأمر assigns.عند تشغيل التعيينات بنجاح، سترى أنه يصدر شيئا مشابها للمثال التالي.
48
في النهاية هو PID لجدول إجراءات التعيين. إذا كان PID الذي تم إرجاعه هو-1
، لم تتقدم الشركة الناشئة الرئيسية بشكل كاف، لذا أعد المحاولة. أو، قد يكون اسم المنطقة المشفرة غير صحيح، لذا تحقق من هذه المشكلة.hbase --config /etc/hbase/conf hbck -j ~/hbase-operator-tools/hbase-hbck2/target/hbase-hbck2-1.x.x-SNAPSHOT.jar -skip assigns 725a0fe6c2c869d3d0a9ed82bfa80fa3
18:40:43.817 [main] WARN org.apache.hadoop.util.NativeCodeLoader - Unable to load native-hadoop library for your platform... using builtin-java classes where applicable 18:40:44.315 [main] INFO org.apache.hbase.HBCK2 - hbck sufpport check skipped [48]
تحقق من السجلات الرئيسية. السيد كان يجب أن يأتي ترى إكمالا ناجحا ل PID=48. ابحث عن سطر مثل هذا المثال للتحقق من نجاح التشغيل الرئيسي:
master.HMaster: Master has completed initialization 132.515sec
قد يستغرق ظهوره بعض الوقت.
تضيف إعادة إنشاء
hbase:meta
جداول المستخدم في حالة DISABLED والمناطق في وضع CLOSED. جداول قابلة لإعادة تمكينها عبر shell لإعادة جميع مناطق الجدول إلى الاتصال بالإنترنت. قم بذلك واحدا تلو الآخر أو راجع الأمر تمكين الكل ".*" لتمكين جميع الجداول في وقت واحد.ملف تعريف إعادة البناء يفتقد إلى عمليات التحرير وقد يحتاج إلى إصلاح وتنظيف لاحق باستخدام المرفق الموضح سابقا في هذه المقالة.
الملفات المرجعية التي تم إسقاطها وملف hbase.version المفقود والملفات التالفة
يمكن ل HBCK2 التحقق من وجود مراجع معلقة وملفات تالفة. يمكنك أن تطلب منه تهميش الملفات السيئة، والتي قد تكون هناك حاجة إلى تجاوز الحدب حيث المناطق لن تكون متصلة بالإنترنت أو تفشل القراءات. راجع أمر نظام الملفات في قائمة HBCK2. قم بتمرير اسم جدول واحد أو أكثر (أو استخدم none
للتحقق من جميع الجداول). يتم الإبلاغ عن ملفات غير صالحة. --fix
مرر الخيار لإجراء الإصلاحات.
إعادة تشغيل الإجراء
كحل أخير، إذا كانت ميزة Master غير قابلة للانتهاك وكانت جميع محاولات الإصلاح تؤدي فقط إلى ظهور أقفال أو إجراءات لا يمكن التراجع عنها لا يمكن إنهائها، أو إذا كانت مجموعة MasterProcWALs
من تنمو دون حدود، فمن الممكن مسح حالة Master نظيفة. انقل الدليل جانبا /hbase/MasterProcWALs/
ضمن تثبيت HBase وأعد تشغيل العملية الرئيسية. يعود بتنسيق جدولي بدون ذاكرة.
إذا تم تعيين جميع المناطق في وقت المسح بسعادة أو دون اتصال، عند إعادة التشغيل الرئيسية، يجب أن يلتقط Master ويستمر كما لو لم يحدث شيء. ولكن إذا كانت هناك مناطق في مرحلة انتقالية في ذلك الوقت، يجب على المشغل التدخل لتقديم التعيينات المعلقة أو إلغاء التعيينات إلى نقطة طرفية.
اقرأ الأعمدة hbase:meta
info:state
كما هو موضح لتحديد ما يجب تعيينه أو إلغاء تعيينه. بعد مسح جميع المحفوظات عن طريق نقل جانبا MasterProcWALs
، يجب قفل أي من الكيانات، لذلك أنت حر في التعيين المجمع أو إلغاء التعيين.