ساز و کار برخورد با دادههای حجیم (Big Data) در مقایسه با روشهای سنتی که به طور معمول با اونها سروکار داریم متفاوته. در برخورد با دادههای حجیم دو مشکل اساسی داریم. اولین مشکل ذخیره این دادهها است، شاید مساله سادهای به نظر بیاد ولی وقتی با بیگ دیتا سروکار داریم دیگه نمیتونیم از روشهای سنتی برای ذخیرهسازی استفاده کنیم. دلیلش هم مشخصه، چون دستگاههای ما حافظههای محدودی دارند و در عین حال خود دادهها هم مرتبا با نرخ بالایی در حال افزایش هستند. دومین مشکل اساسی هم زمان و نحوه پردازش دادههاست. پس نیاز به سازوکاری داریم تا این مسائل رو به بهترین شکل حل و فصل کنه. هادوپ فریمورکیه که برای این مشکلات راه حلی بهینه و مقرون به صرفه ارائه میده.
هدف اولیه من از نوشتن این مطلب این بود که هم راهاندازی هادوپ بر روی یک شبکه رو آموزش بدم و هم از این شبکه برای پردازش دیتاستهای واقعی استفاده کنم ولی چون مطالب متن بیش از اندازه زیاد میشد تصمیم گرفتم این موضوع رو به 2 مطلب کوتاهتر تقسیم کنم. در این آموزش فقط نحوه راهاندازی هادوپ روی یک شبکه رو بررسی میکنیم. و در آموزش دوم از این شبکه هادوپ و برنامهنویسی MapReduce برای تحلیل و پردازش کلانداده استفاده میکنیم. اگر میخواهید در حوزههایی مثل بیگدیتا، آنالیز داده و یا مهندسی داده شروع به یادگیری کنید، این آموزش میتونه نقطه شروع مناسبی برای شما باشه.
ضمنا اگه با آموزشهای طولانی متن محور رابطه خوبی ندارید در کنار این نوشته، یک ویدئو هم از روال راهاندازی هادوپ تهیه کردم. لینک یوتیوب این ویدئو رو این زیر قرار میدم، امیدوارم مفید باشه.
خلاصهای از مطالب این نوشته
سعی من در این بخش اینه که خیلی مختصر اجزاء معماری هادوپ رو توضیح بدم. خوندن این بخش برای راهاندازی هادوپ ضروری نیست و صرفا یک مقدمه است برای اینکه بدونیم اجزاء اصلی هادوپ چیه و چطوری کار میکنه.
در معماری هادوپ دو هسته اصلی وجود داره؛ HDFS و YARN
وظیفه HDFS ذخیره دادههای بزرگ با استفاده از یه روش توزیع شده است. روش کارش به این شکله که یک داده بزرگ رو به قسمتهای کوچکتر تقسیم میکنه و هر کدوم از این دادهها رو روی یک نود (ماشین) در شبکه ذخیره میکنه و از طریق یه ماشین مرکزی هم این دادههای تقسیم شده رو مدیریت و کنترل میکنه. HDFS دارای دو سرویس اصلی است: Namenode و Datanode
دیتانود(Datanode) سرویسیه که روی ماشینهای اسلیو اجرا میشه، وظیفش هم ذخیره دادههاست. دادههای واقعی روی Datanode ها (در ماشینهای اسلیو) ذخیره میشن. Datanode درخواست عملیاتهایی مثل ذخیره، آپدیت و حذف رکوردها رو از ماشین مستر میگیره و اجرا میکنه.
نیمنود(Namenode) هم سرویسه که روی ماشین مستر اجرا میشه و وظیفش کنترل و مدیریت Datanode هاست. مثلا دونستن اینکه کدام داده بر روی کدام ماشین و کدام بلاکها ذخیره شده، حجم فایلها، سطح دسترسیها و مسائلی از این دست وظیفه Namenode هست. هر تغییری که در دادههای واقعی بوجود بیاد این تغییرات در Namenode هم رکورد میشه.
در کنار یک واحد ذخیرهسازی نیاز به یک واحد پردازشی هم داریم تا بتونه این دادهها را بخونه و پردازش کنه. واحد YARN مسئول انجام این وظیفه است. YARN هم مثل HDFS در درون خود از دو سرویس اصلی (یکی برای نودهای اسلیو و دیگری برای نود مستر) استفاده میکنه؛ NodeManager و ResourceManager.
ریسورسمنیجر (ResourceManager) سرویسیه که در ماشین مستر اجرا میشه و وظیفه مدیریت و کنترل منابع و پردازشها در NodeManager ها را به عهده داره. NodeManager هم سرویس نودهای اسلیو است و کارش اینه که دستورالعملها رو از ResourceManager بگیره و اجرا کنه.
البته اجزاء معماری هادوپ همینجا تموم نمیشه و پیچیدگیهای بیشتری داره ولی چون هدف این مطلب صرفا یه آشنایی اولیه هست به همین مقدار بسنده میکنیم.
در این آموزش برای راهاندازی هادوپ به صورت مولتی نود از VirtualBox و توزیع Lubuntu نسخه 18.04 استفاده شده.
خب برای شروع سه ماشین مجازی میسازیم و بر روی هر سه Lubuntu نصب میکنیم. در شبکه هادوپی که قراره در بخشهای بعدی بسازیم یکی از این ماشینها به عنوان نود Master و دو ماشین دیگه به عنوان نودهای Slave شناخته میشن.
برای اینکه ماشینهای مجازی ما بتونن با همدیگه ارتباط داشته باشن، اونها رو در یک شبکه قرار میدیم.
مراحل ایجاد یک شبکه بین ماشینهای مجازی:
هادوپ برای راهاندازی نیاز به کار با Java و SSH دارد.
اساساچ(SSH)؛ یک پروتکل امن برای برقراری ارتباط بین ماشینها در شبکه است و هادوپ هم برای ارتباط بین نودهای مستر اسلیو به این پروتکل نیاز داره. دستور نصب SSH:
Command>> sudo apt install openssh-server openssh-client
حذف پسورد در ارتباط SSH:
پروتکل SSH به طور پیشفرض در زمان برقراری ارتباط بین دو ماشین نیاز به وارد کردن پسورد (ماشین مقصد) داره ولی در یه سیستم هادوپ چون ماشینهای مستر اسلیو به صورت مداوم با همدیگه ارتباط دارند، SSH باید طوری تنظیم بشه که این برقراری ارتباط نیازی به پسورد نداشته باشه. برای اینکار اول یک کلید تصادفی در ماشین مستر تولید و در مرحله بعد این کلید رو به ماشینهای اسلیو معرفی میکنیم.
دستورات حذف پسورد در ارتباط SSH: (تمامی این دستورات باید در نود مستر وارد شود)
Command>> ssh-keygen -t rsa
Command>> cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
Command>> ssh-copy-id -i ~/.ssh/id_rsa.pub itsamirrezah@slave1 Command>> ssh-copy-id -i ~/.ssh/id_rsa.pub itsamirrezah@slave2
حالا با دستور ssh [username]@[hostname] بررسی میکنیم ببینیم آیا SSH به درستی کانفیگ شده یا نه.
در این آموزش از هادوپ نسخه 2.8.5 استفاده شده است. لینک دانلود
اجرای هادوپ نیاز به نصب خاصی نداره، فقط فایل هادوپ رو از لینک بالا دانلود و اکسترکت کنید. برای کانفیگ هم فقط باید چند فایل مهم در پوشه هادوپ ویرایش بشه. در ادامه این بخش تمام کارهایی که برای کانفیگ هادوپ نیاز هست رو به صورت مرحله به مرحله بررسی میکنیم:
قدم 1: ویرایش فایلهای اصلی هادوپ
در پوشه اصلی هادوپ در مسیر etc/hadoop فایلهای زیر رو با توجه به توضیحات داده شده، با یک ادیتور (مثل nano یا gedit) ویرایش کنید.
توضیح 1: کانفیگ فایلهای hdfs-site.xml و slaves بین نودهای مستر و اسلیو متفاوته، ولی بقیه فایلها بین همه ماشینها کانفیگ یکسانی دارند.
توضیح 2: در اکثر تنظیمات از یک آدرس آیپی (192.168.10.10) استفاده شده، این آدرس، IP ماشین مستر توی این آموزشه. اگه IP ماشین مستر شما غیر از اینه باید تمام این مقادیر رو به IP خودتون تغییر بدید.
تنظیمات hdfs-site.xml در نود مستر:
تنظیمات hdfs-site.xml در نودهای اسلیو:
توضیح: دایرکتوریهایی که در فایل hdfs-site.xml معرفی میکنید حتما باید در همون مسیر وجود داشته باشن، مثلا برای این آموزش من از قبل دایرکتوریهای hadoop_store/hdfs/namenode (در مستر) و hadoop_store/hdfs/datanode (در اسیلوها) رو ایجاد کردم.
ایجاد دایرکتوریهای Namenode و Datanode:
ایجاد پوشه namenode (نود مستر):
Command>> mkdir -p /home/itsamirrezah/hadoop_store/hdfs/namenode
ایجاد و تغییر سطح دسترسی پیشفرض دایرکتوری datanode (نودهای اسلیو):
Command>> mkdir -p /home/itsamirrezah/hadoop_store/hdfs/datanode
Command>> chmod 755 /home/itsamirrezah/hadoop_store/hdfs/datanode
هادوپ از طریق این فایل نودهای اسلیو رو میشناسه. برای ویرایش این فایل username و hostname ماشینهای اسلیو رو مثل تصویر زیر وارد کنید:
قدم 2: اضافه کردن مسیر جاوا به هادوپ
برای معرفی جاوا به هادوپ کافیه در پوشه اصلی هادوپ فایل etc/hadoop/hadoop-env.sh رو با یک ادیتور مثل تصویر زیر ویرایش کنید. (احتمال داره محل نصب جاوا در ماشینهای مجازی شما متفاوت باشه)
قدم 3: اضافه کردن مسیر هادوپ به متغیرهای محلی
تنظیمات هادوپ دیگه به آخرش رسیده، تنها کار باقیمونده معرفی پوشههای bin و sbin هادوپ به متغیر PATH سیستم عامله. فایل etc/bash.bashrc/ رو با یک ادیتور باز کنید و دستورات زیر رو به انتهای فایل اضافه کنید:
قدم 4: فرمت HDFS
در اولین راهاندازی هادوپ حتما باید HDFS فرمت بشه. برای فرمت HDFS دستور زیر رو وارد کنید: (فقط در ماشین مستر)
command>> hdfs namenode –format
اگر تمامی مراحل بالا رو به درستی انجام داده باشید namenode با موفقیت فرمت میشود و حالا میتونید هادوپ رو اجرا کنید.
خب دیگه قسمت سخت ماجرا تموم شد و فقط اجرای سرویسهای هادوپ باقی مونده. 2 دستور برای اجرای سرویسهای هادوپ وجود داره:
دستور اجرای سرویسهای HDFS:
command>> start-dfs.sh
و دستور اجرای سرویسهای YARN:
command>> start-yarn.sh
اگه سوال، انتقاد یا پیشنهادی داشتید میتونید یا زیر همین پست مطرح کنید یا از طریق توئیتر و تلگرام با من در تماس باشید. خوشحال میشم (: