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

ساز و کار برخورد با داده‌های حجیم (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معرفی ماشین‌های موجود در شبکه به همدیگه با ویرایش فایل etc/hosts/ویرایش فایل etc/hosts/بخش 4؛ نصب Java و SSHهادوپ برای راه‌اندازی نیاز به کار با Java و SSH دارد.جاوا؛ چون هادوپ برپایه زبان جاوا نوشته شده، به همین خاطر نصب جاوا قبل از کانفیگ هادوپ ضروریه. جاوا استفاده شده در این آموزش نسخه 1.8 هست. sudo apt install openjdk-8-jdk" />Command>> sudo apt install openjdk-8-jdk" />> sudo apt install openjdk-8-jdk" />Command>> sudo apt install openjdk-8-jdkاس‌اس‌اچ(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 [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/datanodeCommand>> chmod 755 /home/itsamirrezah/hadoop_store/hdfs/datanodeفایل slavesهادوپ از طریق این فایل نودهای اسلیو رو میشناسه. برای ویرایش این فایل username و hostname ماشین‌های اسلیو رو مثل تصویر زیر وارد کنید: قالب معرفی اسلیوها: username@hostnameقدم 2: اضافه کردن مسیر جاوا به هادوپبرای معرفی جاوا به هادوپ کافیه در پوشه اصلی هادوپ فایل etc/hadoop/hadoop-env.sh رو با یک ادیتور مثل تصویر زیر ویرایش کنید. (احتمال داره محل نصب جاوا در ماشین‌های مجازی شما متفاوت باشه)معرفی مسیر جاوا به فایل hadoop-env.shقدم 3: اضافه کردن مسیر هادوپ به متغیرهای محلیتنظیمات هادوپ دیگه به آخرش رسیده، تنها کار باقی­مونده معرفی پوشه‌های bin و sbin هادوپ به متغیر PATH سیستم عامله. فایل etc/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اجرای سرویس‌های هادوپاگه سوال، انتقاد یا پیشنهادی داشتید می‌تونید یا زیر همین پست مطرح کنید یا از طریق توئیتر و تلگرام با من در تماس باشید. خوشحال می‌شم (: