কিভাবে ডগ কাটিং-এর Lucene ও Hadoop অনুসন্ধান এবং বিতরণকৃত ডেটা প্রসেসিংকে আধুনিক ডেটা টিমের জন্য ব্যাপকভাবে গ্রহণযোগ্য ওপেন-সোর্স বিল্ডিং ব্লকে রূপান্তরিত করেছিল।

Lucene ও Hadoop একটি আশ্চর্যভাবে বাস্তবসম্মত গল্প বলে: একবার আপনি দ্রুত অনুসন্ধানের জন্য তথ্য ইনডেক্স করতে পারলে, পরবর্তী চ্যালেঞ্জ হল একটি মেশিন সামলাতে না পারার চেয়েও বেশি ডেটা প্রসেস করা। একসাথে, এগুলো “সার্চ” এবং “বিতরণকৃত কম্পিউটিং”কে একটি নিস বা ব্যয়বহুল ক্ষমতা থেকে এমন দৈনন্দিন বিল্ডিং ব্লকে পরিণত করেছে যা টিমরা সাধারণ হার্ডওয়্যার নিয়ে গ্রহণ করতে পারেন।
এই আর্টিকেলটি একটি চলমান ইতিহাস—গঠনগত সূত্র বা ডিসট্রিবিউটেড সিস্টেম থিওরির গভীর ডুব নয়। উদ্দেশ্য হল যেসব সমস্যা মানুষ সম্মুখীন হয়েছিল, সেগুলোকে খোলাসা করা, সেই সহজ ধারণাগুলো দেখানো যা অগ্রগতি আনল, এবং কেন সেই ধারণাগুলো আধুনিক টুলেও বারবার দেখা যায়।
Apache Lucene ডেভেলপারদের জন্য উচ্চ-মানের সার্চ অ্যাপ্লিকেশনে সহজ করে তুললো: টেক্সট ইনডেক্সিং, দ্রুত কুয়েরি, এবং নতুনভাবে সবকিছু আবিষ্কার না করেই ইটারেট করার সুবিধা।
Apache Hadoop ভিন্ন ব্যথা ধরলো: প্রতিষ্ঠানগুলো লগ, ক্লিকস্ট্রীম, এবং এমন datasets সংগ্রহ করছিল যা একক সার্ভারে আর আরামসে ফিট করছিল না। Hadoop অনেক মেশিন জুড়ে ডেটা রাখার (HDFS) এবং এর উপর ব্যাচ প্রসেসিং (MapReduce) চালানোর উপায় দিল—তাই একটি হাতে-কলমে ডিস্ট্রিবিউটেড সিস্টেম বানাতে হয়নি।
এই প্রকল্পগুলোর আগমনের আগে অনেক টিমের কাছে একটি কঠিন বিকল্প ছিল: খরচবহুল প্রপারাইটারি সিস্টেম কিনুন বা ধীর, ম্যানুয়াল ওয়ার্কফ্লো মেনে নিন। Lucene ও Hadoop বাধা অনেকটা কমিয়ে দিল।
আপনি জানতে পারবেন Lucene ও Hadoop-এর আগের অবস্থার সমস্যা কী ছিল, কেন ডগ কাটিং-এর কাজ নির্মাতাদের মধ্যে প্রতিধ্বনিত হল, এবং কিভাবে ধারণাগুলো সংযুক্ত ছিল—ডকুমেন্ট ইনডেক্সিং থেকে ক্লাস্টার কোরডিনেশন পর্যন্ত।
শেষে, আপনি বোঝার মতো অবস্থায় থাকবেন: যদিও আপনার স্ট্যাকে Elasticsearch, Spark, ক্লাউড অবজেক্ট স্টোরেজ, বা ম্যানেজড সার্ভিস থাকে, অনেক কোর ধারণা সেইসব জায়গা থেকে উঠে এসেছে যা Lucene ও Hadoop জনপ্রিয় করেছে।
ডগ কাটিং এমন এক দুর্লভ ইঞ্জিনিয়ার যাঁর কাজ আধুনিক ডেটা টিমের দুটি আলাদা “ডিফল্ট” টুলকে আকার দিয়েছে: অনুসন্ধানের জন্য Apache Lucene ও বিতরণকৃত ডেটা প্রসেসিংয়ের জন্য Apache Hadoop। যদিও উভয় প্রকল্প কোনো এক ব্যক্তির চেয়ে অনেক বড় হয়ে উঠেছে, কাটিংয়ের প্রাথমিক প্রযুক্তিগত সিদ্ধান্ত এবং ওপেন সহযোগিতার প্রতি তাঁর প্রতিশ্রুতি দিক নির্ধারণে গুরুত্বপূর্ণ ছিল।
কাটিংয়ের ধারাবাহিক থিম ছিল অ্যাক্সেসিবিলিটি। Lucene উচ্চ-মানের সার্চকে এমন একটি লাইব্রেরি বানিয়ে দিল যা আপনার অ্যাপ্লিকেশনে এম্বেড করা যায়, বড় কোম্পানিগুলোর জন্য সীমাবদ্ধ বিশেষায়িত সিস্টেম নয়। পরে, Hadoop সাধারণ মেশিনের ক্লাস্টারেই বড়-সাইজ স্টোরেজ ও কম্পিউটেশন সম্ভব করে তুললো—মুল্যবান হার্ডওয়্যারের উপর নির্ভর না করে।
এই মোটিভেশন গুরুত্বপূর্ণ: এটা ছিল “বড় ডেটার জন্য বড় ডেটা” নয়, বরং ছোট টিমগুলো সীমিত বাজেট নিয়ে শক্তিশালী ক্ষমতা পাবে—এই চেষ্টাই ছিল লক্ষ্য।
Lucene ও Hadoop উভয়ই Apache Software Foundation-এর আওতায় বেড়ে ওঠে, যেখানে সিদ্ধান্তগুলো প্রকাশ্যে নেওয়া হয় এবং অবদান দ্বারা কর্তৃত্ব অর্জিত হয়। সেই মডেল বাগ ফিক্স, পারফর্মেন্স উন্নতি, ডকুমেন্টেশন, এবং বাস্তব জীবনের ফিডব্যাকের ধারাবাহিক প্রবাহকে উৎসাহিত করেছে।
কাটিংয়ের ব্যক্তিগত অবদান শুরুতে সবচেয়ে শক্তিশালী ছিল: প্রাথমিক আর্কিটেকচার, প্রারম্ভিক ইমপ্লিমেন্টেশন, এবং অন্য অবদানকারীদের আকৃষ্ট করার বিশ্বাসযোগ্যতা। গ্রহণযোগ্যতা বাড়ার সাথে সাথে কমিউনিটি (এবং পরবর্তীতে অনেক কোম্পানি) বড় অ্যাডিশন চালিয়েছে: নতুন ফিচার, ইন্টিগ্রেশন, স্কেলিং কাজ, এবং অপারেশনাল টুলিং।
একটি কাজে আসা উপায় ভাবতে পারেন: কাটিং প্রথম “ওয়ার্কিং ভার্সন” ও তার চারপাশের সংস্কৃতি তৈরি করতে সাহায্য করেছিলেন; ওপেন-সোর্স কমিউনিটি সেই ধারণাগুলোকে দীর্ঘস্থায়ী ইনফ্রাস্ট্রাকচারে পরিণত করেছে।
Lucene-এর আগে, প্রোডাক্টে “সার্চ” যোগ করা মানে প্রায়ই একটি ছোট রিসার্চ প্রজেক্ট গড়ে তোলা। অনেক টিম ব্যয়বহুল প্রপারাইটারি সফটওয়্যার কিনে নিত বা হোমগ্রোন সমাধান গাঁথত যা টিউন করা কঠিন, স্কেল করা জটিল, এবং ভুল হওয়ার সুযোগ বেশি।
সার্চ মানে শুধু শব্দ খোঁজা নয়। এটি স্পিড, র্যাঙ্কিং, এবং বাস্তব-বিশ্বের ময়লা টেক্স্ট হ্যান্ডেল করা। যদি আপনি চান ব্যবহারকারী “running shoes” টাইপ করলে মিলিশেকেন্ডে উপযোগী ফলাফল পান, তাহলে আপনাকে বিশেষ ডেটা স্ট্রাকচার ও অ্যালগরিদম দরকার—এছাড়াও ইনডেক্সিং, আপডেট, এবং কুয়েরি নির্ভরশীল রাখতে সাবধান ইঞ্জিনিয়ারিং।
একটি ইনডেক্স হলো বইয়ের পেছনের সূচকের মতো, কিন্তু আপনার সব ডকুমেন্টের জন্য: প্রতিটি অনুসন্ধানের সময় পুরো টেক্সট স্ক্যান না করে আপনি টার্মটি দেখলেই সরাসরি কোথায় আছে তা পেয়ে যাবেন। ইনডেক্স না থাকলে সার্চ ধীর হয় কারণ প্রতিটি কুয়েরির জন্য আপনি পুনরায় সবকিছু পড়ছেন।
রেলেভেন্স নির্ধারণ করে প্রথমে কী দেখানো হবে। যদি 10,000 ডকুমেন্ট “shoes” মেলে, রেলেভেন্স বলে কোন 10টি প্রথম পাতায় দেখাবেন। এটি প্রায়শই সংকেতের ওপর নির্ভর করে—টার্ম ফ্রিকোয়েন্সি, টার্ম কোথায় আছে (শিরোনাম বনাম বডি), এবং পুরো কালেকশনে টার্মটির বিরলতা।
ওয়েবসাইট ও অনলাইন ক্যাটালগ বাড়ার সাথে “ভাল-পর্যাপ্ত” সার্চ আর যথেষ্ট ছিল না। ব্যবহারকারীরা দ্রুত ফলাফল, টাইপো টলারেন্স, এবং যুক্তিযুক্ত র্যাঙ্কিং আশা করত। যারা এটি দিতে পারেনি তারা এনগেজমেন্ট ও বিক্রয় হারিয়েছে।
একটি পুনঃব্যবহারযোগ্য লাইব্রেরি মানে টিমগুলোকে ইনডেক্সিং ও র্যাঙ্কিং শূন্য থেকে গড়তে হবে না। এটি সার্চ তৈরি করার খরচ কমায়, শ্রেষ্ঠ অনুশীলন শেয়ার করতে দেয়, এবং ডেভেলপারদের তাদের পণ্যের অনন্য জিনিসগুলোর দিকে ফোকাস করতে দেয়, একই সমস্যা বারবার সমাধান না করে।
Lucene সার্চকে এমন একটি ফিচার মনে করিয়েছিল যা আপনি আপনার প্রোডাক্টে যোগ করতে পারেন, নকশা-গবেষণা প্রকল্প হিসেবে নয়। মূলত, এটি একটি লাইব্রেরি যা অগোছালো টেক্সটকে এমন কিছুতে পরিণত করে যা আপনি দ্রুত ও ধারাবাহিকভাবে সার্চ করতে পারেন।
Lucene চারটি বাস্তব কাজের ওপর ফোকাস করে:
Lucene ছিল (এবং এখনও) প্রতিদিনের সার্চ চাহিদার জন্য ভালো:
Lucene-এর আকর্ষণ קס নয়—এটি ব্যবহারিকতা:
Lucene কেবল একটি কোম্পানির সমস্যা সমাধান করেনি; এটি একটি নির্ভরযোগ্য বেস লেয়ার হয়ে গেছে যার ওপর অনেক সার্চ অ্যাপ্লিকেশন ও সার্ভিস তৈরি হয়েছে। পরে বেরিয়ে আসা অনেক সার্চ টুল Lucene-এর ইনডেক্সিং এবং রেলিভেন্স ধারণা ধার করেছে—অথবা সরাসরি Lucene-কে ইঞ্জিন হিসেবে ব্যবহার করেছে।
সার্চ লগ, ক্লিকস্ট্রীম, ইমেইল আর্কাইভ, সেন্সর রিডিংস, এবং ওয়েব পেজ—সবগুলোই একটি সাধারণ বৈশিষ্ট্য শেয়ার করে: এগুলো গতির সঙ্গে দ্রুত বাড়ে। একবার টিমরা “সবকিছু” রাখলে, datasets একক মেশিনে আর আরামসে ফিট হয় না—ন فقط স্টোরেজে, বরং প্রসেস করতে সময়ও বেড়ে যায়।
প্রথম সাড়া হল scale up: বেশি CPU, বেশি RAM, বড় ডিস্ক। এটা কাজ করে… যতক্ষণ না করে।
হাই-এন্ড সার্ভার দ্রুত ব্যয়বহুল হয়ে যায়, এবং দাম বেড়ে যাওয়া লিনিয়ার নয়। আপনি পুরো পাইপলাইনে একটি বক্সের উপর বাজি রাখেন। যদি তা ব্যর্থ হয়, সবকিছু ব্যর্থ হয়। কখনো কখনো তা ব্যর্থ না হলেও শারীরিক সীমা আছে: ডিস্কগুলো এক নির্দিষ্ট গতিতে ঘোড়ে, মেমরির ছাদের মতো সীমা আছে, এবং কিছু ওয়ার্কলোড এমন যে ডেটা দ্বিগুণ হলে কাজ সময়মতো শেষ হবে না।
স্কেল-আউট পদ্ধতি উল্টে দেয় পদ্ধতিটা। এক শক্তিশালী কম্পিউটারের বদলে, আপনি অনেক সাধারণ কম্পিউটার ব্যবহার করে কাজ ভাগ করে দেন।
একটি মানসিক মডেল হলো লাইব্রেরি মুভিং ডে: একজন ব্যক্তি সবচেয়ে ভারি বাক্স বহন করতে পারবে, কিন্তু দশজন ছোট বাক্স নিয়ে আরো দ্রুত শেষ করবে—এবং একজন ক্লান্ত হলে বাকি সবাই এগিয়ে নিয়ে যাবে। বিতরণকৃত ডেটা প্রসেসিং একই ধারণা প্রয়োগ করে স্টোরেজ ও কম্পিউটেশনের উপর।
অনেক সস্তা মেশিন ব্যবহার করলে একটি নতুন ধরণ অনুমান আসে: কিছু না কিছু সর্বদা ভাঙছে। ডিস্ক মারা যায়, নেটওয়ার্কে হিচকক, নোড রিবুট করে।
তাই লক্ষ্য হল এমন একটি সিস্টেম যা ব্যর্থতা প্রত্যাশা করে এবং চালিয়ে যায়—একাধিক কপি রেখে, কোন কাজের অংশগুলো শেষ হয়েছে ট্র্যাক করে, এবং স্বয়ংক্রিয়ভাবে যেগুলো বিঘ্নিত হয়েছে সেগুলো পুনরায় চালায়। সেই চাপ—একটি মেশিনের চেয়েও বেশি ডেটা এবং উচ্চ স্তরে ব্যর্থতা—Hadoop-র দৃষ্টিভঙ্গি সেট করেছে।
Hadoop বোঝা সহজ যখন আপনি দুটি অঙ্গীকার দেখেন: অনেক সাধারণ মেশিন জুড়ে খুব বড় ডেটা স্টোর করা এবং সেই ডেটা সমান্তরালে প্রসেস করা। এই প্রতিশ্রুতি দুইটি মূল অংশে আসে: HDFS স্টোরেজের জন্য এবং MapReduce প্রসেসিংয়ের জন্য।
HDFS বড় ফাইলগুলোকে নির্দিষ্ট-সাইজ ব্লকে ভাগ করে (চাংক হিসেবে বিবেচনা করুন) এবং সেগুলোকে ক্লাস্টারের বিভিন্ন মেশিনে ছড়িয়ে দেয়।
মেশিন ব্যর্থ হলে ডেটা নিরাপদ রাখতে HDFS প্রতিটি ব্লকের নির্দিষ্ট কপি বিভিন্ন মেশিনে রেখে দেয়। একটি কম্পিউটার ডাউন হলেও সিস্টেম অন্য কপি থেকেই ফাইল পড়তে পারে—আপনাকে ব্যাকআপ খুঁজে বেড়াতে হবে না।
প্রায়োগিক ফলাফল: HDFS-এ একটি ডিরেক্টরি সাধারণ একটি ফোল্ডারের মতো আচরণ করে, তবে পেছনে সেটা অনেক ডিস্ক থেকে জুড়ে গঠিত।
MapReduce হলো ব্যাচ প্রসেসিংয়ের একটি মডেল। এর দুইটি ধাপ আছে:
একটি ক্লাসিক উদাহরণ হলো টেরাবাইটস-অফ লগে শব্দ গণনা করা: ম্যাপাররা তাদের চাংকে শব্দগুলো গন্য করে; রিডিউসাররা প্রতি শব্দে মোট যোগফল করে।
HDFS + MapReduce একত্রে করে তোললো বড় ব্যাচ জব চালানো ব্যবহারযোগ্য—লগ বিশ্লেষণ, ইনডেক্সিং পাইপলাইন, ক্লিকস্ট্রীম অ্যাগ্রিগেশন, ডেটা ক্লিনআপ—এমন ডেটাসেটে যা একক সার্ভারের চেয়েও অনেক বড়। একক একটি বিশাল মেশিন কেনার বদলে টিমরা কমোডিটি বক্স যোগ করে স্কেল করতে পারে এবং Hadoop স্টোরেজ, রিট্রাই, এবং প্যারালাল এক্সিকিউশনের সমন্বয় করে।
Lucene ও Hadoop দুটো আলাদা অধ্যায় মনে হতে পারে—একটি সার্চ সম্পর্কিত, অন্যটি “বিগ ডেটা” সম্পর্কিত। কিন্তু উভয়ের একটি সাধারণ মানসিকতা আছে: বাস্তবে চলার মতো টুল বানানো যা টিম চালাতে, সম্প্রসারিত করতে, এবং বিশ্বাস করতে পারে—কেবল একটি স্মার্ট প্রোটোটাইপ প্রকাশ করে ছেড়ে দেওয়া নয়।
Lucene কয়েকটি কঠিন বিষয় চমৎকারভাবে করে—ইনডেক্সিং, কুয়েরি, এবং র্যাঙ্কিং—এবং তা একটি লাইব্রেরি হিসেবে প্যাকেজ করে যা ডেভেলপার যে কোনো জায়গায় এম্বেড করতে পারে। সেই পদ্ধতি একটি গুরুত্বপূর্ণ শিক্ষা দেয়: গ্রহণযোগ্যতা আসে ব্যবহারীতায়। যদি একটি টুল ইন্টিগ্রেট করা সহজ, ডিবাগযোগ্য, এবং ডকুমেন্ট করা থাকে, এটি তার মূল ব্যবহার ক্ষেত্রের বাইরে ছড়িয়ে পড়ে।
Hadoop একই দর্শন বিতরণকৃত ডেটা প্রসেসিং-এ প্রয়োগ করেছিল। বিশেষ হার্ডওয়্যার বা নিস সিস্টেমের বদলে, এটি সাধারণ মেশিনে চলার এবং দৈনন্দিন ব্যথা সমাধান করার লক্ষ্য রেখেছিল: এমন ডেটা যা একটি সার্ভারে আর আরামসে ফিট করে না।
আপনার ডেটা বিশাল হলে, সবকিছু নেটওয়ার্কে কপি করে এক শক্তিশালী মেশিনে এনে প্রসেস করা এমনই হবে যেমন লাইব্রেরির সব বই একটি ডেস্কে নিয়ে গিয়ে উদ্ধৃতি খোঁজা। Hadoop-র পদ্ধতি হল যেখানে ডেটা আছে সেখানে কাজ নিয়ে যাওয়া: ছোট ছোট কোড টুকরা অনেক মেশিনে পাঠান, প্রতিটি লোকাল স্লাইস প্রক্রিয়া করুক, তারপর ফলাফলগুলো মিলিয়ে নিন।
এই ধারণা সার্চ ইনডেক্সিং-কে প্রতিফলিত করে: আপনি ডেটা যেখানে থাকে সেখানেই সংগঠিত করেন (ইনডেক্স) যাতে কুয়েরিগুলো বারবার সবকিছু স্ক্যান না করে।
উভয় প্রকল্প ওপেন সহযোগিতা থেকে উপকৃত হয়েছে: ব্যবহারকারীরা ইস্যু রিপোর্ট করতে পারে, ফিক্স জমা দিতে পারে, এবং অপারেশনাল জ্ঞ্যান শেয়ার করতে পারে। গ্রহণের মূল চালকগুলো ছিল অনুচ্ছেদিক কিন্তু সিদ্ধান্তমূলক—স্পষ্ট ডকুমেন্টেশন, পরিবেশের মধ্যে পোর্টেবিলিটি, এবং Apache গভারন্যান্স যা কোম্পানিগুলোকে বিনিয়োগ করতে অনুপ্রাণিত করেছিল ভয় ছাড়া ভেন্ডর লক-ইনে পড়ার।
Hadoop আকস্মিকভাবে ছড়ায়নি কারণ টিমরা হঠাৎ করে “বিগ ডেটা” চেয়েছিল। এটা ছড়িয়েছিল কারণ কয়েকটি সাধারণ কাজ একক মেশিন ও প্রচলিত ডাটাবেসে খুব ব্যয়বহুল ও অবিশ্বস্ত হয়ে পড়ছিল।
লগ প্রসেসিং ছিল একটি প্রথম সাফল্য। ওয়েব সার্ভার, অ্যাপস, এবং নেটওয়ার্ক ডিভাইস বড় পরিমান অ্যাপেন্ড-অন রেকর্ড জেনারেট করে। টিমগুলো ইউম-লি (দৈনিক/ঘন্টার) রোলআপ দরকার করত: এন্ডপয়েন্ট অনুযায়ী এরর, লেটেন্সি পারসেন্টাইল, রিজিওন অনুযায়ী ট্র্যাফিক, শীর্ষ রেফারার। Hadoop তাদের কাঁচা লগ HDFS-এ ফেলতে দেয় এবং নির্ধারিত জবগুলো চালিয়ে সেগুলো সারাংশ করে।
ক্লিকস্ট্রীম বিশ্লেষণ স্বাভাবিকভাবে এটির পরে এসেছে। প্রোডাক্ট টিমরা ব্যবহারকারীর জার্নি বুঝতে চেয়েছিল—কী ক্লিক করে তারা কনভার্ট করেছে, কোথায় তারা ড্রপ করেছে, কোর্টের আচরণ। এই ডেটা বিশৃঙ্খল এবং উচ্চ-ভলিউম, এবং মূল্য প্রায়শই বড় অ্যাগ্রিগেশন থেকে আসে, ব্যক্তিগত লুকআপ থেকে নয়।
ETL কেন্দ্রিয় ব্যবহার কেস হয়ে উঠলো। প্রতিষ্ঠানে ডেটা বিভিন্ন ডাটাবেস, ফাইল, এবং ভেন্ডর এক্সপোর্টে ছড়িয়ে ছিল। Hadoop একটি কেন্দ্রিয় জায়গা দিল কাঁচা ডেটা রাখার, স্কেলে ট্রান্সফর্ম করার, এবং তারপর কিউরেটেড আউটপুট ডেটাওয়্যারহাউস বা ডাউনস্ট্রীম সিস্টেমে লোড করার জন্য।
এই ওয়ার্কফ্লোগুলো größtendeels ছিল ব্যাচ: আপনি একটি উইন্ডো জুড়ে ডেটা সংগ্রহ করেন (উদাহরণ: শেষ এক ঘণ্টা বা একটি দিন), তারপর এটি একটি জব হিসেবে প্রসেস করেন যা মিনিট বা ঘণ্টা সময় নিতে পারে। ব্যাচ সেরা যখন প্রশ্নটি প্রবণতা ও মোট সংখ্যা সম্পর্কে এবং না যে তাৎক্ষণিক প্রতিটি-ইউজারের উত্তর দরকার।
বাস্তবে, এর অর্থ Hadoop রাতভর রিপোর্ট, সময়কালের ড্যাশবোর্ড, এবং বড় ব্যাকফিল (“নতুন লজিক দিয়ে গত বছর পুনঃহিসাব”) চালাতো। এটি ইন্টারঅ্যাকটিভ, সাব-সেকেন্ড এক্সপ্লোরেশনের জন্য তৈরি ছিল না।
বড় আকর্ষণ ছিল সস্তা প্রসেসিং: একক ব্যয়বহুল মেশিন বাড়ানোর বদলে কমোডিটি হার্ডওয়্যার যোগ করে ছড়িয়ে স্কেল করা।
আরেকটি ছিল রিডান্ডেন্সির মাধ্যমে নির্ভরযোগ্যতা। HDFS প্রতিটি ব্লকের একাধিক কপি রাখে, তাই একটি নোড ব্যর্থ হওয়ায় স্বয়ংক্রিয়ভাবে ডেটা হারিয়ে যায় বা পুরো কাজ পুনরায় শুরু করতে হয় না।
Hadoop‑এর প্রাথমিক স্ট্যাক ইন্টারঅ্যাকটিভ কুয়েরির জন্য ধীর হতে পারে, বিশেষত দ্রুত রিড‑অপ্টিমাইজড ডাটাবেসগুলোর তুলনায়।
এছাড়া অপারেশনাল জটিলতা নিয়ে আসে: ক্লাস্টার ম্যানেজ করা, জব শিডিউলিং, ডেটা ফরম্যাট, এবং অনেক মেশিন জুড়ে ব্যর্থতা ট্রাবলশুট করা। গ্রহণ তখনই সফল হয়েছিল যখন টিমগুলো পরিষ্কার ব্যাচ ওয়ার্কলোড রেখেছিল এবং পাইপলাইনগুলো স্ট্যান্ডার্ডাইজ করার শৃঙ্খলা বজায় রেখেছিল—সবকিছু Hadoop দিয়ে করার চেষ্টা না করে।
Lucene ও Hadoop ভিন্ন সমস্যার সমাধান করে—এটিই তাদের একসাথে ভালভাবে খাপ খায় বলে প্রধান কারণ।
Lucene দ্রুত পুনরুদ্ধারের ব্যাপারে: এটি একটি ইনডেক্স তৈরি করে যাতে আপনি টেক্সট ও স্ট্রাকচার্ড ফিল্ড দ্রুত সার্চ করতে পারেন (ভেবে দেখুন “এই কুয়েরির জন্য ২০০ সবচেয়ে প্রাসঙ্গিক ইভেন্ট এখনই দেখাও”)।
Hadoop বড় ফাইলগুলোর ওপর কাজ করার ব্যাপারে: এটি ডেটা নির্ভরযোগ্যভাবে HDFS-এ রাখে এবং সমান্তরালে প্রক্রিয়াকরণ করে (ঐতিহ্যগতভাবে MapReduce) যাতে আপনি একক সার্ভারের বাইরে ডেটা ট্রান্সফর্ম, অ্যানালাইসিস, ও এনরিচ করতে পারেন।
সহজভাবে: Hadoop ডেটা প্রস্তুত করে এবং ক্রাঞ্চ করে; Lucene সেই ফলাফলগুলোকে অনুসন্ধানের জন্য সহজ করে তোলে।
ধরুন আপনার কাছে কয়েক মাসের কাঁচা অ্যাপ্লিকেশন লগ আছে।
এবার আপনি পাবেন দুটি দিকের সুবিধা: বড় কাঁচা ডেটার উপর ভারী ব্যাচ প্রসেসিং এবং তদন্ত ও রিপোর্টিংয়ের জন্য দ্রুত ইন্টারঅ্যাকটিভ সার্চ।
অ্যানালিটিক্স প্রায়শই বলে "মোট কি ঘটেছিল?" আর সার্চ সাহায্য করে "বিশেষ প্রমাণটা দেখাও"। Hadoop বড় ইনপুট থেকে ডেরাইভড ডেটাসেট তৈরি করা সম্ভব করে; Lucene সেই ডেটাসেটগুলোকে খুঁজে পাওয়া সহজ করে—ফাইলের স্তূপকে মানুষজন নেভিগেট করতে পারবে।
এই জুটি বাধ্যতামূলক নয়। যদি আপনার ডেটা একক ডাটাবেসে আরামসে ফিট করে, বা ম্যানেজড সার্চ ও ম্যানেজড অ্যানালিটিক্সই আপনার চাহিদা পূরণ করে, তাহলে Hadoop + Lucene যুক্ত করা অপারেশনাল ওভারহেড বাড়িয়ে দিতে পারে। এই সংমিশ্রণ ব্যবহার করুন যখন আপনার সত্যিই উভয়ই দরকার: বড়-স্কেলের প্রসেসিং এবং দ্রুত, নমনীয় ডিসকভারি।
Hadoop কেবল বড় ফাইল প্রসেসিংয়ের নতুন উপায় দেয়নি; এটি অনেক প্রতিষ্ঠানকে একটি ভাগ করা ডেটা প্ল্যাটফর্ম থাকার চিন্তা করতে বাধ্য করেছে। প্রতিটি অ্যানালিটিক প্রকল্পের জন্য আলাদা সিস্টেম তৈরি না করে, টিমরা কাঁচা ডেটা একবার ল্যান্ড করে, সস্তায় রাখে, এবং বিভিন্ন গ্রুপ সময়ের সঙ্গে তা পুনর্ব্যবহার করতে পারে—এটি পুনরায় ব্যবহারের ধারণাকে উৎসাহ দিল।
HDFS-স্টাইল স্টোরেজ ও ব্যাচ প্রসেসিং পরিচিত হওয়ার পর একটি প্যাটার্ন দেখা গেল: ডেটা কেন্দ্রিয় করা, তারপর উপরে ক্ষমতা লেয়ার করা। সেই বদল স্পষ্ট বিভাজনকে উৎসাহীত করলো:
এটি প্রযুক্তিগত সমতুল্য নয়, ভেবে দেখলে ধারণাগত পরিবর্তন—ডেটা ইনফ্রাস্ট্রাকচার পুনঃব্যবহারযোগ্য, শাসিত, এবং টিম-মধ্যকার্য্যক্ষম হওয়া উচিত বলে প্রত্যাশা সৃষ্টি করল।
কমিউনিটি গতি ছাড়ালো: মানুষ সহজভাবে ডেটা কুয়েরি, নির্ভরযোগ্যভাবে লোড, এবং পুনরাবৃত্ত হওয়া ওয়ার্কফ্লো চালাতে চাইল। বড় দৃষ্টান্তগুলো ছিল:
অধিক টুল একই প্ল্যাটফর্মে প্লাগ-ইন করতে শুরু করলে স্ট্যান্ডার্ডগুলি যেন সিমেন্ট। সাধারণ ফাইল ফরম্যাট এবং শেয়ার্ড স্টোরেজ প্যাটার্নগুলো ডেটা সহজে এক ইঞ্জিন থেকে অন্যটিতে এক্সচেঞ্জ করার যোগ্য করে তোলে। প্রতিটি টুলের জন্য প্রতিটি পাইপলাইন নতুন করে না লিখে প্রতিষ্ঠানগুলো কয়েকটি ডিফল্ট ফরম্যাট ও ডিরেক্টরি কনভেনশন চূড়ান্ত করে প্ল্যাটফর্মটিকে সামগ্রিকভাবে শক্তিশালী করেছে।
Hadoop‑এর শিখরোত্তীর্ণ বছরগুলো বড়, ব্যাচ-অরিয়েন্টেড জব দ্বারা চিহ্নিত ছিল: ডেটা HDFS-এ কপি করুন, রাতভর MapReduce চালান, তারপর ফলাফল প্রকাশ করুন। সেই মডেল পুরোপুরি মুছে যায়নি, কিন্তু “এখনি উত্তর চাই” এবং “নিচিতভাবে আপডেট ধারাবাহিকভাবে” এ ধাঁচ বদলাতে থাকায় এটি ডিফল্ট হয়ে ওঠেনি।
টিমগুলো ধারাবাহিকভাবে ব্যাচ থেকে স্ট্রিমিং ও নিয়ার-রিয়েল-টাইম পাইপলাইনের দিকে সরলাচ্ছিল। প্রতিদিনের MapReduce চালনার বদলে সিস্টেমগুলো ইভেন্ট আসার সঙ্গে সঙ্গে প্রসেস করতে শুরু করল এবং ড্যাশবোর্ড/অ্যালার্ট দ্রুত আপডেট করতে পারল।
একই সঙ্গে, নতুন কম্পিউট ইঞ্জিনগুলো ইন্টারঅ্যাকটিভ অ্যানালাইসিসকে ব্যবহারিক করে তুললো। ইন-মেমরি প্রসেসিং ও অপ্টিমাইজড কুয়েরি এক্সিকিউশন ডিজাইন করা ফ্রেমওয়ার্কগুলো ক্লাসিক MapReduce-কে পেছনে ফেলে দিলো এস-ইটারেরেটিভ কাজ, এক্সপ্লোরেটরি অ্যানালিটিক্স, এবং SQL-স্টাইল কুয়েরির জন্য।
স্টোরেজও বদলালো। অনেক প্রতিষ্ঠান “HDFS কেন্দ্র” কে ক্লাউড অবজেক্ট স্টোরেজ দিয়ে প্রতিস্থাপন করেছে—সস্তায় এবং সহজে ভাগ্যবান। কম্পিউট আরও ডিসপোজেবল হয়ে উঠলো: প্রয়োজন হলে চালান, কাজশেষে বন্ধ করে দিন।
কিছু Hadoop-ব্র্যান্ডেড উপাদান কমে গেলেও ধারণাগুলো সর্বত্র ছড়িয়ে পড়ল: বিতরণকৃত স্টোরেজ, ডেটার কাছে কম্পিউটেশন নিয়ে যাওয়া, কমোডিটি হার্ডওয়্যারে ফল্ট টলারেন্স, এবং একটি শেয়ার্ড “ডেটা লেক” মানসিকতা। টুল পরিবর্তিত হলেও আর্কিটেকচার প্যাটার্নগুলো স্বাভাবিক হয়ে দাঁড়ায়।
Lucene‑এর সাইকেল একই রকম না হওয়ার কারণ হলো এটি একটি মূল লাইব্রেরি—আধুনিক সার্চ স্ট্যাকে এমবেডেড থাকে। Elasticsearch, Solr এবং অন্যান্য সার্চ সলিউশন এখনও Lucene‑এর ওপর নির্ভর করে ইনডেক্সিং, স্কোরিং, এবং কুয়েরি পারসিং-এর জন্য—যা সার্চ, অবজার্ভেবিলিটি, এবং প্রোডাক্ট ডিসকভারি-র জন্য কেন্দ্রীয়।
Hadoop একটি বান্ডেল প্ল্যাটফর্ম হিসেবে কম সাধারণ হলেও তার মৌলিক ধারণাগুলো আধুনিক ডেটা ইঞ্জিনিয়ারিংকে গঠন করেছে। Lucene, অন্যদিকে, সার্চ-ওয়েট অ্যাপ্লিকেশনগুলোকে চালনা করে, এমনকি যখন সেগুলো নতুন সার্ভিস ও API-তে মোড়ানো থাকে।
আপনাকে “বিগ ডেটা” সিস্টেম বানাতে হবে এমন দরকার নেই—Lucene ও Hadoop-এর পেছনে থাকা ধারণাগুলো থেকে আপনি উপকার পেতে পারেন যদি বুঝেন আপনি কোন সমস্যা সমাধান করছেন: দ্রুত কিছু খুঁজে পাওয়া (সার্চ) না কি বড় ডেটা দক্ষভাবে প্রসেস করা (ব্যাচ/বিতরণকৃত কম্পিউট)।
যদি ইউজার বা অভ্যন্তরীণ টুলকে একটি কুয়েরি টাইপ করে কীওয়ার্ড, ফ্রেজ, ফিল্টার, ও র্যাঙ্কিং-এর মাধ্যমে দ্রুত ফলাফল ফিরিয়ে দিতে হবে—আপনি সার্চ ইনডেক্সিং এলাকার কথা ভাবছেন। সেখানে Lucene-শৈলীর ইনডেক্সিং উপযোগী।
আপনি যদি বড় পরিমাণ ডেটা ক্রঞ্চ করে অ্যাগ্রিগেট, ফিচার, এক্সপোর্ট, রিপোর্ট তৈরি করতে চান—অften নির্ধারিত শিডিউলে—আপনি ব্যাচ প্রসেসিং এলাকায় আছেন। Hadoop এই সমস্যা স্থাপত্যকে স্বাভাবিক করে দিয়েছে।
একটি দ্রুত সূত্র:
টুল বেছে নেওয়ার আগে নিজেকে চাপ দিন:
যদি অপশনগুলো দেখছেন, নিজের চাহিদাকে সাধারণ প্যাটার্নে ম্যাপ করলে ও /blog-এ পাঠ হলে আপনাকে আরও পরিষ্কার শর্টলিস্ট তৈরি করতে সহায়তা করতে পারে। Managed বনাম self-hosted তুলনা করলে অপস দায়িত্বগুলো ও খরচ একসাথে তুলনা করা প্রায়শই কাঁচা ফিচার লিস্ট দেখার চেয়ে বেশি সহায়ক—/pricing পেজ এ বিষয়গুলো বোঝায়।
Lucene/Hadoop যুগ থেকে প্রাপ্ত ব্যবহারিক পাঠ হল: টিমগুলো জিতে যখন তারা এই "ইনফ্রাস্ট্রাকচার আইডিয়া"‑গুলোকে দ্রুত কাজ করা প্রোডাক্টে পরিণত করতে পারে। যদি আপনি একটি অভ্যন্তরীণ লগ এক্সপ্লোরার, ডকুমেন্ট সার্চ অ্যাপ, বা একটি ছোট অ্যানালিটিক্স ড্যাশবোর্ড প্রোটোটাইপ করতে চান, একটি vibe-coding প্ল্যাটফর্ম যেমন Koder.ai আপনাকে দ্রুত একটি এন্ড‑টু‑এন্ড অ্যাপ পেতে সহায়তা করতে পারে: ফ্রন্টএন্ডে React, Go ব্যাকএন্ড PostgreSQL, এবং একটি চ্যাট-ভিত্তিক ইন্টারফেস যেখানে আপনি ইটারেট করতে পারেন।
যখন আপনি এখনও চাহিদা যাচাই করছেন (ফিল্ড, ফিল্টার, রিটেনশন, UX), প্ল্যানিং মোড, স্ন্যাপশট, এবং রোলব্যাক মত ফিচারগুলো প্রাথমিক পরীক্ষাকে কম ঝুঁকিপূর্ণ করে—এরপরেই ভারী অপারেশনাল পছন্দে (ক্লাস্টার চালানো বা সার্চ স্ট্যাক টিউনিং) যাওয়া উচিত।
Lucene ও Hadoop স্ট্রিমলাইন হয়ে এসেছে কারণ এগুলো জাদুকরী ছিল বলে না, বরং কারণ এগুলো পুনঃব্যবহারযোগ্য প্রিমিটিভগুলো—ইনডেক্সিং এবং বিতরণকৃত প্রসেসিং—কে এমন বিল্ডিং ব্লকে প্যাকেজ করেছিল যা টিমগুলো গ্রহণ, প্রসারিত, এবং ওপেন সোর্সের মাধ্যমে শেয়ার করতে পেরেছে।
Lucene একটি সার্চ লাইব্রেরি যা একটি ইনডেক্স তৈরি করে যাতে আপনি প্রতিবার সব কনটেন্ট স্ক্যান না করে মিল থাকে এমন ডকুমেন্টগুলো দ্রুত উদ্ধার করতে পারেন। এটি বাস্তব পণ্যগুলোতে দরকারি উপাদানগুলোও দেয়: বিশ্লেষক (টেক্সট কীভাবে টোকেনাইজ করা হবে), কুয়েরি পারসিং, এবং প্রাসঙ্গিকতা স্কোরিং।
Hadoop সেই মুহূর্তকে সমাধান করে যখন “বড় সার্ভার কেনা” আর কাজ দিচ্ছে না। এটি আপনাকে বহু মেশিন জুড়ে বড় ডেটাসেট জমা রাখার এবং তাদের উপর সমান্তরালভাবে ব্যাচ প্রসেসিং চালানোর সুবিধা দেয়, সাথে মেশিন ব্যর্থ হলে পুনরায় চেষ্টা ও রিডান্ডেন্সির মতো ব্যাবস্থাও আছে।
ইনডেক্স এমন একটি ডেটা স্ট্রাকচার যা টার্ম (বা অন্যান্য টোকেন)গুলোকে সেই ডকুমেন্ট/ফিল্ডগুলোর সঙ্গে ম্যাপ করে যেখানে সেগুলো উপস্থিত—কোরাসের শেষে থাকা সূচকের মতো।
বাস্তবে: ইনডেক্সিং হল এমন কাজ যা আপনি একবার আগেই করে রাখেন, যাতে ইউজারের কুয়েরি মিলিশেকেন্ডে ফলাফল ফিরিয়ে দিতে পারে, না যে প্রতিবার সবকিছু আবার পড়ে।
প্রাসঙ্গিকতা নির্ধারণ করে কোন মিল করা ফলাফলগুলো আগে দেখানো হবে।
প্রচলিত সংকেতগুলো:
পণ্য সার্চ বানালে ফিল্ড বুস্ট, এনালাইজার, সাইনোনিমস ইত্যাদির জন্য সময় রাখুন—এটা পরে করলে ভাল ফল মেলা কঠিন।
HDFS (Hadoop Distributed File System) বড় ফাইলগুলোকে নির্দিষ্ট সাইজের ব্লকে ভাগ করে এবং ক্লাস্টারের বিভিন্ন মেশিনে ছড়িয়ে দেয়। এটি প্রতিটি ব্লকের কপি বিভিন্ন মেশিনে রেখেই ডেটা নিরাপদ রাখে, যাতে কোনো নোড নামলে অন্য কপি থেকে ডেটা পড়া যায়।
অপারেশনালি, আপনি এটি একটি ফাইল সিস্টেমের মতো ব্যবহার করেন—পেছনে Hadoop ডেটার প্লেসমেন্ট এবং রিডান্ডেন্সি সামলায়।
MapReduce হলো একটি ব্যাচ প্রোগ্রামিং মডেল যার দুইটি ধাপ আছে:
এটি ব্যবহার করুন যখন আপনার কাজ প্রাকৃতিকভাবে “সব কিছু স্ক্যান করে সারসংক্ষেপ তৈরি করা, ফলাফল লিখে ফেলা”—যেমন লগ রোলআপ বা বড় ব্যাকফিল।
“কম্পিউটেশনকে ডেটার কাছে নিয়ে যাও” মানে হলো, বিশাল ডেটাসেটগুলো নেটওয়ার্কে কপি করে একটিই জায়গায় এনে প্রসেস করার বদলে, ছোট ছোট কোডপিসগুলোকে সেই মেশিনগুলোর কাছে পাঠানো যা ইতিমধ্যেই ডেটা রাখে।
এটি নেটওয়ার্ক বটলনেক কমায় এবং ডেটা বাড়ার সঙ্গে স্কেল করতে ভালো—বিশেষত বড় ব্যাচ ওয়ার্কলোডের জন্য।
একটি সাধারণ প্যাটার্ন:
এই আলাদা স্তরগুলো ভারী প্রসেসিং এবং ইন্টারঅ্যাকটিভ ডিসকভারি একে অপরের সাথে লড়াই না করে আলাদাভাবে কাজ করতে দেয়।
প্রারম্ভিক সাফল্য ছিল উচ্চ-ভলিউম, অ্যাপেন্ড-হেভি ডেটা যেখানে মূল্য সহজতর অ্যাগ্রিগেশনে পড়ে:
এইগুলো সাধারণত ব্যাচ ওয়ার্কফ্লো যেখানে মিনিট/ঘন্টা ল্যাটেন্সি গ্রহণযোগ্য।
চাহিদা থেকে সরল একটি সিদ্ধান্ত নিন:
চটজলদি পরীক্ষার জন্য: ল্যাটেন্সি, ডেটা আকার/বৃদ্ধি, আপডেট প্যাটার্ন, এবং অপস কাজ (ops load) চাপতে ভেবে দেখুন। যদি Managed বনাম self-hosted তুলনা করতে চান, /pricing এবং /blog পেজগুলো সাহায্য করবে।