امیررضا حاجاتی
امیررضا حاجاتی
خواندن ۷ دقیقه·۵ سال پیش

آموزش؛ راه‌اندازی هادوپ به صورت مولتی‌نود

ساز و کار برخورد با داده‌های حجیم (Big Data) در مقایسه با روش‌های سنتی که به طور معمول با اون‌ها سرو‌کار داریم متفاوته. در برخورد با داده‌های حجیم دو مشکل اساسی داریم. اولین مشکل ذخیره این داده‌ها است، شاید مساله ساده‌ای به نظر بیاد ولی وقتی با بیگ دیتا سروکار داریم دیگه نمی‌تونیم از روش‌های سنتی برای ذخیره‌سازی استفاده کنیم. دلیلش هم مشخصه، چون دستگاه‌های ما حافظه‌های محدودی دارند و در عین حال خود داده‌ها هم مرتبا با نرخ بالایی در حال افزایش هستند. دومین مشکل اساسی هم زمان و نحوه پردازش داده‌هاست. پس نیاز به سازوکاری داریم تا این مسائل رو به بهترین شکل حل و فصل کنه. هادوپ فریمورکیه که برای این مشکلات راه حلی بهینه و مقرون به صرفه ارائه میده.


هدف اولیه من از نوشتن این مطلب این بود که هم راه‌اندازی هادوپ بر روی یک شبکه رو آموزش بدم و هم از این شبکه برای پردازش دیتاست‌های واقعی استفاده کنم ولی چون مطالب متن بیش از اندازه زیاد می‌شد تصمیم گرفتم این موضوع رو به 2 مطلب کوتاه‌تر تقسیم کنم. در این آموزش فقط نحوه راه‌اندازی هادوپ روی یک شبکه رو بررسی می‌کنیم. و در آموزش دوم از این شبکه هادوپ و برنامه‌نویسی MapReduce برای تحلیل و پردازش کلان‌داده استفاده می‌کنیم. اگر می‌خواهید در حوزه‌هایی مثل بیگ‌دیتا، آنالیز داده و یا مهندسی داده شروع به یادگیری کنید، این آموزش می‌تونه نقطه شروع مناسبی برای شما باشه.


ضمنا اگه با آموزش‌های طولانی متن محور رابطه خوبی ندارید در کنار این نوشته، یک ویدئو هم از روال راه‌اندازی هادوپ تهیه کردم. لینک یوتیوب این ویدئو رو این زیر قرار میدم، امیدوارم مفید باشه.

لینک ویدئو

https://www.youtube.com/watch?v=RePHjb-V9K8

خلاصه‌ای از مطالب این نوشته

  • بررسی معماری هادوپ
  • شروع به کار؛ پیشنیازهای اولیه
  • ایجاد یک شبکه در لینوکس بین سه نود
  • نصب نرم‌افزارهای ضروری برای کار با هادوپ
  • راه‌اندازی و اجرای هادوپ

بخش 1؛ معماری هادوپ

سعی من در این بخش اینه که خیلی مختصر اجزاء معماری هادوپ رو توضیح بدم. خوندن این بخش برای راه‌اندازی هادوپ ضروری نیست و صرفا یک مقدمه است برای اینکه بدونیم اجزاء اصلی هادوپ چیه و چطوری کار می‌کنه.

در معماری هادوپ دو هسته اصلی وجود داره؛ HDFS و YARN

وظیفه HDFS ذخیره داده‌های بزرگ با استفاده از یه روش توزیع‌ شده است. روش کارش به این شکله که یک داده بزرگ رو به قسمت‌های کوچک‌تر تقسیم می‌کنه و هر کدوم از این داده‌‌ها رو روی یک نود (ماشین) در شبکه ذخیره می‌کنه و از طریق یه ماشین مرکزی هم این داده‌های تقسیم شده رو مدیریت و کنترل می‌کنه. HDFS دارای دو سرویس اصلی است: Namenode و Datanode

دیتانود(Datanode) سرویسیه که روی ماشین‌های اسلیو اجرا میشه، وظیفش هم ذخیره داده‌هاست. داده‌های واقعی روی Datanode ها (در ماشین‌های اسلیو) ذخیره میشن. Datanode درخواست عملیات‌هایی مثل ذخیره، آپدیت و حذف رکورد‌ها رو از ماشین مستر می‌گیره و اجرا می‌کنه.

نیم‌نود(Namenode) هم سرویسه که روی ماشین مستر اجرا میشه و وظیفش کنترل و مدیریت Datanode هاست. مثلا دونستن اینکه کدام داده بر روی کدام ماشین و کدام بلاک‌ها ذخیره شده، حجم فایل‌ها، سطح دسترسی‌ها و مسائلی از این دست وظیفه Namenode هست. هر تغییری که در داده‌های واقعی بوجود بیاد این تغییرات در Namenode هم رکورد میشه.

در کنار یک واحد ذخیره‌سازی نیاز به یک واحد پردازشی هم داریم تا بتونه این داده‌ها را بخونه و پردازش کنه. واحد YARN مسئول انجام این وظیفه است. YARN هم مثل HDFS در درون خود از دو سرویس اصلی (یکی برای نودهای اسلیو و دیگری برای نود مستر) استفاده می‌کنه؛ NodeManager و ResourceManager.

ریسورس‌منیجر (ResourceManager) سرویسیه که در ماشین مستر اجرا میشه و وظیفه مدیریت و کنترل منابع و پردازش‌ها در NodeManager ها را به عهده داره. NodeManager هم سرویس نود‌های اسلیو است و کارش اینه که دستورالعمل‌ها رو از ResourceManager بگیره و اجرا کنه.

البته اجزاء معماری هادوپ همینجا تموم نمیشه و پیچیدگی‌های بیشتری داره ولی چون هدف این مطلب صرفا یه آشنایی اولیه هست به همین مقدار بسنده می‌کنیم.


بخش 2؛ شروع به کار

در این آموزش برای راه‌اندازی هادوپ به صورت مولتی نود از VirtualBox و توزیع Lubuntu نسخه 18.04 استفاده شده.

لینک دانلود VirtualBox

لینک دانلود Lubuntu

خب برای شروع سه ماشین مجازی می‌سازیم و بر روی هر سه Lubuntu نصب می‌کنیم. در شبکه هادوپی که قراره در بخش‌های بعدی بسازیم یکی از این ماشین‌ها به عنوان نود Master و دو ماشین دیگه به عنوان نود‌های Slave شناخته میشن.


بخش 3؛ ایجاد یک شبکه بین ماشین‌های مجازی

برای اینکه ماشین‌های مجازی ما بتونن با همدیگه ارتباط داشته باشن، اون‌ها رو در یک شبکه قرار میدیم.

مراحل ایجاد یک شبکه بین ماشین‌های مجازی:

  • اضافه کردن یک نتورک آداپتر از نوع host-only برای استفاده همه ماشین‌ها


  • اختصاص IP استاتیک به همه ماشین‌های مجازی
استاتیک IP در Lubuntu
استاتیک IP در Lubuntu


  • معرفی ماشین‌های موجود در شبکه به همدیگه با ویرایش فایل etc/hosts/
ویرایش فایل etc/hosts/
ویرایش فایل etc/hosts/

بخش 4؛ نصب Java و SSH

هادوپ برای راه‌اندازی نیاز به کار با Java و SSH دارد.

  • جاوا؛ چون هادوپ برپایه زبان جاوا نوشته شده، به همین خاطر نصب جاوا قبل از کانفیگ هادوپ ضروریه. جاوا استفاده شده در این آموزش نسخه 1.8 هست.

اس‌اس‌اچ(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
کانفیگ SSH

حالا با دستور ssh [username]@[hostname] بررسی می‌کنیم ببینیم آیا SSH به درستی کانفیگ شده یا نه.


بخش 5؛ نصب و راه‌اندازی هادوپ

در این آموزش از هادوپ نسخه 2.8.5 استفاده شده است. لینک دانلود

اجرای هادوپ نیاز به نصب خاصی نداره، فقط فایل هادوپ رو از لینک بالا دانلود و اکسترکت کنید. برای کانفیگ هم فقط باید چند فایل مهم در پوشه هادوپ ویرایش بشه. در ادامه این بخش تمام کارهایی که برای کانفیگ هادوپ نیاز هست رو به صورت مرحله به مرحله بررسی می‌کنیم:

قدم 1: ویرایش فایل‌های اصلی هادوپ

در پوشه اصلی هادوپ در مسیر etc/hadoop فایل‌های زیر رو با توجه به توضیحات داده شده، با یک ادیتور (مثل nano یا gedit) ویرایش کنید.

توضیح 1: کانفیگ فایل‌های hdfs-site.xml و slaves بین نودهای مستر و اسلیو متفاوته، ولی بقیه فایل‌ها بین همه ماشین‌ها کانفیگ یکسانی دارند.
توضیح 2: در اکثر تنظیمات از یک آدرس آیپی (192.168.10.10) استفاده شده، این آدرس، IP ماشین مستر توی این آموزشه. اگه IP ماشین مستر شما غیر از اینه باید تمام این مقادیر رو به IP خودتون تغییر بدید.

  • فایل core-site.xml
https://gist.github.com/itsamirrezah/f21b454257db641173433a8f1602dd1d
  • فایل mapred-site.xml
https://gist.github.com/itsamirrezah/a51ab7fabc83fe69a03477a0c17f8f31
  • فایل yarn-site.xml
https://gist.github.com/itsamirrezah/8858db008fb0a8a50ae119e53001557e
  • فایل hdfs-site.xml
تنظیماتاینفایلبینماشین‌هایمسترواسلیومتفاوته.درماشینمسترآدرسدایرکتوریNamenodeمشخصمیشهودرماشین‌هایاسلیوآدرسدایرکتوریDatanode.(یادآوری:اگهبخشمعماریهادوپاینمقالهروخوندهباشیدحتمامی‌دونیدکهNamenodeدرمستراجرامیشهوDatanodeهمدراسلیو‌ها)

تنظیمات hdfs-site.xml در نود مستر:

https://gist.github.com/itsamirrezah/409fa879811212739006757f67998a62

تنظیمات hdfs-site.xml در نودهای اسلیو:

https://gist.github.com/itsamirrezah/f0621bd5174abd81d9a7d9f756e83545


توضیح: دایرکتوری‌هایی که در فایل 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
  • فایل slaves

هادوپ از طریق این فایل نودهای اسلیو رو میشناسه. برای ویرایش این فایل username و hostname ماشین‌های اسلیو رو مثل تصویر زیر وارد کنید:

قالب معرفی اسلیوها: username@hostname
قالب معرفی اسلیوها: username@hostname

قدم 2: اضافه کردن مسیر جاوا به هادوپ

برای معرفی جاوا به هادوپ کافیه در پوشه اصلی هادوپ فایل etc/hadoop/hadoop-env.sh رو با یک ادیتور مثل تصویر زیر ویرایش کنید. (احتمال داره محل نصب جاوا در ماشین‌های مجازی شما متفاوت باشه)

معرفی مسیر جاوا به فایل hadoop-env.sh
معرفی مسیر جاوا به فایل hadoop-env.sh

قدم 3: اضافه کردن مسیر هادوپ به متغیرهای محلی

تنظیمات هادوپ دیگه به آخرش رسیده، تنها کار باقی­مونده معرفی پوشه‌های bin و sbin هادوپ به متغیر PATH سیستم عامله. فایل etc/bash.bashrc/ رو با یک ادیتور باز کنید و دستورات زیر رو به انتهای فایل اضافه کنید:

ویرایش فایل bash.bashrc
ویرایش فایل bash.bashrc
https://gist.github.com/itsamirrezah/6ab568695b8e17571e49742421a560a1


قدم 4: فرمت HDFS

در اولین راه‌اندازی هادوپ حتما باید HDFS فرمت بشه. برای فرمت HDFS دستور زیر رو وارد کنید: (فقط در ماشین مستر)

command>> hdfs namenode –format

اگر تمامی مراحل بالا رو به درستی انجام داده باشید namenode با موفقیت فرمت می‌شود و حالا می‌تونید هادوپ رو اجرا کنید.


اجرای هادوپ

خب دیگه قسمت سخت ماجرا تموم شد و فقط اجرای سرویس‌های هادوپ باقی مونده. 2 دستور برای اجرای سرویس‌های هادوپ وجود داره:

دستور اجرای سرویس‌های HDFS:

command>> start-dfs.sh

و دستور اجرای سرویس‌های YARN:

command>> start-yarn.sh
اجرای سرویس‌های هادوپ
اجرای سرویس‌های هادوپ

اگه سوال، انتقاد یا پیشنهادی داشتید می‌تونید یا زیر همین پست مطرح کنید یا از طریق توئیتر و تلگرام با من در تماس باشید. خوشحال می‌شم (:

هادوپآموزشبیگ دیتامهندسی دادهداده
یه چیزهایی رو یاد میگیرم و سعی می کنم به دیگران یاد بدم... / دانشجوی ارشد نرم افزار
شاید از این پست‌ها خوشتان بیاید