Hadoop Streaming এবং Hadoop Pipes দুটি গুরুত্বপূর্ণ টুল যা হাদুপের মাধ্যমে ভাষাগত নিরপেক্ষ প্রোগ্রামিং (Language-agnostic programming) সমর্থন করে, এবং এটি ডেভেলপারদের তাদের পছন্দের প্রোগ্রামিং ভাষায় MapReduce প্রোগ্রাম লিখতে সাহায্য করে।
Hadoop Streaming
Hadoop Streaming একটি সহজ উপায়, যা ডেভেলপারদের শেল স্ক্রিপ্ট, Python, Perl, Ruby, PHP ইত্যাদি ভাষায় MapReduce প্রোগ্রাম লেখার সুযোগ দেয়। এর মাধ্যমে ডেভেলপাররা Java ছাড়াই Map এবং Reduce ফাংশনগুলি তৈরি করতে পারেন। এটি মূলত স্ট্যান্ডার্ড ইনপুট এবং আউটপুট স্ট্রীম ব্যবহার করে কাজ করে।
Hadoop Streaming-এর মূল উপাদানসমূহ
- Map Function:
স্ট্যান্ডার্ড ইনপুট থেকে ডেটা পড়ে এবং এটি কী-ভ্যালু পেয়ার আউটপুট করে। - Reduce Function:
Map আউটপুট হিসেবে প্রাপ্ত কী-ভ্যালু পেয়ার প্রক্রিয়া করে চূড়ান্ত আউটপুট তৈরি করে।
Hadoop Streaming কীভাবে কাজ করে?
- Map Phase:
স্ট্যান্ডার্ড ইনপুট থেকে ডেটা পড়ে এবং এটি কী-ভ্যালু পেয়ারে রূপান্তরিত হয়। - Reduce Phase:
কী-ভ্যালু পেয়ারগুলোকে একটি সংকলন হিসেবে নেয় এবং এটি পরবর্তী পদক্ষেপে আউটপুট তৈরি করে।
Hadoop Streaming-এর সুবিধা
- ভাষার নিরপেক্ষতা: ডেভেলপাররা যেকোনো ভাষায় MapReduce প্রোগ্রাম লিখতে পারেন।
- সাধারণ ইন্টারফেস: স্ট্যান্ডার্ড ইনপুট এবং আউটপুট স্ট্রীম ব্যবহারের মাধ্যমে প্রোগ্রামিং খুবই সহজ।
- ব্যবহার সহজ: সাধারণ স্ক্রিপ্ট এবং প্রোগ্রামিং ভাষা ব্যবহারের মাধ্যমে হাদুপ ক্লাস্টারের সাথে কাজ করা যায়।
Hadoop Streaming এর একটি উদাহরণ
ধরা যাক, Python ব্যবহার করে একটি Word Count প্রোগ্রাম লিখতে হবে:
Map Function (Python)
#!/usr/bin/env python
import sys
# Read input line by line
for line in sys.stdin:
words = line.strip().split()
for word in words:
print(f'{word}\t1')
Reduce Function (Python)
#!/usr/bin/env python
import sys
current_word = None
current_count = 0
# Read input line by line
for line in sys.stdin:
word, count = line.strip().split('\t')
count = int(count)
if word == current_word:
current_count += count
else:
if current_word:
print(f'{current_word}\t{current_count}')
current_word = word
current_count = count
এখানে, Map এবং Reduce ফাংশন দুটি Python স্ক্রিপ্টে লেখা হয়েছে এবং Hadoop Streaming-এ কাজ করছে।
Hadoop Pipes
Hadoop Pipes একটি হাদুপ API যা C++ প্রোগ্রামারদের MapReduce প্রোগ্রাম তৈরি করার জন্য ব্যবহৃত হয়। এটি C++ কোডের মাধ্যমে হাদুপ ক্লাস্টারের সাথে কাজ করার একটি শক্তিশালী উপায় সরবরাহ করে। Hadoop Pipes, স্ট্যান্ডার্ড I/O স্ট্রীমের মাধ্যমে Map এবং Reduce ফাংশন কার্যকর করে।
Hadoop Pipes-এর মূল উপাদানসমূহ
- Map Function:
C++ কোডে লেখা ম্যাপ ফাংশন স্ট্যান্ডার্ড ইনপুট থেকে ডেটা গ্রহণ করে এবং এটি কী-ভ্যালু পেয়ার আউটপুট করে। - Reduce Function:
ম্যাপ আউটপুট হিসেবে প্রাপ্ত কী-ভ্যালু পেয়ার প্রক্রিয়া করে চূড়ান্ত আউটপুট তৈরি করে।
Hadoop Pipes-এর সুবিধা
- C++ সমর্থন: C++ ব্যবহারকারী যারা দ্রুত এবং কার্যকরী ডেটা প্রক্রিয়াকরণ চান, তাদের জন্য Hadoop Pipes উপযুক্ত।
- রিয়েল-টাইম প্রক্রিয়াকরণ: C++ কে ব্যবহার করে দ্রুত MapReduce প্রোগ্রাম তৈরি করা যায়।
- কাস্টমাইজেশন: Pipes API কাস্টম টাইপ এবং ডেটা প্রসেসিং তৈরি করতে সাহায্য করে।
Hadoop Pipes এর উদাহরণ
C++ ভাষায় একটি কাস্টম MapReduce প্রোগ্রাম লেখার জন্য Pipes API ব্যবহার করা হয়।
#include <iostream>
#include <map>
#include <string>
#include <hadoop/Pipes.hh>
using namespace std;
class WordCountMapper : public HadoopPipes::Mapper {
public:
WordCountMapper(HadoopPipes::TaskContext &context) {}
void map(HadoopPipes::MapContext &context) {
string line = context.readInput();
string word;
for (auto c : line) {
if (isspace(c)) {
if (!word.empty()) {
context.emit(word, "1");
word.clear();
}
} else {
word.push_back(c);
}
}
}
};
class WordCountReducer : public HadoopPipes::Reducer {
public:
WordCountReducer(HadoopPipes::TaskContext &context) {}
void reduce(HadoopPipes::ReduceContext &context) {
int sum = 0;
string key = context.getInputKey();
while (context.nextValue()) {
sum += stoi(context.getInputValue());
}
context.emit(key, to_string(sum));
}
};
int main(int argc, char *argv[]) {
HadoopPipes::runTask(HadoopPipes::createTaskContext<WordCountMapper, WordCountReducer>());
}
এখানে WordCountMapper এবং WordCountReducer C++-এ লিখিত MapReduce ফাংশন। HadoopPipes API ব্যবহার করে, আমরা সহজেই Hadoop ক্লাস্টারে C++ কোডের মাধ্যমে ডেটা প্রসেসিং করতে পারি।
সারাংশ
Hadoop Streaming এবং Hadoop Pipes দুটি শক্তিশালী টুল যা ডেভেলপারদের MapReduce প্রোগ্রাম লেখার জন্য ভাষা নিরপেক্ষ সমাধান প্রদান করে। Hadoop Streaming স্ক্রিপ্টিং ভাষাগুলি (যেমন Python, Perl) ব্যবহার করার সুযোগ দেয়, যেখানে Hadoop Pipes C++ ব্যবহারকারীদের জন্য সুবিধাজনক। দুটি টুলই Hadoop ক্লাস্টারের মধ্যে ডেটা প্রক্রিয়াকরণ সহজ এবং নমনীয় করে তোলে।
Read more