Apache Spark হলো একটি ওপেন সোর্স ক্লাস্টার কম্পিউটিং ফ্রেমওয়ার্ক যা বিগ ডেটা প্রক্রিয়াকরণে ব্যবহৃত হয়। এটি মূলত মেমরি-ভিত্তিক ডেটা প্রসেসিং দ্বারা দ্রুত ডেটা প্রক্রিয়া করতে সক্ষম, এবং ব্যাচ ও স্ট্রিমিং ডেটা উভয় ধরনের ডেটার জন্য ব্যবহৃত হতে পারে। Spark-এর আর্কিটেকচারটি ডিস্ট্রিবিউটেড প্রক্রিয়াকরণ সিস্টেমে কাজ করে এবং এর প্রধান দুটি উপাদান হল Driver এবং Executors। এগুলি একে অপরের সাথে যোগাযোগ করে এবং Spark অ্যাপ্লিকেশনটি কার্যকরভাবে রান করে।
Spark আর্কিটেকচারের মূল উপাদান
Spark-এর আর্কিটেকচার মূলত তিনটি প্রধান উপাদান নিয়ে গঠিত:
- Driver Program: এই উপাদানটি Spark অ্যাপ্লিকেশনের প্রধান নিয়ন্ত্রক এবং এটি ক্লাস্টারের সাথে যোগাযোগ করে।
- Executors: এগুলি Spark ক্লাস্টারে প্যারালাল কাজ সম্পাদন করে। এরা ডেটা প্রক্রিয়াকরণ এবং কম্পিউটেশনের জন্য দায়িত্বশীল।
- Cluster Manager: Spark ক্লাস্টারের রিসোর্স ম্যানেজমেন্ট এবং রিসোর্স অ্যালোকেশন পরিচালনা করে (যেমন YARN, Mesos বা Spark Standalone ক্লাস্টার ম্যানেজার)।
এখন, Spark-এর Driver এবং Executors সম্পর্কে বিস্তারিতভাবে আলোচনা করা হলো।
1. Driver Program
Driver Program হল Spark অ্যাপ্লিকেশনের নিয়ন্ত্রক অংশ যা Spark অ্যাপ্লিকেশনের লজিক বাস্তবায়ন করে এবং অ্যাপ্লিকেশনটির জীবনচক্র পরিচালনা করে। এটি Spark ক্লাস্টারের সেন্ট্রাল কন্ট্রোলার হিসেবে কাজ করে এবং ক্লাস্টারের Executor-এর সাথে যোগাযোগ করে কম্পিউটেশনাল কাজ নির্ধারণ করে।
Driver এর প্রধান দায়িত্বসমূহ:
- SparkContext তৈরি করা: Driver SparkContext (বা SparkSession) তৈরি করে যা Spark অ্যাপ্লিকেশনকে ক্লাস্টারে যুক্ত করে এবং কাজ পরিচালনা করতে সাহায্য করে।
- RDD Transformation এবং Action পরিকল্পনা: Driver অ্যাপ্লিকেশনটির কাজকে পরিকল্পনা করে। এটি RDD (Resilient Distributed Dataset) ট্রান্সফর্মেশন এবং অ্যাকশন (যেমন map, reduce) নির্ধারণ করে।
- Job এর নির্ধারণ এবং সম্পাদন: Driver একটি Job তৈরি করে এবং তা Executor-এ প্রেরণ করে। Executor-গুলি ডেটা প্রক্রিয়াকরণ করে এবং Driver-এ ফলাফল ফেরত পাঠায়।
- Task Scheduling: Driver প্রক্রিয়া করার জন্য Task গুলি Executor-এ বিতরণ করে এবং এর পর Task এর স্টেটাস মনিটর করে।
Driver এর সাথে সম্পর্কিত অন্যান্য উপাদান:
- DAGScheduler: এটি RDD ট্রান্সফর্মেশন গুলিকে নির্দিষ্ট DAG (Directed Acyclic Graph) এ রূপান্তরিত করে এবং তারপরে এগুলি Task হিসেবে Executor-এ পাঠায়।
- TaskScheduler: DAGScheduler এর কাছে পাওয়া DAG এর ভিত্তিতে Task গুলিকে স্পেসিফিক Executor-এ বিতরণ করে।
Driver-এর উদাহরণ:
- যদি আপনার Spark অ্যাপ্লিকেশনটি বড় ডেটাসেটের উপর কিছু ট্রান্সফর্মেশন প্রয়োগ করছে, তাহলে Driver এই ট্রান্সফর্মেশনগুলোকে সংগঠিত করে এবং Executor-এ পাঠিয়ে দেয়।
2. Executors
Executors হল Spark অ্যাপ্লিকেশনের কাজ বাস্তবায়নকারী মূল উপাদান। এগুলি ক্লাস্টারের নোডগুলিতে রান করে এবং ডেটা প্রক্রিয়াকরণ সম্পন্ন করে। Executors-এ Spark কাজের কার্যকরী অংশগুলি প্রক্রিয়াকৃত হয়, এবং তারা মূলত task গুলির কার্যকরী বাস্তবায়ন পরিচালনা করে।
Executors এর প্রধান দায়িত্বসমূহ:
- ডেটা প্রক্রিয়াকরণ: Executors Spark Context থেকে প্রাপ্ত টাস্কগুলির বাস্তবায়ন করে এবং ডেটার উপর প্রয়োজনীয় অপারেশন (যেমন map, reduce, join, filter) সম্পাদন করে।
- ডেটা স্টোরেজ: Executors লোড হওয়া ডেটা, যেমন RDD বা DataFrame, সাময়িকভাবে মেমরিতে সংরক্ষণ করে (কিছু ক্ষেত্রে ডিক্সে) যাতে পরবর্তী কাজগুলির জন্য এটি দ্রুতভাবে প্রাপ্য হয়।
- টাস্ক বাস্তবায়ন: Spark অ্যাপ্লিকেশন যখন একটি Job চালায়, Driver তা Executor-এ পাঠায়। Executor তারপর সেই Task গুলির কাজ করতে থাকে।
- টাস্ক ফলাফল ফেরত পাঠানো: Executors তাদের কাজ শেষ হওয়ার পরে, তারা প্রক্রিয়াকৃত ডেটা Driver-এ ফেরত পাঠায়।
Executors এর কাজের গতি:
- Executors একাধিক টাস্ক রান করতে পারে প্যারালালভাবে এবং এর ফলে খুব দ্রুত ডেটা প্রক্রিয়া করা সম্ভব হয়। এই প্যারালাল প্রক্রিয়াকরণ ক্ষমতার জন্যই Spark অনেক দ্রুত এবং স্কেলেবল।
Executor উদাহরণ:
- যদি আপনি একটি filter অপারেশন চালান একটি ডেটাসেটে, তাহলে Executor সেই ফিল্টার অপারেশন প্রক্রিয়া করবে এবং ফলাফলগুলি Driver-এ পাঠাবে।
Executors এর সাথে সম্পর্কিত অন্যান্য উপাদান:
- Task: Task হল Executor-এর ইউনিট কাজ, যা Driver থেকে প্রেরিত হয়। এগুলি সাধারণত ডেটা ট্রান্সফর্মেশন বা কাজের জন্য নির্দিষ্ট কোড এক্সিকিউট করে।
- RDDs: Executors RDD গুলি প্রক্রিয়া করে এবং সেই অনুযায়ী প্রক্রিয়াকৃত ডেটা রিটার্ন করে।
Driver এবং Executors এর মধ্যে সম্পর্ক
- Driver একটি সেন্ট্রাল নিয়ন্ত্রক হিসেবে কাজ করে এবং কাজের পরিকল্পনা করে। এটি Executor-এ টাস্ক প্রেরণ করে এবং তাদের স্টেটাস মনিটর করে।
- Executors এই টাস্কগুলো বাস্তবায়ন করে এবং তাদের ফলাফল Driver-এ ফেরত পাঠায়।
- Task Scheduling: Driver একটি Job তৈরি করার পরে, Task গুলি Executors-এ ভাগ করে দেয়। Executors সেগুলি প্যারালাল প্রক্রিয়া করে এবং Driver এ ফলাফল ফেরত পাঠায়।
- Resilience: যদি কোন Executor ফেইল হয়, তাহলে Driver অন্য Executor কে সেই টাস্ক পুনরায় দেওয়ার মাধ্যমে সিস্টেমের রিলায়েবিলিটি নিশ্চিত করে।
সারাংশ
Apache Spark-এর Driver এবং Executors হল তার আর্কিটেকচারের মূল উপাদান। Driver Spark অ্যাপ্লিকেশনের সেন্ট্রাল নিয়ন্ত্রক যা ক্লাস্টারের সঙ্গে সংযোগ স্থাপন করে এবং কাজের পরিকল্পনা করে, এবং Executors এই কাজগুলো বাস্তবায়ন করে ডেটা প্রক্রিয়াকরণ করে। Driver এবং Executors একসাথে কাজ করে Spark অ্যাপ্লিকেশনটিকে দ্রুত, স্কেলেবল এবং কার্যকরভাবে পরিচালনা করার জন্য।
Read more