MapReduce হলো একটি প্রোগ্রামিং মডেল এবং প্রসেসিং পদ্ধতি যা Hadoop এর মাধ্যমে ডিস্ট্রিবিউটেড ডেটা সেটের উপর কাজ করে। এটি বিশেষভাবে বড় আকারের ডেটা প্রসেসিংয়ের জন্য ডিজাইন করা হয়েছে এবং ডেটাকে ছোট ছোট অংশে ভাগ করে তা একাধিক নোডে প্রসেস করতে সক্ষম হয়।
MapReduce দুটি প্রধান ধাপের সমন্বয়ে কাজ করে: Map এবং Reduce। এই দুটি ধাপের মাধ্যমে, Hadoop ডিস্ট্রিবিউটেড ফাইল সিস্টেমে (HDFS) সংরক্ষিত ডেটার বিশ্লেষণ করা হয়।
MapReduce এর দুটি প্রধান ধাপ
১. Map Step (ম্যাপ স্টেপ)
MapStep হলো প্রথম ধাপ, যেখানে একটি ইনপুট ডেটাসেটকে ছোট ছোট ইউনিটে বিভক্ত করা হয়। এই স্টেপে, Map ফাংশন প্রতিটি ডেটা ব্লক থেকে একটি কীগুচ্ছ (key) এবং মান (value) তৈরি করে।
উদাহরণ:
ধরা যাক, আমরা একটি টেক্সট ফাইল বিশ্লেষণ করতে চাই। Map ফাংশন প্রতিটি শব্দের জন্য একটি কীগুচ্ছ তৈরি করবে, যেখানে কী হবে শব্দ এবং মান হবে সেই শব্দের উপস্থিতির সংখ্যা।
Input: "apple banana apple orange"
Map Output:
("apple", 1), ("banana", 1), ("apple", 1), ("orange", 1)
এই Map Step এর মাধ্যমে ডেটা পেয়ারগুলো তৈরি হয়ে যায়, যা পরবর্তী Reduce Step এ পাঠানো হয়।
২. Reduce Step (রিডিউস স্টেপ)
Reduce Step হলো দ্বিতীয় ধাপ, যেখানে Map স্টেপের আউটপুট নেওয়া হয় এবং প্রতিটি কীগুচ্ছের জন্য মানগুলো একত্রিত করা হয়। অর্থাৎ, এই ধাপে একক কীগুচ্ছের সমস্ত মানগুলো সংগ্রহ করে একটি ফলস্বরূপ ডেটা তৈরি করা হয়।
উদাহরণ:
এখন, "apple" কীগুচ্ছের জন্য সব মানগুলো যোগ করে মোট সংখ্যা বের করা হবে। একইভাবে "banana" এবং "orange" এর জন্যও এটি করা হবে।
Map Output:
("apple", 1), ("banana", 1), ("apple", 1), ("orange", 1)
Reduce Output:
("apple", 2), ("banana", 1), ("orange", 1)
এখানে, "apple"-এর মোট উপস্থিতি ২, "banana"-এর ১, এবং "orange"-এর ১। Reduce Step এই গণনা করে ডেটাকে সমন্বিত করে ফলাফল দেয়।
MapReduce এর কাজ করার পদ্ধতি
- ইনপুট ডেটা লোড করা: প্রথমে, HDFS থেকে ডেটা লোড করা হয়।
- Map ফেজ: প্রতিটি ডেটা ব্লক আলাদা আলাদা Map ফাংশনে প্রেরণ করা হয়, যা কীগুচ্ছ তৈরি করে।
- Shuffle এবং Sort: Map এর আউটপুট থেকে কীগুচ্ছগুলো শাফল এবং সাজানো হয় যাতে একই কীগুচ্ছের মানগুলো একত্রিত করা যায়।
- Reduce ফেজ: Reduce ফাংশন কীগুচ্ছের মানগুলো একত্রিত করে, এবং প্রক্রিয়াকৃত আউটপুট তৈরি করা হয়।
- আউটপুট: প্রক্রিয়াকৃত আউটপুট আবার HDFS এ সংরক্ষিত হয়।
MapReduce এর সুবিধা
- ডিস্ট্রিবিউটেড প্রসেসিং (Distributed Processing): MapReduce বিভিন্ন নোডে ডেটা প্রসেস করার মাধ্যমে দ্রুত ফলাফল দেয়।
- স্কেলেবিলিটি (Scalability): সিস্টেমে নতুন নোড যোগ করা সহজ, ফলে ডেটা প্রসেসিং ক্ষমতা বৃদ্ধি করা যায়।
- ফল্ট টলারেন্স (Fault Tolerance): যদি কোনো নোড ব্যর্থ হয়, তবে অন্যান্য নোড থেকে ডেটা পুনরুদ্ধার করা যায়, যা সিস্টেমের স্থিতিশীলতা নিশ্চিত করে।
- সহজ ব্যবহৃত (Simplicity): MapReduce মডেলটি ডেভেলপারদের জন্য সহজভাবে ডিজাইন করা হয়েছে, যাতে তারা কম জটিলতার সাথে ডিস্ট্রিবিউটেড ডেটা প্রসেসিং করতে পারেন।
সারাংশ
MapReduce একটি প্রোগ্রামিং মডেল, যা Hadoop ব্যবস্থায় ডিস্ট্রিবিউটেড ডেটা প্রসেসিংয়ে ব্যবহৃত হয়। এটি দুটি ধাপে কাজ করে— Map এবং Reduce— যা ডেটাকে প্রসেস করে এবং একটি উপযোগী ফলাফল প্রদান করে। MapReduce বৃহৎ ডেটা সেটের প্রক্রিয়াকরণে দক্ষ এবং এটি স্কেলেবিলিটি, ফল্ট টলারেন্স এবং উচ্চ কার্যক্ষমতা প্রদান করে।
MapReduce কী?
MapReduce হলো একটি প্রোগ্রামিং মডেল এবং প্রক্রিয়া যা Hadoop ক্লাস্টারে ডিস্ট্রিবিউটেড ডেটা প্রসেসিংয়ের জন্য ব্যবহৃত হয়। এটি দুইটি প্রধান পর্যায়ে কাজ করে: Map এবং Reduce। এই মডেলটি ডেটাকে ছোট ছোট অংশে ভাগ করে এবং প্রতিটি অংশকে আলাদা আলাদা প্রসেস করে, পরে একত্রিত করে একটি চূড়ান্ত ফলাফল তৈরি করে।
MapReduce এর মূল উদ্দেশ্য হলো খুব বড় পরিমাণ ডেটাকে দ্রুত এবং দক্ষভাবে প্রক্রিয়া করা, যা সাধারণ ডেটাবেস সিস্টেম বা একক কম্পিউটারের পক্ষে সম্ভব নয়।
MapReduce এর দুটি প্রধান ধাপ
১. Map Phase
Map ধাপে, একটি বড় ডেটাসেট ছোট ছোট অংশে বিভক্ত হয় এবং প্রতিটি অংশ আলাদা আলাদা মেশিন বা নোডে প্রক্রিয়া করা হয়। এই ধাপে ইনপুট ডেটা নিয়ে বিভিন্ন ম্যানিপুলেশন করা হয় এবং আউটপুট হিসাবে একটি intermediate (অস্থায়ী) ফলাফল তৈরি হয়।
- Input Data: প্রথমে ডেটা HDFS (Hadoop Distributed File System) থেকে ম্যাপ প্রোগ্রামে পাঠানো হয়।
- Key-Value Pair: Map ফাংশন ডেটাকে "key-value pair" আকারে আউটপুট করে। উদাহরণস্বরূপ, একটি শব্দ গণনা করার কাজ হলে, প্রতিটি শব্দ একটি key হিসেবে এবং তার সংখ্যা value হিসেবে চিহ্নিত হবে।
উদাহরণ: ডেটা = ["apple", "banana", "apple"] Map Output = [("apple", 1), ("banana", 1), ("apple", 1)]
২. Shuffle and Sort Phase
Map ফেজের পরে, একটি গুরুত্বপূর্ণ ধাপ হলো "Shuffle" এবং "Sort"। এই ধাপে, Map-এর আউটপুট (key-value pairs) একটি কেন্দ্রীয় স্থানে গ্রুপ করা হয় এবং key অনুসারে সাজানো হয়। এটি নিশ্চিত করে যে, একই key এর সমস্ত ভ্যালু একত্রিত হয়ে পরবর্তী ধাপে যায়।
উদাহরণ: Map Output = [("apple", 1), ("banana", 1), ("apple", 1)] Shuffle and Sort Output = [("apple", [1, 1]), ("banana", [1])]
৩. Reduce Phase
Reduce ফেজে, Shuffle and Sort থেকে পাওয়া "key-value" পেয়ারগুলি গ্রহণ করা হয় এবং একত্রিত বা সম্মিলিত করা হয়। এখানে মূল কাজ হলো, একই key এর সমস্ত value একত্রিত করে একটি একক ফলাফল তৈরি করা। উদাহরণস্বরূপ, যদি শব্দগণনার কাজ হয়, তাহলে একই শব্দের ভ্যালুগুলির যোগফল করা হবে।
উদাহরণ: Reduce Output = [("apple", 2), ("banana", 1)]
এখানে, "apple" শব্দের মোট ২টি occurrences এবং "banana" শব্দের ১টি occurrence পাওয়া গেছে।
MapReduce এর কাজের ধাপসমূহ
১. Input Split
MapReduce শুরু হয় ডেটার ইনপুট ভাগ (split) দিয়ে। বড় ডেটাসেটকে ছোট ছোট ভাগে ভাগ করা হয়, যাতে প্রতিটি ভাগ আলাদা নোডে প্রক্রিয়া করা যায়।
২. Map Task Execution
এটি প্রথম ধাপ যেখানে ইনপুট ডেটার উপর Map ফাংশন প্রয়োগ করা হয়। প্রতিটি ভাগে Map ফাংশন আলাদা আলাদা ভাবে কাজ করে এবং একটি intermediate output (key-value pair) তৈরি করে।
৩. Shuffle and Sort
Map ফেজের আউটপুটগুলি পরবর্তী ধাপে, Shuffle and Sort, পাঠানো হয়, যেখানে key গুলির উপর ভিত্তি করে ডেটা সজ্জিত এবং গ্রুপ করা হয়।
৪. Reduce Task Execution
এই ধাপে, একই key এর সমস্ত value একত্রিত করে একটি চূড়ান্ত ফলাফল তৈরি করা হয়। এটি কার্যকরভাবে ডেটার আউটপুট তৈরি করে, যেমন: শব্দগণনা, গড়, সর্বাধিক মান ইত্যাদি।
৫. Output
Reduce ফেজের শেষে, প্রাপ্ত ফলাফলকে HDFS বা অন্য কোনো স্টোরেজে লেখা হয়।
MapReduce এর সুবিধা
১. ডিস্ট্রিবিউটেড প্রসেসিং (Distributed Processing)
MapReduce ডেটাকে ছোট ছোট অংশে ভাগ করে এবং একাধিক নোডে প্রক্রিয়া করে, ফলে খুব বড় ডেটাসেট দ্রুত এবং কার্যকরভাবে প্রক্রিয়া করা সম্ভব হয়।
২. স্কেলেবিলিটি (Scalability)
Hadoop এবং MapReduce সহজেই স্কেল করা যায়, অর্থাৎ, নতুন নোড যোগ করে আরও বেশি ডেটা প্রক্রিয়া করা সম্ভব।
৩. ফল্ট টলারেন্স (Fault Tolerance)
Hadoop এবং MapReduce এর মধ্যে ফেইল-সেফ (fault-tolerant) ক্ষমতা রয়েছে। যদি কোনো নোডে সমস্যা হয়, তবে অন্য নোড থেকে কাজ পুনরায় শুরু করা যায়।
৪. কম খরচে কার্যক্রম (Cost-Effective Processing)
MapReduce সস্তা হার্ডওয়্যার ব্যবহার করে কার্যকরভাবে বড় ডেটাসেট প্রসেস করতে সক্ষম, যা সিস্টেমের খরচ কমিয়ে আনে।
MapReduce এর ব্যবহার
- শব্দগণনা (Word Count): একটি সাধারণ উদাহরণ যেখানে ডেটার মধ্যে একটি শব্দ কতবার এসেছে, তা গণনা করা হয়।
- ডেটা ফিল্টারিং: ডেটা থেকে নির্দিষ্ট মান বা শর্তের উপর ভিত্তি করে তথ্য ফিল্টার করা।
- সোর্স কোড বিশ্লেষণ: বিশাল পরিমাণ সোর্স কোডে নির্দিষ্ট প্যাটার্ন বা ত্রুটি অনুসন্ধান করা।
সারাংশ
MapReduce হলো একটি শক্তিশালী প্রোগ্রামিং মডেল যা Hadoop এর ডিস্ট্রিবিউটেড ফাইল সিস্টেম (HDFS) এর সঙ্গে কাজ করে। এটি ডেটাকে ছোট ছোট অংশে ভাগ করে, পৃথকভাবে প্রসেস করে এবং পরে সেই অংশগুলির ফলাফল একত্রিত করে। এটি Big Data প্রক্রিয়াকরণের জন্য অত্যন্ত কার্যকরী এবং স্কেলযোগ্য, যা বড় পরিমাণ ডেটা দ্রুত এবং দক্ষভাবে প্রক্রিয়া করতে সহায়ক।
Hadoop এর গুরুত্বপূর্ণ দুটি কম্পোনেন্ট হলো Map এবং Reduce ফাংশন। এগুলো MapReduce প্রোগ্রামিং মডেলের অংশ, যা ডিস্ট্রিবিউটেড ডেটা প্রসেসিংয়ের জন্য ব্যবহৃত হয়। এই দুটি ফাংশন বড় আকারের ডেটাসেটকে দ্রুত এবং দক্ষভাবে প্রক্রিয়া করতে সাহায্য করে। MapReduce মডেলটি একটি ডাটা ফ্লো (Data Flow) হিসাবে কাজ করে, যেখানে ডেটা প্রাথমিকভাবে Map ফাংশন দ্বারা প্রসেস করা হয়, তারপর Reduce ফাংশন ব্যবহার করে ডেটার সারাংশ তৈরি করা হয়।
Map Function
Map ফাংশন হল ডেটা প্রসেসিংয়ের প্রথম ধাপ। এই ফাংশনটি ইনপুট ডেটাকে ছোট ছোট অংশে বিভক্ত করে এবং এগুলোকে কী এবং ভ্যালু (Key-Value) পেয়ার হিসেবে আউটপুটে পরিণত করে। Map ফাংশনটির কাজ হলো ইনপুট ডেটা থেকে প্রাসঙ্গিক তথ্য বের করে সেটিকে কী-ভ্যালু আকারে ফরম্যাট করা।
Map Function এর কাজের ধাপ:
- ডেটা পার্সিং (Data Parsing): Map ফাংশন ইনপুট ডেটাকে প্রাসঙ্গিক কী-ভ্যালু পেয়ার হিসেবে বিভক্ত করে। উদাহরণস্বরূপ, টেক্সট ফাইল থেকে প্রতিটি শব্দকে কী হিসেবে এবং তার সংখ্যা (frequency) ভ্যালু হিসেবে তৈরি করা হতে পারে।
- ডেটা ফিল্টারিং (Data Filtering): ফিল্টারিং বা শর্ত অনুযায়ী ডেটা প্রসেসিং করা যায়, যেমন কিছু অপ্রয়োজনীয় তথ্য বাদ দেওয়া।
- প্যাটার্ন রেকগনিশন (Pattern Recognition): বিভিন্ন প্যাটার্ন বা তথ্যের উপর ভিত্তি করে ডেটা সাজানো বা ক্লাসিফাই করা হয়।
Map Function এর উদাহরণ
ধরা যাক, একটি টেক্সট ডকুমেন্টে শব্দগুচ্ছ গুনে বের করা হচ্ছে। Map ফাংশনটি প্রতিটি শব্দকে একটি কী-ভ্যালু পেয়ারে রূপান্তর করবে, যেমন:
- ইনপুট: "apple banana apple orange"
- আউটপুট: (apple, 1), (banana, 1), (apple, 1), (orange, 1)
Reduce Function
Reduce ফাংশন হল Map ফাংশনের পরবর্তী ধাপ, যেখানে Map ফাংশন থেকে প্রাপ্ত কী-ভ্যালু পেয়ারগুলোর উপর নির্দিষ্ট কোন অপারেশন (যেমন যোগফল, গুনফল, ইত্যাদি) সম্পাদন করা হয়। এই ফাংশনটি একাধিক কী-ভ্যালু পেয়ারকে একটি সারাংশে পরিণত করে।
Reduce Function এর কাজের ধাপ:
- গ্রুপিং (Grouping): একই কী এর সমস্ত ভ্যালু একত্রিত করা হয়। উদাহরণস্বরূপ, যদি "apple" কী দিয়ে একাধিক ভ্যালু থাকে, তবে এগুলিকে একত্রিত করা হয়।
- অ্যাকামুলেশন (Accumulation): সমস্ত ভ্যালু একত্র করে একটি একক ফলাফল তৈরি করা হয়, যেমন, যদি "apple" এর জন্য বিভিন্ন ভ্যালু থাকে, সেগুলো যোগ করা হয়।
- ফাইনাল রেজাল্ট (Final Result): একটি সংক্ষিপ্ত, সারসংক্ষেপ আউটপুট তৈরি করা হয়।
Reduce Function এর উদাহরণ
ধরা যাক, আমাদের লক্ষ্য হলো উপরের Map ফাংশনের আউটপুট থেকে প্রতিটি শব্দের মোট সংখ্যা বের করা:
- ইনপুট: (apple, 1), (banana, 1), (apple, 1), (orange, 1)
- আউটপুট: (apple, 2), (banana, 1), (orange, 1)
এখানে Reduce ফাংশনটি "apple" শব্দের জন্য 1 + 1 করে 2 তৈরি করেছে, এবং অন্য শব্দের জন্য 1-এ রেখে দিয়েছে।
Map এবং Reduce Functions এর ভূমিকা
- ডেটা পারালাল প্রসেসিং: MapReduce ফাংশনগুলি ডিস্ট্রিবিউটেড পরিবেশে ডেটা প্রসেস করতে সক্ষম, যেখানে Map ফাংশন একাধিক নোডে ডেটা ভাগ করে কাজ করে এবং Reduce ফাংশন তাদের একত্রিত করে একটি ফলাফল তৈরি করে।
- স্কেলেবিলিটি (Scalability): বৃহৎ ডেটাসেটকে ছোট ছোট অংশে ভাগ করে মাপের ফাংশন গুলো একযোগে কাজ করে, ফলে সিস্টেমটি স্কেল করা যায় এবং আরো বড় ডেটা সেটে কাজ করতে সক্ষম হয়।
- ফল্ট টলারেন্স (Fault Tolerance): যেহেতু MapReduce ডিস্ট্রিবিউটেড সিস্টেমে কাজ করে, এর মাধ্যমে ফল্ট টলারেন্স নিশ্চিত করা যায়। কোনো নোডের সমস্যা হলেও অন্য নোড থেকে ডেটা পুনরুদ্ধার করা সম্ভব।
- স্বয়ংক্রিয় বিভাজন (Automatic Splitting): Map ফাংশনটি ডেটাকে সঠিকভাবে বিভক্ত করে, এবং Reduce ফাংশনটি ঐ বিভক্ত অংশগুলোকে একটি সারাংশে পরিণত করে। এতে সিস্টেমের কার্যক্ষমতা বৃদ্ধি পায় এবং বড় ডেটাসেট দ্রুত প্রক্রিয়া করা যায়।
সারাংশ
Map এবং Reduce ফাংশনগুলি Hadoop এর মূল স্তম্ভ, যা ডিস্ট্রিবিউটেড ডেটা প্রসেসিংয়ের জন্য ব্যবহৃত হয়। Map ফাংশন ডেটাকে কী-ভ্যালু পেয়ারে রূপান্তরিত করে, এবং Reduce ফাংশন সেগুলোর উপর অপারেশন করে একটি সারাংশ তৈরি করে। এই দুটি ফাংশন কার্যকরীভাবে বড় আকারের ডেটাকে দ্রুত এবং দক্ষভাবে প্রক্রিয়া করতে সাহায্য করে, যা Hadoop এর স্কেলেবিলিটি, ফল্ট টলারেন্স এবং দ্রুত ডেটা প্রসেসিংয়ের ক্ষমতা নিশ্চিত করে।
MapReduce এর পরিচিতি
MapReduce হলো Hadoop এর একটি প্রোগ্রামিং মডেল, যা ডিস্ট্রিবিউটেড এবং প্যারালাল ডেটা প্রসেসিংয়ের জন্য ব্যবহৃত হয়। এটি একটি দুটি পর্যায়ে কাজ করে: Map এবং Reduce। প্রথমে Map পর্যায়ে ডেটা প্রক্রিয়াকরণ করা হয়, তারপর Reduce পর্যায়ে সেই ডেটার উপর কাজ করে ফলাফল প্রদান করা হয়।
MapReduce-এর Execution Flow বা কার্যকারিতা ধাপে ধাপে নির্দিষ্ট প্রক্রিয়ার মাধ্যমে চলে, যা একটি ডিস্ট্রিবিউটেড সিস্টেমে ডেটাকে কার্যকরভাবে প্রসেস করতে সাহায্য করে।
MapReduce এর Execution Flow
১. Job Submission
MapReduce জব শুরু হয় ক্লায়েন্টের মাধ্যমে। ক্লায়েন্ট একটি MapReduce জব তৈরি করে এবং এটি Hadoop ক্লাস্টারে পাঠায়। এই Job-টি ডেটা প্রসেসিংয়ের জন্য নির্দিষ্ট কাজ বা অপারেশন নির্ধারণ করে।
২. Job Initialization and Job Tracker
Job পাঠানোর পর, Job Tracker (Hadoop 1.x) অথবা Resource Manager (Hadoop 2.x) সেই Job গ্রহণ করে। এটি কাজটি পরিচালনা এবং মনিটর করতে শুরু করে। Job Tracker রিসোর্স ম্যানেজার হিসেবে কাজ করে এবং বিভিন্ন কাজের জন্য উপযুক্ত Task Tracker-এ কাজগুলি বরাদ্দ করে।
৩. Input Splitting
MapReduce-এ ডেটা অনেকগুলো ছোট ছোট অংশে (splits) ভাগ করে নেয়, যাতে সেগুলি ডিস্ট্রিবিউটেড ক্লাস্টার নোডে প্রসেস করা যায়। এই split গুলি HDFS থেকে পড়ে আসে এবং Map Task এর জন্য প্রস্তুত করা হয়।
৪. Mapping Phase (Map Task)
এই পর্যায়ে, Map ফেজ শুরু হয়। ডেটা ফাইলগুলি পঠন এবং Map function চালানো হয়। Map function ইনপুট হিসাবে একটি key-value পেয়ার গ্রহণ করে এবং একটি মধ্যবর্তী key-value পেয়ার আউটপুট হিসেবে প্রদান করে। এই মধ্যবর্তী আউটপুট পরবর্তী Shuffle and Sort ফেজে ব্যবহার হয়।
- Map Function: এটি ইনপুট ডেটার উপর কাজ করে এবং ডেটাকে প্রাসঙ্গিক key-value পেয়ারে রূপান্তরিত করে।
৫. Shuffling and Sorting
Map এর আউটপুট (মধ্যবর্তী key-value পেয়ার) shuffle এবং sort করা হয়। এই প্রক্রিয়া হল যে, সমান key গুলি একই জায়গায় একত্রিত করা হয়। যেমন, যদি একটি key 'A' অনেকবার তৈরি হয়, তবে সেগুলি একত্রিত হয়ে একটি সঙ্গতিপূর্ণ আউটপুট তৈরি করে।
- Shuffle: একই key এর সব value কে একত্রিত করা হয়।
- Sort: key গুলি সাজানো হয় যাতে পরবর্তী প্রক্রিয়াতে সঠিকভাবে কার্যকরী হয়।
৬. Reducing Phase (Reduce Task)
Shuffle এবং Sort শেষ হলে, Reduce ফেজ শুরু হয়। এখানে একই key এর সমস্ত value একত্রিত করা হয় এবং সেখানে একটি Aggregation বা সঠিক প্রক্রিয়া প্রয়োগ করা হয়। Reduce function প্রতিটি key-এর জন্য একক আউটপুট প্রদান করে, যা চূড়ান্ত ফলাফল।
- Reduce Function: এটি মধ্যবর্তী key-value পেয়ারের উপর কাজ করে এবং কোনো নির্দিষ্ট কাজ (যেমন যোগফল, গড় বের করা ইত্যাদি) প্রয়োগ করে। Reducer একটি key এর জন্য একক আউটপুট প্রদান করে।
৭. Output
Reduce ফেজের পর, চূড়ান্ত আউটপুট ফাইল তৈরি হয় এবং এটি HDFS-এ সংরক্ষিত হয়। এর মধ্যে সব কাজের ফলাফল অন্তর্ভুক্ত থাকে। ক্লায়েন্ট এই আউটপুট ফাইলটি অ্যাক্সেস করতে পারে।
MapReduce Execution Flow Diagram
Client -> Job Submission -> Job Tracker / Resource Manager
-> Input Splitting -> Map Task (Mapping)
-> Shuffle and Sort (Grouping and Sorting)
-> Reduce Task (Aggregation)
-> Output (HDFS Storage)
সারাংশ
MapReduce-এর Execution Flow হল একটি স্টেপ-বাই-স্টেপ প্রক্রিয়া, যেখানে ডেটা প্রথমে ম্যাপিং হয়, তারপরে শাফলিং এবং সোর্টিংয়ের মাধ্যমে গ্রুপ করা হয়, এবং শেষে রিডুসিং করে চূড়ান্ত ফলাফল তৈরি হয়। এই প্রক্রিয়াটি ডিস্ট্রিবিউটেড ক্লাস্টারে কাজের দক্ষতা এবং প্যারালাল প্রসেসিং নিশ্চিত করে, যার মাধ্যমে বিশাল পরিমাণ ডেটা দ্রুত এবং কার্যকরীভাবে প্রক্রিয়া করা যায়।
Hadoop এর MapReduce প্রোগ্রামিং মডেল ডিস্ট্রিবিউটেড ডেটা প্রসেসিংয়ের জন্য ব্যবহৃত হয়। এটি দুটি প্রধান ধাপে কাজ করে: Map এবং Reduce। একটি MapReduce প্রোগ্রাম তৈরি করার জন্য সাধারণত তিনটি ক্লাস ব্যবহার করা হয়: Mapper, Reducer, এবং Driver। এখানে একটি সাধারণ MapReduce প্রোগ্রাম তৈরি করার প্রক্রিয়া এবং এর উপাদানগুলো নিয়ে আলোচনা করা হবে।
MapReduce প্রোগ্রামের কাজ
ধরা যাক, আমাদের একটি টেক্সট ফাইল আছে, এবং আমাদের কাজ হলো প্রতিটি শব্দের সংখ্যা গোনা। এই কাজটি একটি সহজ MapReduce প্রোগ্রামের মাধ্যমে করা যাবে। এখানে Map ধাপে প্রতিটি শব্দকে চিহ্নিত করা হবে এবং Reduce ধাপে শব্দের পরিমাণ যোগ করা হবে।
প্রোগ্রামটির উপাদান
1. Mapper Class
Mapper ক্লাসটি প্রতিটি ইনপুট রেকর্ড থেকে কীগুলি বের করে এবং তার সাথে মান প্রদান করে। উদাহরণস্বরূপ, আমাদের টেক্সট ফাইলের প্রতিটি শব্দকে একটি কীগুলির সাথে সম্পর্কিত মান হিসেবে নির্ধারণ করা হবে।
import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Mapper;
import java.io.IOException;
public class WordCountMapper extends Mapper<Object, Text, Text, IntWritable> {
private final static IntWritable one = new IntWritable(1);
private Text word = new Text();
@Override
public void map(Object key, Text value, Context context) throws IOException, InterruptedException {
// টেক্সট লাইনটি স্প্লিট করে শব্দে পরিণত করা
String[] words = value.toString().split("\\s+");
// প্রতিটি শব্দের জন্য, একটি কীগুলির সাথে মান পাঠানো
for (String wordStr : words) {
word.set(wordStr);
context.write(word, one); // কীগুলি (word) এবং মান (1)
}
}
}
2. Reducer Class
Reducer ক্লাসটি Mapper থেকে প্রাপ্ত কীগুলি গ্রহণ করে এবং তাদের মানগুলির উপর অপারেশন করে। আমাদের ক্ষেত্রে, Reducer ক্লাসটি প্রতিটি শব্দের সংখ্যা যোগ করবে।
import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Reducer;
import java.io.IOException;
public class WordCountReducer extends Reducer<Text, IntWritable, Text, IntWritable> {
private IntWritable result = new IntWritable();
@Override
public void reduce(Text key, Iterable<IntWritable> values, Context context) throws IOException, InterruptedException {
int sum = 0;
// শব্দের প্রতি মোট মান যোগ করা
for (IntWritable val : values) {
sum += val.get();
}
result.set(sum);
context.write(key, result); // ফলাফল পাঠানো
}
}
3. Driver Class
Driver ক্লাসটি আপনার MapReduce প্রোগ্রামটি চালাতে ব্যবহৃত হয়। এটি Mapper এবং Reducer কে নির্ধারণ করে, ইনপুট এবং আউটপুট ফাইল সেট করে এবং টাস্কটি চালানোর জন্য কনফিগারেশন প্রদান করে।
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Job;
import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;
public class WordCountDriver {
public static void main(String[] args) throws Exception {
if (args.length != 2) {
System.err.println("Usage: WordCount <input path> <output path>");
System.exit(-1);
}
Configuration conf = new Configuration();
Job job = Job.getInstance(conf, "Word Count");
// Driver class, Mapper class এবং Reducer class নির্ধারণ
job.setJarByClass(WordCountDriver.class);
job.setMapperClass(WordCountMapper.class);
job.setReducerClass(WordCountReducer.class);
// আউটপুট কীরূপ হবে তা নির্ধারণ
job.setOutputKeyClass(Text.class);
job.setOutputValueClass(IntWritable.class);
// ইনপুট এবং আউটপুট ফাইল নির্ধারণ
FileInputFormat.addInputPath(job, new Path(args[0]));
FileOutputFormat.setOutputPath(job, new Path(args[1]));
// কাজটি চলানো
System.exit(job.waitForCompletion(true) ? 0 : 1);
}
}
প্রোগ্রামটি চালানোর প্রক্রিয়া
- JAR ফাইল তৈরি করুন: প্রথমে আপনার প্রোগ্রামটি একটি JAR ফাইলে কম্পাইল করুন।
javac -classpath `hadoop classpath` -d /path/to/classes /path/to/WordCountDriver.java /path/to/WordCountMapper.java /path/to/WordCountReducer.java
jar -cvf wordcount.jar -C /path/to/classes .
- Hadoop ক্লাস্টারে প্রোগ্রামটি চালান: এরপর Hadoop ক্লাস্টারে প্রোগ্রামটি চালাতে হবে। এটি করতে কমান্ড লাইনে গিয়ে নিচের কমান্ডটি রান করুন।
hadoop jar wordcount.jar WordCountDriver /input/path /output/path
এখানে /input/path হলো ইনপুট ডেটা ফাইলের লোকেশন এবং /output/path হলো আউটপুট ফোল্ডারের লোকেশন।
সারাংশ
এই প্রোগ্রামটি একটি সহজ MapReduce প্রোগ্রাম যা একটি টেক্সট ফাইল থেকে প্রতিটি শব্দের গুনফল (count) বের করে। Map ধাপে শব্দগুলো প্রক্রিয়া করা হয় এবং Reduce ধাপে সেই শব্দের গুনফল যোগ করা হয়। Hadoop এর এই প্রোগ্রামের মাধ্যমে আপনি ডিস্ট্রিবিউটেড কম্পিউটিংয়ে কাজ করতে শিখেছেন এবং এটি কীভাবে Hadoop এ কাজ করে তার একটি সাধারণ ধারণা পেয়েছেন।
Read more