মানচিত্র হ্রাস প্রোগ্রামিং-এ রিডুসারে ধাপ পরিবর্তন এবং বাছাইয়ের উদ্দেশ্য কী?


113

মানচিত্র হ্রাস প্রোগ্রামিংয়ে হ্রাস পর্বের উপ-অংশ হিসাবে পরিবর্তন, বাছাই এবং হ্রাস রয়েছে। বাছাই করা ব্যয়বহুল ব্যাপার।

মানচিত্র হ্রাস প্রোগ্রামিং-এ রিডুসারে ধাপ পরিবর্তন এবং বাছাইয়ের উদ্দেশ্য কী?


3
আমি সবসময় ধরে নিয়েছি যে এটি প্রয়োজনীয় ছিল কারণ ম্যাপার থেকে আউটপুট হ্রাসকারকের জন্য ইনপুট হয়, তাই এটি কীস্পেসের উপর ভিত্তি করে সাজানো হয়েছিল এবং তারপরে প্রতিটি রিডুসার ইনপুটটির জন্য বালতিগুলিতে বিভক্ত হয়েছিল।
বেসিকহরিজন

উত্তর:


171

প্রথমত shufflingহ'ল ম্যাপারগুলি থেকে হ্রাসকারীদের কাছে ডেটা স্থানান্তর করার প্রক্রিয়া, তাই আমি মনে করি এটি স্পষ্টতই যে এটি হ্রাসকারীদের জন্য প্রয়োজনীয়, অন্যথায়, তাদের কোনও ইনপুট (বা প্রতিটি ম্যাপার থেকে ইনপুট) রাখতে সক্ষম হবে না । কিছুটা সময় বাঁচানোর জন্য মানচিত্রের পর্ব শেষ হওয়ার আগেই বদলানো শুরু হতে পারে। এজন্য আপনি যখন মানচিত্রের স্থিতিটি 100% না থেকে 0% (তবে 33% এরও কম) এর চেয়ে বেশি হ্রাসের স্থিতি দেখতে পাবেন।

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

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

এই পদক্ষেপগুলির জন্য তথ্যের একটি দুর্দান্ত উত্স হ'ল এই ইয়াহু টিউটোরিয়াল

এটির একটি দুর্দান্ত গ্রাফিকাল উপস্থাপনা নিম্নলিখিত: (এই চিত্রটিতে নকল "বলা হয়")

এখানে চিত্র বর্ণনা লিখুন

মনে রাখবেন shufflingএবং sortingআপনি শূন্য হ্রাসকারীদের (setNumReduceTasks (0)) নির্দিষ্ট করে নিলে এবং সম্পাদিত হয় না। তারপরে, মানচিত্রের কাজটি মানচিত্রের পর্যায়ে থামবে এবং মানচিত্রের পর্যায়ে কোনও ধরণের বাছাই করা অন্তর্ভুক্ত হবে না (তাই এমনকি মানচিত্রের পর্বটি আরও দ্রুত)।

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


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

1
@ ম্যাক্সনভারমাইন্ড যদি আপনার কাছে এক্স হ্রাস কার্য (পার্টিশন) থাকে তবে এর অর্থ এই নয় যে আপনি হ্রাস () পদ্ধতিটি x বার কল করবেন। এটি প্রতিটি স্বতন্ত্র কী জন্য একবার কল করা হবে। সুতরাং একটি হ্রাস টাস্কটি হ্রাস () পদ্ধতিটিকে কয়েকবার কল করতে পারে।
vefthym

"প্রতিটি স্বতন্ত্র কীটির জন্য এটি একবার কল করা হবে" কেন? ম্যাপারটি যেভাবেই পার্টিশন গঠন করে (প্রতিটি স্বতন্ত্র কীগুলির জন্য একটি পার্টিশনের প্রয়োজন হয় না), তারপরে প্রতিটি পার্টিশন রিডুসারে যায়, এটি কি ভুল?
ম্যাকনেভারমাইন্ড

1
@ ম্যাক্সনভারমাইন্ড ম্যাপার কী এবং মানগুলি আউটপুট করে, এটি পার্টিশন গঠন করে না। পার্টিশনগুলি ব্যবহারকারী দ্বারা সংজ্ঞায়িত কার্যগুলি এবং পার্টিশনারের বাস্তবায়ন সংখ্যার দ্বারা সংজ্ঞায়িত করা হয়। একই কী থাকা সমস্ত ম্যাপারগুলির আউটপুটগুলি একই হ্রাস () পদ্ধতিতে চলেছে। এটি পরিবর্তন করা যায় না। কিন্তু কি করতে পরিবর্তন করা অন্য কী (যদি থাকে) একই পার্টিশন স্থাপন করা হবে এবং এইভাবে, একই কাজের দ্বারা পরিচালিত হবে। একটি হ্রাসকারী টাস্ক হ্রাস () ফাংশনটিকে একাধিকবার কল করতে পারে তবে প্রতি চাবির জন্য একবার মাত্র।
vefthym

2
ঠিক আছে আমি মনে করি আমি এটি পেয়েছি। আমার সমস্যাটি হ'ল আমি ভুলে গিয়েছি যে হ্রাসটি কেবল একটি কী-মান জোড়াকেই নয় আর্গুমেন্ট হিসাবে মানগুলির একটি তালিকা গ্রহণ করে। আমি মনে করি আপনার উত্তরে এইটি বিস্তারিতভাবে বর্ণনা করা উচিত: "প্রতিটি হ্রাস টাস্কটি মূল-মান জোড়গুলির একটি তালিকা নেয় তবে এটি কমানো পদ্ধতিতে কল করতে হয় যা একটি কী-তালিকা <মূল্য> গ্রহণ করে, সুতরাং এটি কী দ্বারা মানগুলি গোষ্ঠীভুক্ত করা সহজ, এটি সহজ ইনপুট ডেটা কোনও ম্যাপার পর্যায়ে প্রাক সাজানো থাকলে তা করতে "
ম্যাক্সভার্ভারমাইন্ড

42

আসুন ম্যাপ্রেডুস প্রোগ্রামের মূল পর্যায়গুলি আবার ঘুরে দেখি।

মানচিত্র ফেজ ম্যাপারদের দ্বারা সম্পন্ন করা হয়। ম্যাপারগুলি অরপোর্টড ইনপুট কী / মান জোড়ায় চালিত হয়। প্রতিটি ম্যাপার প্রতিটি ইনপুট কী / মান জোড়ার জন্য শূন্য, এক, বা একাধিক আউটপুট কী / মান জোড়া নির্গত করে।

মেশা ফেজ combiners দ্বারা সম্পন্ন করা হয়। Combiner একই কী দিয়ে কী / মান জোড়া একত্রিত করা উচিত নয়। প্রতিটি কম্বিনার শূন্য, একবার বা একাধিকবার চালাতে পারে।

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

পার্টিশনকারী সিদ্ধান্ত নেয় যা হ্রাসকারক একটি নির্দিষ্ট কী মান যুগল পাবেন।

হ্রাসকারক গ্রহণ করে কী / [মান তালিকা] জোড়া সাজানো, কী অনুসারে সাজানো। মান তালিকায় ম্যাপারদের দ্বারা উত্পাদিত একই কী সহ সমস্ত মান রয়েছে। প্রতিটি রিডিউসার প্রতিটি ইনপুট কী / মান জোড়ার জন্য শূন্য, এক বা একাধিক আউটপুট কী / মান জোড়া নির্গত করে

এই javacodegeeks কটাক্ষপাত আছে নিবন্ধটি মারিয়া Jurcovicova দ্বারা এবং mssqltips ভাল করে বুঝতে জন্য দত্ত দ্বারা নিবন্ধ

নীচে সাফারিবুকসনলাইন নিবন্ধের চিত্রটি রয়েছে

এখানে চিত্র বর্ণনা লিখুন


আমি মনে করি ছবিতে একটি টাইপো রয়েছে (যা আমি বুঝতে পারি যে এখানে কেবল অনুলিপি করা হয়েছে)। আমি বিশ্বাস করি ieরিডুসার এবং আউটপুট এর অধীনে স্ট্রিংগুলি আসলে হওয়া উচিত is
জেফ ইভান্স 15

32

আমি উপরের উত্তরগুলি থেকে অনুপস্থিত কিছু পয়েন্ট যুক্ত করার কথা ভেবেছিলাম। এখান থেকে নেওয়া এই চিত্রটিতে প্রকৃতপক্ষে কী চলছে তা পরিষ্কারভাবে জানিয়েছে।

এখানে চিত্র বর্ণনা লিখুন

আমি যদি আবার আসল উদ্দেশ্য বর্ণনা করি

  • স্প্লিট: বিভিন্ন নোড (ম্যাপারদের), যা সামগ্রিক প্রক্রিয়াকরণ সময় বাঁচাতে হবে জুড়ে প্রক্রিয়াকরণ লোড বিতরণ করার মাধ্যমে সমান্তরাল প্রক্রিয়াজাতকরণ উন্নত।

  • একত্রিত করুন: প্রতিটি ম্যাপারের আউটপুট সঙ্কুচিত করে। এটি ডেটা এক নোড থেকে অন্য নোডে স্থানান্তরিত করার জন্য সময় ব্যয় সাশ্রয় করবে।

  • বাছাই করুন (সাফল্য এবং বাছাই করুন): রান-টাইমকে শিডিয়ুল করা (স্পোন / শুরু) নতুন হ্রাসকারীদের সহজ করে তোলে, যেখানে বাছাই করা আইটেম তালিকার মধ্য দিয়ে যাওয়ার সময় যখনই বর্তমান কী পূর্ববর্তী থেকে আলাদা হয়, এটি একটি নতুন রিডিউসার স্প্যান করতে পারে ।


পার্টিশনের পদক্ষেপটি এই গ্রাফের মধ্যে কোথায় আসবে? মানচিত্রের পরে এবং সম্মিলনের আগে?
জোয়েল

@ জোয়েল আমি আশা করি আপনি 'বিভক্ত' পদক্ষেপটি উল্লেখ করেছেন?
সুপুন উইজরাথনে

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

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

4

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


2

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

এটি যথাসম্ভব সহজভাবে ব্যাখ্যা করার চেষ্টা করা হয়েছে


যদি আমরা একই হ্রাসকারকে কে 1, ভি 1 এবং কে 1, ভি 4 প্রেরণ করতে চাই তবে আমরা শিফলিং করতে পারি। তাহলে বাছাইয়ের উদ্দেশ্য কী?
নিতিন কে অনিল

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

এছাড়াও এটি যখন সমষ্টিগতভাবে আসে, আপনি যদি নির্দিষ্ট করে থাকেন যে আপনি কে 1, ভি 1 এর সবগুলিই সংশ্লেষ করতে চান যদি হ্রাসকারক কে 2, ভি 2 তে উপরে উঠার সাথে সাথে রিডিউসারটির ইনপুটটি বাছাই করা হয় তবে এটি জানে যে কে 1, ভি 1 এর আর কোনও উদাহরণ নেই so এটি সমষ্টিটি শেষ করতে পারে যেখানে হ্রাসকারী ইনপুটটি বাছাই না করা হলে কে 1, ভি 1-এর জন্য পুরো ইনপুটটি স্ক্যান করতে হবে
বেসিক হরিজন ২

2

শাফলিং হ'ল প্রক্রিয়া যার মাধ্যমে ম্যাপারদের মধ্যবর্তী ডেটা 0,1 বা আরও হ্রাসকারীকে স্থানান্তর করা হয়। প্রতিটি রিডিউসার 1 বা ততোধিক কী এবং এর সাথে সম্পর্কিত মানগুলি হ্রাসকারীদের সংখ্যার উপর নির্ভর করে (ভারসাম্য বোঝার জন্য) পায়। আরও প্রতিটি কী-এর সাথে সম্পর্কিত মানগুলি স্থানীয়ভাবে বাছাই করা হয়।


0

ম্যাপ্রেডিউস কেবল দুটি জিনিসই নাজাতীয়ভাবে করে: স্কেলযোগ্য গ্রুপবাই অনুসারে বাছাই করুন এবং (সাজানোর মাধ্যমে প্রয়োগ করা হয়েছে)।

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


0

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


0

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

এখন ম্যাপার প্রোগ্রামটি পৃথক করে প্রক্রিয়াকরণের জন্য কীগুলি এবং মানগুলিতে ডেটা সাজান। কী 2 এবং মান 2 মান উত্পন্ন করুন। এই মানগুলির পছন্দসই সমাধান পাওয়ার জন্য যথাযথ ক্রম প্রক্রিয়াকরণ করা উচিত arrange আপনার স্থানীয় সিস্টেমে এই পরিবর্তন এবং বাছাই করা (ফ্রেমওয়ার্ক এটি যত্ন নিন) এবং প্রক্রিয়া কাঠামোর পরে স্থানীয় সিস্টেমে স্থানীয় সিস্টেমে ডেটা পরিষ্কার করে। ঠিক আছে

এই পরিবর্তন এবং সাজানোর প্রক্রিয়াটি অনুকূলকরণের জন্য আমরা এখানে কম্বিনার এবং পার্টিশন ব্যবহার করি । যথাযথ ব্যবস্থাপনার পরে, এই মূল মানগুলি কাঙ্ক্ষিত ক্লায়েন্টের আউটপুট পেতে Reducer এ যায়। অবশেষে Reducer পছন্দসই আউটপুট পান।

কে 1, ভি 1 -> কে 2, ভি 2 (আমরা প্রোগ্রাম ম্যাপারটি লিখব), -> কে 2, ভি '(এখানে ডেফেলটি নরম এবং নরম) -> কে 3, ভি 3 আউটপুট উত্পন্ন করে। K4, V4।

দয়া করে মনে রাখবেন এই সমস্ত পদক্ষেপগুলি কেবল লজিক্যাল অপারেশন, মূল ডেটা পরিবর্তন করে না।

আপনার প্রশ্ন: মানচিত্র হ্রাস প্রোগ্রামিংয়ে রিডিউসারে ধাপটি পরিবর্তন এবং বাছাইয়ের উদ্দেশ্য কী?

সংক্ষিপ্ত উত্তর: পছন্দসই আউটপুট পেতে ডেটা প্রক্রিয়া করা। সাফল্য হ'ল ডেটা সমষ্টিগত, হ্রাস প্রত্যাশিত আউটপুট।

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