تشغيل أمثلة MapReduce المضمنة في HDInsight

تعلم كيفية تشغيل أمثلة MapReduce المضمنة باستخدام Apache Hadoop على HDInsight.

المتطلبات الأساسية

أمثلة MapReduce

وتقع العينات على نظام مجموعة HDInsight في /usr/hdp/current/hadoop-mapreduce-client/hadoop-mapreduce-examples.jar. يتم تضمين التعليمات البرمجية للمصدر لهذه العينات على نظام مجموعة HDInsight في /usr/hdp/current/hadoop-client/src/hadoop-mapreduce-project/hadoop-mapreduce-examples.

وترد العينات التالية في هذا الأرشيف:

العينة الوصف
aggregatewordcount حساب الكلمات في ملفات الإدخال.
aggregatewordhist يحسب المدرج التكراري للكلمات في ملفات الإدخال.
bbp يستخدم نموذج Bailey-Borwein-Plouffe لحساب الأرقام الدقيقة من Pi.
dbcount يحسب سجلات عرض الصفحة المخزنة في قاعدة بيانات.
distbbp يستخدم صيغة من نوع BBP لحساب البتات الدقيقة من Pi.
grep يحسب تطابقات regex في الإدخال.
join ينفذ ربط عبر مجموعات البيانات المفرزة المقسمة بالتساوي.
multifilewc يحسب الكلمات من عدة ملفات.
pentomino برنامج وضع التجانب لإيجاد حلول لمشاكل pentomino.
pi تقديرات Pi باستخدام أسلوب quasi-Monte Carlo.
randomtextwriter يكتب 10 GB من البيانات النصية العشوائية لكل عقدة.
randomwriter يكتب 10 GB من البيانات العشوائية لكل عقدة.
secondarysort يحدد الفرز الثانوي إلى مرحلة الخفض.
sort يفرز البيانات المكتوبة بواسطة الكاتب العشوائي.
sudoku يعمل على حل sudoku.
teragen إنشاء بيانات ل terasort.
terasort تشغيل terasort.
teravalidate التحقق من نتائج terasort.
wordcount حساب الكلمات في ملفات الإدخال.
wordmean حساب متوسط طول الكلمات في ملفات الإدخال.
wordmedian حساب وسيط طول الكلمات في ملفات الإدخال.
wordstandarddeviation حساب الانحراف المعياري لطول الكلمات في ملفات الإدخال.

تشغيل مثال عدد الكلمات

  1. الاتصال إمع HDInsight باستخدام SSH. استبدل CLUSTER باسم نظام مجموعة ثم أدخل الأمر التالي:

    ssh sshuser@CLUSTER-ssh.azurehdinsight.net
    
  2. من جلسة عمل SSH استخدم الأمر التالي لإدراج العينات:

    yarn jar /usr/hdp/current/hadoop-mapreduce-client/hadoop-mapreduce-examples.jar
    

    ينشئ هذا الأمر قائمة عينة من القسم السابق من هذا المستند.

  3. استخدم الأمر التالي للحصول على تعليمات بشأن عينة معينة. في هذه الحالة، عينة عدد الكلمات:

    yarn jar /usr/hdp/current/hadoop-mapreduce-client/hadoop-mapreduce-examples.jar wordcount
    

    سوف تتلقى النتائج التالية:

    Usage: wordcount <in> [<in>...] <out>
    

    تشير هذه الرسالة إلى أنه يمكنك توفير عدة مسارات إدخال للمستندات المصدر. المسار النهائي هو حيث يتم تخزين الإخراج (عدد الكلمات في المستندات المصدر).

  4. استخدم ما يلي لحساب كافة الكلمات في دفاتر ليوناردو دا فينشي، والتي يتم توفيرها كنماذج بيانات مع نظام المجموعة:

    yarn jar /usr/hdp/current/hadoop-mapreduce-client/hadoop-mapreduce-examples.jar wordcount /example/data/gutenberg/davinci.txt /example/data/davinciwordcount
    

    تتم قراءة الإدخال لهذه المهمة من /example/data/gutenberg/davinci.txt. يتم تخزين الإخراج لهذا المثال في /example/data/davinciwordcount. كلا المسارين موجودين على التخزين الافتراضي لنظام المجموعة، وليس نظام الملفات المحلية.

    ملاحظة

    كما هو موضح في التعليمات لعينة عدد الكلمات، يمكنك أيضًا تحديد ملفات إدخال متعددة. على سبيل المثال، hadoop jar /usr/hdp/current/hadoop-mapreduce-client/hadoop-mapreduce-examples.jar wordcount /example/data/gutenberg/davinci.txt /example/data/gutenberg/ulysses.txt /example/data/twowordcount سوف تحسب الكلمات في كل من davinci.txt ulysses.txt.

  5. بمجرد اكتمال الوظيفة، استخدم الأمر التالي لعرض المخرجات التي تم إنشاؤها:

    hdfs dfs -cat /example/data/davinciwordcount/*
    

    هذا الأمر يسلسل كافة ملفات الإخراج التي تنتجها المهمة. يعرض الإخراج على وحدة التحكم. الإخراج مشابه للنص التالي:

    zum     1
    zur     1
    zwanzig 1
    zweite  1
    

    يمثل كل سطر كلمة وعدد المرات التي حدثت فيها في بيانات الإدخال.

مثال Sudoku

Sudoku هو لغز يلعب على المنطق ويتكون من تسع شبكات 3X3. بعض الخلايا في الشبكة لديها أرقام، في حين أن البعض الآخر فارغ، والهدف هو إيجاد حل للخلايا الفارغة. يحتوي الارتباط السابق على مزيد من المعلومات حول اللغز، ولكن الغرض من هذه العينة هو حل الخلايا الفارغة. لذا يجب أن تكون مدخلاتنا ملفًا بالتنسيق التالي:

  • تسعة صفوف من تسعة أعمدة
  • يمكن أن يحتوي كل عمود إما على رقم أو ? (مما يشير إلى وجود خلية فارغة)
  • يتم فصل الخلايا بمساحة

هناك طريقة معينة لبناء لغز Sudoku. لا يمكنك تكرار رقم في عمود أو صف. هناك مثال على مجموعة HDInsight التي تم إنشاؤها بشكل صحيح. وهو موجود في /usr/hdp/*/hadoop/src/hadoop-mapreduce-project/hadoop-mapreduce-examples/src/main/java/org/apache/hadoop/examples/dancing/puzzle1.dta ويحتوي على النص التالي:

8 5 ? 3 9 ? ? ? ?
? ? 2 ? ? ? ? ? ?
? ? 6 ? 1 ? ? ? 2
? ? 4 ? ? 3 ? 5 9
? ? 8 9 ? 1 4 ? ?
3 2 ? 4 ? ? 8 ? ?
9 ? ? ? 8 ? 5 ? ?
? ? ? ? ? ? 2 ? ?
? ? ? ? 4 5 ? 7 8

لتشغيل هذا المثال من خلال مثال Sudoku، استخدم الأمر التالي:

yarn jar /usr/hdp/current/hadoop-mapreduce-client/hadoop-mapreduce-examples.jar sudoku /usr/hdp/*/hadoop/src/hadoop-mapreduce-project/hadoop-mapreduce-examples/src/main/java/org/apache/hadoop/examples/dancing/puzzle1.dta

تبدو النتائج مشابهة للنص التالي:

8 5 1 3 9 2 6 4 7
4 3 2 6 7 8 1 9 5
7 9 6 5 1 4 3 8 2
6 1 4 8 2 3 7 5 9
5 7 8 9 6 1 4 2 3
3 2 9 4 5 7 8 1 6
9 4 7 2 8 6 5 3 1
1 8 5 7 3 9 2 6 4
2 6 3 1 4 5 9 7 8

مثال Pi (π)

تستخدم عينة pi طريقة إحصائية (quasi-Monte Carlo) لتقدير قيمة pi. يتم وضع النقاط عشوائيًا في مربع وحدة. يحتوي المربع أيضًا على دائرة. احتمال أن تقع النقاط داخل الدائرة يساوي مساحة الدائرة، pi/4. يمكن تقدير قيمة pi من قيمة 4R. R هي نسبة عدد النقاط الموجودة داخل الدائرة إلى إجمالي عدد النقاط الموجودة داخل المربع. كلما كانت عينة النقاط المستخدمة أكبر، كان التقدير أفضل.

استخدم الأمر التالي لتشغيل النموذج: يستخدم هذا الأمر 16 خريطة مع 10,000,000 عينة لكل منها لتقدير قيمة pi:

yarn jar /usr/hdp/current/hadoop-mapreduce-client/hadoop-mapreduce-examples.jar pi 16 10000000

القيمة التي تم إرجاعها بواسطة هذا الأمر متشابهة مع 3.14159155000000000000. بالنسبة للمراجع، فإن المنازل العشرية العشرة الأولى لـ pi هي 3.1415926535.

مثال على GraySort بسعة 10 غيغابايت

GraySort هو فرز معياري. المقياس هو معدل الفرز (تيرابايت/الدقيقة) الذي يتم تحقيقه أثناء فرز كميات كبيرة من البيانات، وعادة ما يكون الحد الأدنى 100 تيرابايت.

يستخدم هذا النموذج 10 GB بسيطة من البيانات بحيث يمكن تشغيلها بسرعة نسبية. ويستخدم تطبيقات MapReduce التي تم تطويرها بواسطة Owen O'Malley و Arun Murthy. وقد فازت هذه التطبيقات بمعيار فرز تيرابايت السنوي للأغراض العامة ("دايتونا") في عام 2009، بمعدل 0.578 تيرابايت/دقيقة (100 تيرابايت في 173 دقيقة). لمزيد من المعلومات حول هذا المعيار ومعايير الفرز الأخرى، راجع موقع Sort Benchmark.

تستخدم هذه العينة ثلاث مجموعات من برامج MapReduce:

  • TeraGen: برنامج MapReduce الذي يولد صفوف من البيانات لفرزها

  • TeraSort: يضع عينات لبيانات الإدخال ويستخدم MapReduce لفرز البيانات في ترتيب إجمالي

    TeraSort هو نوع MapReduce قياسي، باستثناء مقسم مخصص. يستخدم المقسم قائمة مفروزة من مفاتيح عينات N-1 التي تحدد نطاق المفتاح لكل عملية خفض. على وجه التحديد، يتم إرسال جميع المفاتيح مثل sample[i-1] <= key < sample[i] لتقليل i. يضمن هذا المقسم أن مخرجات التقليل i جميعها أقل من إخراج التقليل i+1.

  • TeraValidate: برنامج MapReduce الذي يتحقق من أن الإخراج يتم فرزه عموميًا

    يقوم بإنشاء مخطط واحد لكل ملف في دليل الإخراج، ويضمن كل مخطط أن يكون كل مفتاح أقل من المفتاح السابق أو مساويًا له. تقوم دالة المخطط بإنشاء سجلات المفاتيح الأولى والأخيرة من كل ملف. تضمن دالة الخفض أن يكون المفتاح الأول للملف i أكبر من آخر مفتاح للملف i-1. يتم الإبلاغ عن أية مشاكل كإخراج من مرحلة الخفض، مع المفاتيح التي هي خارج الترتيب.

استخدم الخطوات التالية لإنشاء البيانات، والفرز، ثم التحقق من صحة الإخراج:

  1. إنشاء 10 GB من البيانات، والتي يتم تخزينها على التخزين الافتراضي لنظام مجموعة HDInsight في /example/data/10GB-sort-input:

    yarn jar /usr/hdp/current/hadoop-mapreduce-client/hadoop-mapreduce-examples.jar teragen -Dmapred.map.tasks=50 100000000 /example/data/10GB-sort-input
    

    -Dmapred.map.tasks يخبر Hadoop بعدد مهام المخطط التي يجب استخدامها لهذه الوظيفة. المعلمتان الأخيرتان ترشدان الوظيفة إلى إنشاء 10 GB من البيانات وتخزينها في /example/data/10GB-sort-input.

  2. استخدم الأمر التالي لفرز البيانات:

    yarn jar /usr/hdp/current/hadoop-mapreduce-client/hadoop-mapreduce-examples.jar terasort -Dmapred.map.tasks=50 -Dmapred.reduce.tasks=25 /example/data/10GB-sort-input /example/data/10GB-sort-output
    

    -Dmapred.reduce.tasks يخبر Hadoop بعدد مهام الخفض التي يجب استخدامها لهذه الوظيفة. المعلمتان الأخيرتان هما فقط مواقع الإدخال والإخراج للبيانات.

  3. استخدم ما يلي للتحقق من صحة البيانات التي تم إنشاؤها بواسطة الفرز:

    yarn jar /usr/hdp/current/hadoop-mapreduce-client/hadoop-mapreduce-examples.jar teravalidate -Dmapred.map.tasks=50 -Dmapred.reduce.tasks=25 /example/data/10GB-sort-output /example/data/10GB-sort-validate
    

الخطوات التالية

من هذه المقالة، تعلمت كيفية تشغيل العينات المضمنة مع أنظمة مجموعات HDInsight المستندة إلى Linux. للحصول على البرامج التعليمية حول استخدام Pig وHive وMapReduce باستخدام HDInsight، راجع المواضيع التالية: