سؤال

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

التطبيق الذي أدلى به في الاعتبار سيكون في عالم القيام الإحصاءات. أريد أن يكون لدي "أسوأ 10 قيم لكل مفتاح" من دالة المخفض الخاصة بي (حيث يجب أن أفترض احتمال حدوث عدد كبير من القيم لبعض المفاتيح).

ما خططته هو أن القيم التي تدخل في المخفض ستكون في الأساس مزيج من "القيمة الفعلية" و "جودة / صلبة القيمة الفعلية". بناء على أهمية "ببساطة" أرغب في اتخاذ 10 أسوأ قيم / أفضل قيم وإخراجها من المخفض.

كيف أذهب للقيام بذلك (على افتراض عدد كبير من القيم لمفتاح معين)؟ هل هناك طريقة يمكنني فرزها جميع القيم قبل إرسالها إلى المخفض (وبساطة توقف عن قراءة المدخلات عندما قرأت أول 10) أو يجب أن يتم ذلك بشكل مختلف؟

هل يمكن لأي شخص هنا أن يشيرني إلى قطعة من الأمثلة التي يمكنني إلقاء نظرة عليها؟


تحديث: لقد وجدت قضايا جيرا مثيرة للاهتمام هادوب 485. و هادوب 686..

أي شخص لديه جزء رمز حول كيفية استخدام هذا في API Hadoop 0.20؟

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

المحلول

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

نلقي نظرة على كيفية استخدام مثال WordCount المجمعات إلى حساب جزئي مسبقا:

http://wiki.apache.org/hadoop/wordcount.


تحديثإليك ما أثق به لمشكلتك؛ من الممكن فهم ما تحاول القيام به، رغم ذلك.

كل mapper تنبعث منها <key, {score, data}> أزواج.

يحصل الموحد على مجموعة جزئية من هذه الأزواج: <key, [set of {score, data}> وهل فرز محلي (لا يزال على العقد المتدينة) والنواتج <key, [sorted set of top 10 local {score, data}]> أزواج.

سوف يحصل المخفض <key, [set of top-10-sets]> - كل ما يجب القيام به هو إجراء خطوة دمج لدمج الفرز (لا حاجة إلى فرز) لكل من أعضاء مجموعات القيمة، وإيقاف الاندماج عند سحب القيم العشرة الأولى.


تحديث 2.

لذلك، الآن أننا نعلم أن المرتبة تحت الفاخرة ونتيجة لذلك، لا يمكنك تصفية البيانات في وقت مبكر باستخدام مجمعات، والشيء الوحيد هو أن تفعل ما اقترحته - الحصول على فرز ثانوي الذهاب. لقد وجدت التذاكر الصحيحة؛ هناك مثال على كيفية القيام بذلك في Hadoop 20 في SRC / أمثلة / Org / Apache / Hadoop / Obsopress / SecondarySort.java (أو، إذا كنت لا ترغب في تنزيل شجرة المصدر بأكملها، يمكنك إلقاء نظرة على المثال التصحيح في https://issues.apache.org/jira/browse/hadoop-4545. )

نصائح أخرى

يبدو بالتأكيد مثل secondarysortproblem. ألق نظرة على "Hadoop: الدليل النهائي"، إذا كنت ترغب في ذلك. انها من أورايلي. يمكنك أيضا الوصول إليها عبر الإنترنت. هناك وصف تنفيذ جيد جدا.

لقد قمت بتنفيذها بنفسي أيضا. في الأساس يعمل بهذه الطريقة: سوف يهتم Partitioner بجميع أزواج القيمة الرئيسية مع نفس المفتاح الذي يذهب إلى مخفض واحد. لا شيء خاص هنا. ولكن هناك أيضا Groupingcomparator، من شأنها أن تشكل مجموعات. تم تمرير مجموعة واحدة فعليا كقابق مقطوع لتقليل () - دعوة. لذلك يمكن أن يحتوي القسم على مجموعات متعددة. ولكن يجب أن تكون كمية الأقسام تساوي عدد المخفضات. لكن التجميع تسمح أيضا بالقيام ببعض الفرز حيث تنفذ طريقة مقارنة.

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

نأمل أن يكون مفيدا :-)

إذا فهمت السؤال بشكل صحيح، فستحتاج إلى استخدام testrolerpartitioner..

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