মানচিত্রের সহজ ব্যাখ্যা?


166

আমার কাউচডিবি প্রশ্নের সাথে সম্পর্কিত।

কেউ কি কোনও মান্বুরড বোঝাতে পারে এমন ম্যাপ্রেডুকে ব্যাখ্যা করতে পারেন?




@ মিশেলহৌসনব্লাস - আমি আপনার উদাহরণটি ভালবাসি: বুঝতে সহজ এবং পুরো পরিবারের জন্য মজাদার।
লি

উত্তর:


187

মানচিত্র এবং হ্রাসের জন্য বেসিকগুলিতে সমস্ত পথে চলে।


মানচিত্র একটি ফাংশন যা কোনও ধরণের তালিকার আইটেমগুলিকে অন্য ধরণের আইটেমে রূপান্তর করে এবং একই ধরণের তালিকায় ফিরিয়ে দেয়।

ধরুন আমার কাছে সংখ্যার একটি তালিকা রয়েছে: [1,2,3] এবং আমি প্রতিটি সংখ্যাকে দ্বিগুণ করতে চাই, এই ক্ষেত্রে, "প্রতিটি সংখ্যার দ্বিগুণ" করার ফাংশনটি হল এক্স = x * 2 এবং ম্যাপিং ছাড়াই লিখতে পারতাম একটি সহজ লুপ, বলুন

A = [1, 2, 3]
foreach (item in A) A[item] = A[item] * 2

এবং আমার কাছে এ = [২, ৪,]] থাকলে লুপগুলি লেখার পরিবর্তে, যদি আমার কোনও মানচিত্রের ফাংশন থাকে তবে আমি লিখতে পারি

A = [1, 2, 3].Map(x => x * 2)

x => x * 2 একটি ফাংশন যা [1,2,3] এ উপাদানগুলির বিরুদ্ধে কার্যকর করা হয়। যা ঘটে তা হ'ল প্রোগ্রামটি প্রতিটি আইটেম গ্রহণ করে, প্রতিটি আইটেমের সমান করে সমান করে (x => x * 2) চালাও এবং ফলাফলগুলির একটি তালিকা তৈরি করে।

1 : 1 => 1 * 2 : 2  
2 : 2 => 2 * 2 : 4  
3 : 3 => 3 * 2 : 6  

সুতরাং (x => x * 2) এর সাহায্যে মানচিত্রটি কার্যকর করার পরে আপনার [2, 4, 6] থাকতে হবে।


হ্রাস হ'ল একটি ফাংশন যা তালিকাগুলিতে আইটেমগুলি "সংগ্রহ" করে এবং তাদের সকলের জন্য কিছু গণনা সম্পাদন করে, যাতে এগুলি একক মানকে হ্রাস করে।

একটি যোগফল খুঁজে পাওয়া বা গড় সন্ধান করা হ্রাস ফাংশনের সমস্ত উদাহরণ। যেমন আপনার যদি সংখ্যার একটি তালিকা থাকে তবে বলুন [,, ৮, ৯] এবং আপনি তাদের সংক্ষিপ্ত বিবরণ চান, আপনি এটির মতো একটি লুপ লিখবেন

A = [7, 8, 9]
sum = 0
foreach (item in A) sum = sum + A[item]

তবে, যদি আপনার কোনও হ্রাস ফাংশনে অ্যাক্সেস থাকে তবে আপনি এটি এটি লিখতে পারেন

A = [7, 8, 9]
sum = A.reduce( 0, (x, y) => x + y )

এখন এটি দুটি বিভ্রান্তির কারণ কেন 2 টি আর্গুমেন্ট (0 এবং এক্স এবং y সহ ফাংশন) পাস হয়েছে। হ্রাস ফাংশনটি কার্যকর হওয়ার জন্য, এটি অবশ্যই 2 টি আইটেম গ্রহণ করতে, কোনও কিছুর গণনা করতে এবং "হ্রাস" করতে সক্ষম হবে যে 2 আইটেমকে কেবল একটি একক মানের করতে হবে, এইভাবে আমাদের একক মান না হওয়া পর্যন্ত প্রোগ্রাম প্রতিটি জোড়কে হ্রাস করতে পারে।

মৃত্যুদন্ড কার্যকর হবে:

result = 0
7 : result = result + 7 = 0 + 7 = 7
8 : result = result + 8 = 7 + 8 = 15
9 : result = result + 9 = 15 + 9 = 24

তবে আপনি সর্বদা জিরো দিয়ে শুরু করতে চান না, তাই প্রথম যুক্তিটি আপনাকে প্রথম result =সারির বিশেষত মান নির্দিষ্ট করতে দেয় ।

বলুন যে আপনি 2 টি তালিকা যোগ করতে চান, এটি দেখতে এর মতো হতে পারে:

A = [7, 8, 9]
B = [1, 2, 3]
sum = 0
sum = A.reduce( sum, (x, y) => x + y )
sum = B.reduce( sum, (x, y) => x + y )

বা এমন একটি সংস্করণ যা আপনি আসল বিশ্বে খুঁজে পেতে পারেন:

A = [7, 8, 9]
B = [1, 2, 3]

sum_func = (x, y) => x + y
sum = A.reduce( B.reduce( 0, sum_func ), sum_func )

এটি একটি ডিবি সফ্টওয়্যারটিতে একটি ভাল জিনিস কারণ মানচিত্র support হ্রাস সমর্থন সহ আপনি ডাটাবেসটি কোনও ডিবিতে কীভাবে সংরক্ষণ করতে হয় তা ব্যবহারের প্রয়োজন ছাড়াই কাজ করতে পারবেন, এটি একটি ডিবি ইঞ্জিন কী তা জানায়।

আপনাকে কেবল ইঞ্জিনটি "ম্যাপ" বা "হ্রাস ফাংশন" সরবরাহের মাধ্যমে কী চান তা "বলার" সক্ষম হতে হবে এবং তারপরে ডিবি ইঞ্জিনটি ডেটাগুলির চারপাশে তার উপায় খুঁজে পেতে পারে, আপনার ফাংশনটি প্রয়োগ করতে পারে এবং ফলাফলগুলি আপনাকে সামনে নিয়ে আসতে পারে এটি কীভাবে সমস্ত রেকর্ডের উপরে চলে যায় তা না জেনে সবই চান।

একটি সূচক এবং কী এবং যোগ এবং দর্শন এবং একক ডাটাবেস রাখতে পারে এমন প্রচুর স্টাফ রয়েছে, সুতরাং কীভাবে ডেটা আসলে সংরক্ষণ করা হয় তার বিরুদ্ধে আপনাকে রক্ষা করে আপনার কোডটি লিখতে ও বজায় রাখা আরও সহজ করে তুলেছে।

সমান্তরাল প্রোগ্রামিংয়ের ক্ষেত্রেও একই রকম হয়, যদি আপনি কেবল লুপিং কোডটি বাস্তবায়নের পরিবর্তে ডেটা দিয়ে যা করতে চান তা নির্দিষ্ট করে থাকেন তবে অন্তর্নিহিত অবকাঠামোটি আপনার জন্য একযোগে সমান্তরাল লুপে "সমান্তরাল" হতে পারে এবং আপনার ফাংশনটি কার্যকর করতে পারে।


ঠিক আছে, আমি মানচিত্রটি বুঝতে পারি এবং স্বতন্ত্রভাবে নেওয়া কমিয়ে আছি। তবে আমি কী অ্যাপ্লিকেশনগুলি হ্রাস করতে পারি? গুগল দৃশ্যে তারা কি উদাহরণস্বরূপ এমন পরামিতিগুলির সংক্ষিপ্তসার হিসাবে ব্যবহার করবে যা তাদের প্রদত্ত কীওয়ার্ডের জন্য একটি পৃষ্ঠা র‌্যাঙ্কিং দেয়?
লরেঞ্জো

@lbolognini var total = orderes.Sum (o => o.UnitPrice * o.Quantity)
চক্রত

@lbolognini আপনি লুপিংয়ের ধারণাটি বাদ দিয়ে অনেক ব্যবহার করতে পারেন। গুগলের দৃশ্যে তাদের কাছে পেজরঙ্কগুলি, লিঙ্কগুলি এবং হোয়াট নোট গণনা করার জন্য সম্ভবত বাকী অসংখ্য মেশিন রয়েছে। যখন আরও কয়েকটি সার্ভার যুক্ত করার দরকার পড়ে তখন তারা কী করবে? প্রতিটি একক লুপিং কোডটি সংশোধন করা সম্ভবত কোনও বিকল্প নয়। সুতরাং তারা যা করেছে তা হ'ল তারা তার পরিবর্তে "হ্রাস" ফাংশনের বিরুদ্ধে তাদের গণনা কোডটি লেখেন ... এবং যখন সার্ভারগুলির তালিকা পরিবর্তন হয়, কেবলমাত্র "হ্রাস" ফাংশনটি পরিবর্তন করা দরকার। বুঝেছি?
চকৃত

গড় গণনা হ্রাস কিভাবে? আমি যা দেখেছি তা থেকে আমি অনুমান করছি যে আপনি পারবেন না? সম্ভবত সংখ্যার এবং ডিনোমিনেটরের মানচিত্র তৈরি করুন এবং উভয়ের সমষ্টি শেষে ভাগ করুন?
andyczerwonka 13

@ আর্টিকটেনপেইগুইন আমি সেখানে কিছুটা জেনেরিক হচ্ছি। আসলে Average()উপরের দিকে আইসিং হয় Sum()। তবে আমি এটি সম্পর্কে ফাংশনটিকে "হ্রাস" বলা হয় তা বোঝানোর জন্য কথা বললাম ... একটি গড় ফাংশন এমন কিছু যা সংখ্যার একটি তালিকা নেয় এবং এটি একটি একক সংখ্যায় (যা গড়) কমিয়ে দেয়
চকৃত

60

বিকাশকারীকে ম্যাপার ব্যতীত অন্য কোনও কোড লেখার জন্য এবং ফাংশনগুলি হ্রাস না করে সমান্তরালভাবে বিস্তীর্ণ পরিমাণে ডেটা প্রক্রিয়া করার জন্য ম্যাপ্রেডস একটি পদ্ধতি।

মানচিত্র ফাংশন ফলে, যা একটি বাধা অনুষ্ঠিত হয় আউট তথ্য এবং churns লাগে। এই ফাংশনটি একই সংখ্যক একই মানচিত্রের টাস্কের সাথে সমান্তরালভাবে চলতে পারে । ডেটাসেটটি তখন একটি স্কেলারের মান হ্রাস করা যায়।

সুতরাং আপনি যদি এটি এসকিউএল স্টেটমেন্টের মতো ভাবেন

SELECT SUM(salary)
FROM employees
WHERE salary > 1000
GROUP by deptname

আমরা বেতন> 1000 সহ আমাদের কর্মচারীদের সাবসেট পেতে মানচিত্রটি ব্যবহার করতে পারি যা মানচিত্রটি গ্রুপের আকারের বালতিগুলিতে বাধা সৃষ্টি করে।

হ্রাস সেই গ্রুপগুলির প্রত্যেকের যোগফল করবে। আপনাকে আপনার ফলাফল সেট প্রদান।

গুগল পেপারের আমার বিশ্ববিদ্যালয়ের স্টাডি নোটগুলি থেকে এটি সবেমাত্র নেওয়া হয়েছে


33
  1. একগুচ্ছ ডেটা নিন
  2. এমন এক ধরণের রূপান্তর সম্পাদন করুন যা প্রতিটি ডাটামকে অন্য ধরণের ডেটামে রূপান্তর করে
  3. এখনও সহজ তথ্য মধ্যে নতুন তথ্য একত্রিত করুন

দ্বিতীয় ধাপটি মানচিত্র। পদক্ষেপ 3 হ্রাস করা হয়।

উদাহরণ স্বরূপ,

  1. রাস্তায় এক জোড়া চাপ চাপে দুটি আবেগের মধ্যে সময় পান
  2. মিটার দূরত্বের উপর ভিত্তি করে সেই সময়গুলিকে গতিতে মানচিত্র করুন
  3. গড় গতিতে সেই গতি হ্রাস করুন

ম্যাপ্রেডুসটি ম্যাপ এবং হ্রাসের মধ্যে বিভক্ত হওয়ার কারণ হ'ল বিভিন্ন অংশ সহজেই সমান্তরালে করা যায়। (বিশেষত যদি হ্রাসের নির্দিষ্ট গাণিতিক বৈশিষ্ট্য থাকে))

মানচিত্রে একটি জটিল তবে ভাল বর্ণনার জন্য দেখুন: গুগলের ম্যাপ্রেডস প্রোগ্রামিং মডেল - পুনর্বিবেচিত (পিডিএফ)


1
আমি পদক্ষেপ 3 এর জন্য বলব, "রূপান্তর" এর পরিবর্তে "একত্রিত করুন"
ট্রমাপনি

প্রথমবার, তিনটি উত্তর মিলিয়ে সেরা উত্তর answer প্রথমে নাসেরের নিবন্ধের লিঙ্কটি পড়ুন (তাত্ত্বিক হাই-লেভেল) তারপরে চক্রীর উত্তর (মানচিত্র হ্রাসের স্বতন্ত্র ব্যাখ্যা) এখন ফ্রাঙ্কের উত্তর (বিখ্যাত ম্যাপ্রেইডুস আইডিয়ামটি কী)) আপনাকে তিনটি ধন্যবাদ। :)
অজিত গঙ্গা

20

মানুষ শেষ ডাইনোসরগুলিকে মেরেছিল এমন সময় থেকেই ম্যাপ এবং রেডুউস পুরানো লিস্প ফাংশন।

কল্পনা করুন যে আপনার কাছে নাম, সেখানে বসবাসরত মানুষের সংখ্যা এবং শহরের আকার সম্পর্কিত তথ্য সহ শহরগুলির একটি তালিকা রয়েছে:

(defparameter *cities*
  '((a :people 100000 :size 200)
    (b :people 200000 :size 300)
    (c :people 150000 :size 210)))

এখন আপনি সর্বাধিক জনসংখ্যার ঘনত্বের শহরটি খুঁজতে চাইতে পারেন।

প্রথমে আমরা এমএপি ব্যবহার করে শহরের নাম এবং জনসংখ্যার ঘনত্বের একটি তালিকা তৈরি করি:

(map 'list
     (lambda (city)
         (list (first city)
               (/ (getf (rest city) :people)
                  (getf (rest city) :size))))
     *cities*)

=>   ((A 500) (B 2000/3) (C 5000/7))

REDUCE ব্যবহার করে আমরা এখন সবচেয়ে বেশি জনসংখ্যার ঘনত্বের শহরটি খুঁজে পেতে পারি।

(reduce (lambda (a b)
          (if (> (second a) (second b))
             a
             b))
        '((A 500) (B 2000/3) (C 5000/7)))

 =>   (C 5000/7)

উভয় অংশের সংমিশ্রণে আমরা নিম্নলিখিত কোডটি পাই:

(reduce (lambda (a b)
          (if (> (second a) (second b))
             a
             b))
        (map 'list
             (lambda (city)
                (list (first city)
                   (/ (getf (rest city) :people)
                      (getf (rest city) :size))))
             *cities*))

আসুন ফাংশনগুলি চালু করি:

(defun density (city)
   (list (first city)
         (/ (getf (rest city) :people)
            (getf (rest city) :size))))

(defun max-density (a b)
   (if (> (second a) (second b))
          a
          b))

তারপরে আমরা আমাদের এমএপি রেডু কোডটি এইভাবে লিখতে পারি:

(reduce 'max-density
        (map 'list 'density *cities*))

 =>   (C 5000/7)

এটি কল করে MAPএবং REDUCE(মূল্যায়ন ভিতরে রয়েছে), সুতরাং এটি মানচিত্র হ্রাস বলা হয় ।


@ মোমোলজ: ম্যাক্স ফাংশনটি ইতিমধ্যে বিদ্যমান এবং কিছুটা আলাদা করে। এছাড়াও: ম্যাক্সের পুনরায় সংজ্ঞা দেওয়া উচিত নয়।
রাইনার জোসভিগ

max-densityউত্তৃত অর্গসের দ্বিতীয় উপাদানটির সাথে তুলনা করে , তাই না? নির্বোধ সম্পাদনার জন্য দুঃখিত।
আলেকজান্ডার প্রেসার

@ মোমোলজ: হ্যাঁ, এটি দ্বিতীয় উপাদান এবং এটি কেবলমাত্র এই ছোট উদাহরণের প্রসঙ্গেই কার্যকর। কোডটি তথ্যের কাঠামোর তালিকা হিসাবে কিছুটা পুরানো স্টাইলে লিস্পেও উদ্দেশ্য নিয়ে লেখা হয়েছিল ...
রাইনার জোসভিগ

17

গুগল পেপার থেকে উদাহরণটি নেওয়া যাক । মানচিত্রের লক্ষ্যটি হ'ল কিছু ধরণের অ্যালগরিদমের জন্য সমান্তরালে কাজ করে প্রসেসিং ইউনিটগুলির দক্ষতার সাথে দক্ষতার সাথে ব্যবহার করতে সক্ষম হওয়া। উদাহরণটি নিম্নরূপ: আপনি দস্তাবেজের একটি সেটে সমস্ত শব্দ এবং তাদের গণনা বের করতে চান।

সাধারণ বাস্তবায়ন:

for each document
    for each word in the document
        get the counter associated to the word for the document
        increment that counter 
    end for
end for

মানচিত্রের প্রয়োগ:

Map phase (input: document key, document)
for each word in the document
    emit an event with the word as the key and the value "1"
end for

Reduce phase (input: key (a word), an iterator going through the emitted values)
for each value in the iterator
    sum up the value in a counter
end for

এর আশেপাশে, আপনার একটি মাস্টার প্রোগ্রাম থাকবে যা নথির সেটগুলিকে "স্প্লিট" এ ভাগ করবে যা মানচিত্রের পর্বের সমান্তরালে পরিচালিত হবে। নির্গত মানগুলি শ্রমিকের দ্বারা নির্দিষ্ট একটি বাফারে শ্রমিক লিখে থাকে। তারপরে মাস্টার প্রোগ্রামটি অন্য কর্মীদের হ্রাস করার পর্বটি সম্পাদন করার জন্য নিযুক্ত করার সাথে সাথেই বাফারটি হ্যান্ডেল করার জন্য প্রস্তুত রয়েছে তা অবহিত করা হয়।

প্রতিটি কর্মী আউটপুট (মানচিত্র বা হ্রাসকারী কর্মী হওয়া) আসলে বিতরণকৃত ফাইল সিস্টেমে (গুগলের জন্য জিএফএস) বা কাউচডিবি-র জন্য বিতরণ করা ডাটাবেসে একটি ফাইল সঞ্চিত থাকে।


10

মানচিত্রের জন্য একটি খুব সহজ , দ্রুত এবং "ডামিদের জন্য" পরিচিতিটি এখানে পাওয়া যায়: http://www.marcolotz.com/?p=67

এর কিছু বিষয়বস্তু পোস্ট করা:

প্রথমত, মানচিত্রের মূলত কেন তৈরি করা হয়েছিল?

মূলত গুগলের বৃহত গণনার কাজগুলিকে সহজেই সমান্তরাল করে তোলার জন্য একটি সমাধানের প্রয়োজন ছিল, যাতে নেটওয়ার্কের মাধ্যমে সংযুক্ত বেশ কয়েকটি মেশিনে ডেটা বিতরণ করা যায়। এদিকে, এটিকে স্বচ্ছ উপায়ে মেশিনের ব্যর্থতা পরিচালনা করতে হবে এবং ভারসাম্য রোধের সমস্যাগুলি পরিচালনা করতে হবে।

মানচিত্রের আসল শক্তি কী?

কেউ বলতে পারেন যে ম্যাপ্রেডস যাদুটি মানচিত্র এবং হ্রাস ফাংশন অ্যাপ্লিকেশানের উপর ভিত্তি করে। আমার অবশ্যই সাথীকে স্বীকার করতে হবে, আমি দৃ strongly়ভাবে একমত নই। ম্যাপরেডুসকে এত জনপ্রিয় করে তুলেছে যে প্রধান বৈশিষ্ট্যটি হ'ল সাধারণ ইন্টারফেসের সাথে মিলিত করে এটি স্বয়ংক্রিয় সমান্তরালকরণ এবং বিতরণ করার ক্ষমতা cap এই ত্রুটিটিকে এত জনপ্রিয় করে তুলেছে বেশিরভাগ ত্রুটির জন্য স্বচ্ছ ব্যর্থতা পরিচালনার সাথে সংযুক্ত এই ফ্যাক্টরটি।

কাগজে আরও কিছু গভীরতা:

সমান্তরাল পদ্ধতির এবং পণ্য-কম্পিউটার ক্লাস্টারগুলি ব্যবহার করে বিগ ডেটাতে গণনা করার সমাধান হিসাবে ম্যাপ্রেডস মূলত একটি গুগল পেপারে (ডিন ও ঘেমাওয়াত, 2004 - এখানে লিঙ্ক) উল্লেখ করা হয়েছিল। হ্যাডোপের বিপরীতে, এটি জাভাতে লেখা, গুগলের কাঠামোটি সি ++ তে লেখা হয়। দস্তাবেজটি বর্ণনা করে যে কীভাবে একটি সমান্তরাল কাঠামোটি মানচিত্র ব্যবহার করে আচরণ করবে এবং বৃহত ডেটা সেটগুলিতে ফাংশনাল প্রোগ্রামিং থেকে ফাংশন হ্রাস করবে।

এই সমাধানে দুটি প্রধান পদক্ষেপ থাকবে - যাকে বলা হয় মানচিত্র এবং হ্রাস - প্রথম এবং দ্বিতীয়টির মধ্যে একটি stepচ্ছিক পদক্ষেপ - যাকে সম্মিলন বলা হয়। মানচিত্রের পদক্ষেপটি প্রথমে চলবে, ইনপুট কী-মান জোড়ায় গণনা করবে এবং একটি নতুন আউটপুট কী-মান তৈরি করবে। একটি অবশ্যই মনে রাখতে হবে যে ইনপুট কী-মান জোড়ার ফর্ম্যাটটি আউটপুট ফর্ম্যাট জুটির সাথে প্রয়োজনীয়ভাবে মেলে না। হ্রাস পদক্ষেপ এটি একই কী এর সমস্ত মান একত্রিত করবে, এটির উপরে অন্যান্য গণনা সম্পাদন করবে। ফলস্বরূপ, এই শেষ পদক্ষেপটি মূল-মান জোড়া আউটপুট করে। শব্দ সংখ্যা গণনা করা মানচিত্রের সবচেয়ে তুচ্ছ অ্যাপ্লিকেশনগুলির মধ্যে একটি।

এই অ্যাপ্লিকেশনটির সিউডো-কোডটি দেওয়া হয়েছে:

map(String key, String value):

// key: document name
// value: document contents
for each word w in value:
EmitIntermediate(w, “1”);

reduce(String key, Iterator values):

// key: a word
// values: a list of counts
int result = 0;
for each v in values:
    result += ParseInt(v);
Emit(AsString(result));

যেহেতু কেউ লক্ষ্য করতে পারে, মানচিত্রটি একটি রেকর্ডে সমস্ত শব্দ পড়ে (এই ক্ষেত্রে একটি রেকর্ড একটি লাইন হতে পারে) এবং একটি কী হিসাবে এবং 1 নম্বর হিসাবে শব্দটি প্রকাশ করে। পরে, হ্রাসগুলি একই কী এর সমস্ত মানকে গ্রুপ করবে। আসুন একটি উদাহরণ দিন: কল্পনা করুন যে 'বাড়ি' শব্দটি রেকর্ডটিতে তিনবার উপস্থিত হয়েছে। হ্রাসকারীর ইনপুটটি হবে [বাড়ি, [1,1,1]]। হ্রাসকারীটিতে, এটি মূল ঘরের জন্য সমস্ত মানগুলির সংমিশ্রণ করবে এবং আউটপুট হিসাবে নিম্নলিখিত মূল মানটি দেবে: [বাড়ি, [৩]]।

মানচিত্রের ফ্রেমওয়ার্কে এটি কীভাবে প্রদর্শিত হবে তার একটি চিত্র এখানে রয়েছে:

মূল ম্যাপ্রেড গুগল পেপার থেকে চিত্র paper

মানচিত্রার অ্যাপ্লিকেশনগুলির কয়েকটি অন্যান্য ধ্রুপদী উদাহরণ হিসাবে, কেউ বলতে পারেন:

URL ইউআরএল অ্যাক্সেস ফ্রিকোয়েন্সি গণনা

বিপরীত ওয়েব লিঙ্ক গ্রাফ

• বিতরণ গ্রেপ

হোস্টের জন্য m টার্ম ভেক্টর

অতিরিক্ত নেটওয়ার্ক ট্র্যাফিক এড়ানোর জন্য, কাগজটি বর্ণনা করে যে কীভাবে ফ্রেমওয়ার্কটি ডেটার লোকাল বজায় রাখতে চেষ্টা করা উচিত। এর অর্থ এই যে সর্বদা এটি নিশ্চিত করার চেষ্টা করা উচিত যে কোনও মেশিনে চলমান মেশিনের নেটওয়ার্ক থেকে এটি আনতে এড়ানো এড়িয়ে যাওয়ার স্মৃতি / স্থানীয় স্টোরেজে ডেটা রয়েছে। একটি ম্যাপার লাগানোর মাধ্যমে নেটওয়ার্ক হ্রাস করার লক্ষ্যে, আগে বর্ণিত alচ্ছিক সংযোজক পদক্ষেপটি ব্যবহৃত হয়। কম্বিনার রেডুসারদের প্রেরণের আগে প্রদত্ত মেশিনে ম্যাপারগুলির আউটপুট নিয়ে গণনা সম্পাদন করে - এটি অন্য কোনও মেশিনে থাকতে পারে।

নথিতেও বর্ণনা করা হয়েছে যে ত্রুটির ক্ষেত্রে কাঠামোর উপাদানগুলি কীভাবে আচরণ করা উচিত। কাগজে এই উপাদানগুলিকে কর্মী এবং মাস্টার হিসাবে ডাকা হয়। ওপেন সোর্স বাস্তবায়নের ক্ষেত্রে এগুলিকে আরও নির্দিষ্ট উপাদানগুলিতে ভাগ করা হবে। যেহেতু গুগল কেবল কাগজে এই পদ্ধতির বর্ণনা দিয়েছে এবং এর মালিকানাধীন সফ্টওয়্যার প্রকাশ করেছে না, তাই মডেলটি বাস্তবায়নের জন্য অনেকগুলি মুক্ত-উত্স কাঠামো তৈরি করা হয়েছিল। উদাহরণ হিসাবে কেউ হ্যাডোপ বা মঙ্গোডিবি-তে সীমিত মানচিত্রের বৈশিষ্ট্য বলতে পারে।

রান-টাইমটি অ-বিশেষজ্ঞ প্রোগ্রামারদের বিশদ যেমন: ইনপুট ডেটা বিভাজন করা, মেশিনের বৃহত সেট জুড়ে প্রোগ্রামের নির্ধারনের সময়সূচি নির্ধারণ করা, মেশিন ব্যর্থতাগুলি পরিচালনা করা (অবশ্যই স্বচ্ছ উপায়ে) এবং আন্তঃ-মেশিন যোগাযোগ পরিচালনা করা উচিত । একজন অভিজ্ঞ ব্যবহারকারী এই পরামিতিগুলি টিউন করতে পারেন, কীভাবে শ্রমিকদের মধ্যে ইনপুট ডেটা বিভক্ত হবে।

মূল ধারণা:

ফল্ট অভ্যস্ত:এটি অবশ্যই মেশিনের ব্যর্থতা গ্রেপ্তার সহ্য করতে হবে। এটি সম্পাদন করার জন্য, মাস্টার পর্যায়ক্রমে শ্রমিকদের pings। মাস্টার যদি একটি নির্দিষ্ট সময়ের মধ্যে কোনও প্রদত্ত শ্রমিকের কাছ থেকে প্রতিক্রিয়া না পান তবে মাস্টার সেই কর্মীকে ব্যর্থ বলে কাজটিকে সংজ্ঞায়িত করবেন। এই ক্ষেত্রে, ত্রুটিযুক্ত শ্রমিক দ্বারা সম্পন্ন সমস্ত মানচিত্রের কাজগুলি ফেলে দেওয়া হয় এবং অন্য উপলব্ধ কর্মীকে দেওয়া হয়। একইভাবে ঘটে যদি শ্রমিক এখনও কোনও মানচিত্র বা একটি হ্রাস টাস্ক প্রক্রিয়াজাত করে। মনে রাখবেন যে কর্মী যদি ইতিমধ্যে এর হ্রাস অংশটি সম্পন্ন করে থাকে তবে সমস্ত ব্যর্থতার ব্যর্থতার সময় ইতিমধ্যে সমস্ত গণনা শেষ হয়ে গিয়েছিল এবং পুনরায় সেট করার দরকার নেই। ব্যর্থতার প্রাথমিক পয়েন্ট হিসাবে, মাস্টার যদি ব্যর্থ হয় তবে সমস্ত কাজ ব্যর্থ হয়। এই কারণে, কেউ তার ডেটা কাঠামোটি সংরক্ষণ করার জন্য মাস্টারের জন্য পর্যায়ক্রমিক চেকপয়েন্টগুলি সংজ্ঞায়িত করতে পারে।

Ity লোকেশন: নেটওয়ার্ক ট্র্যাফিক এড়ানোর জন্য, ফ্রেমওয়ার্কটি নিশ্চিত করার চেষ্টা করে যে সমস্ত ইনপুট ডেটা মেশিনগুলিতে স্থানীয়ভাবে উপলব্ধ রয়েছে যা সেগুলিতে কম্পিউটার তৈরি করতে চলেছে। মূল বিবরণে, এটি প্রতিলিপি ফ্যাক্টর 3 এবং ব্লক আকার 64 এমবি সহ গুগল ফাইল সিস্টেম (জিএফএস) ব্যবহার করে। এর অর্থ 64৪ মেগাবাইটের একই ব্লকের (যেটি ফাইল সিস্টেমে একটি ফাইল রচনা করে) তিনটি পৃথক মেশিনে অভিন্ন অনুলিপি রাখবে। মাস্টার জানেন যে কোথায় ব্লক রয়েছে এবং সেই মেশিনে মানচিত্রের কাজের সময় নির্ধারণের চেষ্টা করুন। যদি এটি ব্যর্থ হয় তবে মাস্টার টাস্ক ইনপুট ডেটার (যেমন ডেটা মেশিনের একই র্যাকের একটি ওয়ার্কার মেশিন) এর একটি প্রতিরূপের কাছে একটি মেশিন বরাদ্দ দেওয়ার চেষ্টা করেন।

টাস্ক গ্র্যানুলারিটিপরিবর্তন: ধরে নেওয়া যাক প্রতিটি মানচিত্র ফেজ এম টুকরা বিভক্ত করা হয় এবং প্রতিটি কমাতে ফেজ আর টুকরা বিভক্ত করা হয় যে, আদর্শ হতে হবে যে M এবং আর কর্মী মেশিন সংখ্যার চেয়ে অনেক বড় হয়। এই কারণে যে কোনও শ্রমিক অনেকগুলি বিভিন্ন কার্য সম্পাদন করে গতিশীল লোড ভারসাম্য উন্নত করে। এ ছাড়াও, কর্মী ব্যর্থ হওয়ার ক্ষেত্রে এটি পুনরুদ্ধারের গতি বাড়িয়ে তোলে (যেহেতু এটি সম্পন্ন বহু মানচিত্রের কাজ অন্যান্য সমস্ত মেশিনে ছড়িয়ে দেওয়া যেতে পারে)।

ব্যাকআপ টাস্ক: কখনও কখনও, একটি মানচিত্র বা রিডুসার কর্মী ক্লাস্টারের অন্যদের তুলনায় অনেক বেশি ধীর আচরণ করতে পারে। এটি মোট প্রসেসিং সময় ধরে রাখতে পারে এবং এটিকে একক ধীর মেশিনের প্রক্রিয়াকরণের সময়ের সমান করে তুলতে পারে। মূল কাগজটি ব্যাকআপ টাস্ক নামে একটি বিকল্প বর্ণনা করে, যা কোনও মানচিত্রের অপারেশন সমাপ্তির কাছাকাছি হলে মাস্টার দ্বারা নির্ধারিত হয়। এগুলি হ'ল কার্যগুলি যা অগ্রগতিমূলক কাজের মাস্টার দ্বারা নির্ধারিত হয়। সুতরাং, প্রাথমিক বা ব্যাকআপ শেষ হলে মানচিত্রে অপারেশন সম্পূর্ণ হয়।

কাউন্টার: কখনও কখনও এক ঘটনা ঘটনা গণনা ইচ্ছা হতে পারে। এই কারণে, গণনা করা হয়েছে যেখানে তৈরি। প্রতিটি শ্রমিকের পাল্টা মানগুলি পর্যায়ক্রমে মাস্টারের কাছে প্রচার করা হয়। তারপরে মাস্টার একত্রিত হন (হ্যাঁ। প্রাগেল এগ্রিগেটরগুলি মনে হয় এই জায়গা থেকে এসেছে) একটি সফল মানচিত্রের পাল্টা মানগুলি এবং কার্য হ্রাস করে এবং মানচিত্রের ক্রিয়াকলাপটি সম্পূর্ণ হওয়ার পরে তাদের ব্যবহারকারীর কোডে ফিরিয়ে দিন। মাস্টার স্ট্যাটাসে একটি বর্তমান কাউন্টার মানও পাওয়া যায়, সুতরাং কোনও প্রক্রিয়া পর্যবেক্ষণকারী একজন মানুষ এটি কীভাবে আচরণ করছে তা ট্র্যাক রাখতে পারে।

ঠিক আছে, আমি উপরের সমস্ত ধারণাটি নিয়ে অনুমান করি, হাদুপ আপনার জন্য কেকের টুকরো হবে। মূল মানচিত্রের নিবন্ধ বা সম্পর্কিত কিছু সম্পর্কে আপনার যদি কোনও প্রশ্ন থাকে তবে দয়া করে আমাকে জানান।


4

আমি ট্রাইটি শব্দ করতে চাই না, তবে এটি আমাকে এতটা সহায়তা করেছে এবং এটি বেশ সহজ:

cat input | map | reduce > output

4

আপনি যদি পাইথনের সাথে পরিচিত হন, তবে ম্যাপ্রেডসের সহজতম ব্যাখ্যা নিম্নলিখিত:

In [2]: data = [1, 2, 3, 4, 5, 6]
In [3]: mapped_result = map(lambda x: x*2, data)

In [4]: mapped_result
Out[4]: [2, 4, 6, 8, 10, 12]

In [10]: final_result = reduce(lambda x, y: x+y, mapped_result)

In [11]: final_result
Out[11]: 42

কাঁচা ডেটার প্রতিটি বিভাগকে পৃথকভাবে কীভাবে প্রক্রিয়া করা হয়েছিল তা দেখুন, এই ক্ষেত্রে, 2 ( ম্যাপ্রেডুসের মানচিত্রের অংশ) দ্বারা গুণিত হয়েছে । এর উপর ভিত্তি করে mapped_result, আমরা উপসংহারে পৌঁছেছি যে ফলাফলটি হবে 42( মানচিত্রের হ্রাস অংশ)।

এই উদাহরণ থেকে একটি গুরুত্বপূর্ণ উপসংহার এই সত্য যে প্রক্রিয়াজাতকরণের প্রতিটি অংশ অন্য অংশের উপর নির্ভর করে না। উদাহরণস্বরূপ, যদি thread_1মানচিত্র [1, 2, 3]এবং thread_2মানচিত্রগুলি [4, 5, 6]হয় তবে উভয় থ্রেডের চূড়ান্ত ফলাফলটি এখনও থাকবে [2, 4, 6, 8, 10, 12]তবে আমরা এর জন্য প্রক্রিয়াজাতকরণের সময়টি অর্ধেকে রেখেছি । হ্রাস অপারেশনের ক্ষেত্রে একই কথা বলা যেতে পারে এবং ম্যাপ্রেডিউস সমান্তরাল কম্পিউটিংয়ে কীভাবে কাজ করে তার সারমর্ম।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.