سؤال

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

كما أفهمها، فإن تشغيل هذه المهمة كوسيلة ستتطلب تشغيل جميع وظائف الخريطة في كل مرة.

تعمل وظائف خريطتي (وبالفعل أي وظيفة) دائما نفس الإخراج لإدخال معين. ببساطة لا توجد نقطة في إعادة حساب الإخراج إذا لم يكن لدي. سيتم تنمية مدخلاتي (مجموعة من المستندات) باستمرار وسوف أقوم بتشغيل عملية MAPRREDUCE بشكل دوري عبر البيانات. بين عمليات الإعدام التي يجب عليها فقط حساب وظائف الخريطة للمستندات المضافة حديثا.

ربما تكون بياناتي هي HBase -> mapreduce -> HBase. نظرا لأن Hadoop هو نظام بيئي بأكمله، فقد تتمكن من معرفة أن وظيفة معينة قد تم تطبيقها على صف مع هوية معينة. أنا أفترض إدخالات ثابتة في طاولة HBASE. هل / هل يستطيع هدوب مراعاة هذا؟

أنا أدرك من الوثائق (خاصة مقاطع الفيديو Cloudera) التي تعيد حسابها (من البيانات الممتدة المحتملة) يمكن أن تكون أسرع من الاستمرار والاسترجاع لفئة المشكلة التي يستخدمها Hadoop.

أي تعليقات / إجابات؟

هل كانت مفيدة؟

المحلول

إذا كنت تتطلع إلى تجنب تشغيل خطوة الخريطة في كل مرة، فستخرج كخطوة خاصة به (إما عن طريق استخدام IderityReducer أو تعيين عدد المخفضات للمهمة إلى 0) وتشغيل الخطوات الأحدث باستخدام إخراج خطوة الخريطة وبعد

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

لاحظ أن تشغيل MAPPER الخاص بك على مجموعات البيانات الجديدة لن يلحق بالتشغيل السابق - ولكن يمكنك التغلب على هذا باستخدام مجلد إخراج مؤرخ. هذا هو القول أن يمكنك تخزين إخراج تعيين دفعة كاملة من الملفات في my_mapper_output/20091101, ، ودفع الدفعة في الأسبوع المقبل my_mapper_output/20091108, ، إلخ. إذا كنت ترغب في تقليل المجموعة بأكملها، يجب أن تكون قادرا على المرور my_mapper_output كجلد الإدخال، وقبض على جميع مجموعات الإخراج.

نصائح أخرى

لماذا لا تنطبق سير عمل SQL في بيئة مختلفة؟ معنى، إضافة عمود "معالج" إلى جدول الإدخال الخاص بك. عندما يأتي الوقت لتشغيل ملخص، قم بتشغيل خط أنابيب يحدث شيء مثل:

خريطة (Map_Function) على (جدول الإدخال الذي تمت تصفيته بواسطة! معالجتها)؛ تخزينها في map_outputs إما في HBASE أو ببساطة HDFS.

الخريطة (تقليل الوظيفة) على (map_outputs)؛ تخزينها في HBase.

يمكنك أن تجعل الحياة أسهل قليلا، على افتراض أنك تخزن بياناتك في HBASE مرتبة حسب تاريخ الإدراج، إذا قمت بتسجيل في مكان ما في مكان ما في الملعب الناجح، وفتح المرشح على المدخلات المؤرخة في وقت لاحق من آخر ملخص ناجح - سوف حفظ بعض وقت المسح المهمة.

إليك عرض تقديمي مثير للاهتمام يوضح كيف قامت شركة واحدة في أرشفة سير عملهم (على الرغم من أنها لا تستخدم HBASE):http://www.scribd.com/doc/20971412/hadoop-world-production-deep-dive-with-high-availability.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top