تارا فایل

ایجاد کلاستر شبه توزیعی Spark Hadoop در ویندوز ماشین مجازی


بنام ایزد منان

عنوان:

راه اندازی کلاستر مجازی شبه توزیعی هدوپ- اسپارک در ویندوز+ ماشین مجازی آماده

آموزش ایجاد کلاستر آموزشی Hadoop & Spark روی سرور مجازی CentOS + دانلود ماشین مجازی پیکربندی شده

فهرست مطالب

عنوان صفحه
مقدمه 4
نصب SSH و شبیه ساز ترمینال Cygwin 7
ایجاد ماشین مجازی لینوکس CentOs 6.5 minimal با VMware workstation در ویندوز 15
تنظیم ویژگیهای ماشین مجازی 17
استخراج مشخصات اینترفیسهای ماشین مجازی 24
برقراری اتصال ssh از محیط ویندوز به ماشین لینوکس با ترمینال شبیه ساز Cygwin 33
تعیین HOSTNAME با فرمت FQDN برای VM 33
اختصاص نام مستعار بجای IP آدرس CentOS VM در ویندوز 34
تنظیمات دسترسی به اینرنت در ماشین مجازی Centos 36
دانلود و نصب نرم افزارهای پیشنیاز از اینترنت در CentOS VM 37
تاثیرات فایروال و فیلترینگ جداول IP در اتصالات شبکه 38
غیر فعال کردن فیلترینگ جداول IP در ماشین مجازی لینوکس 40
انتقال فایل از ماشین محلی ویندوز به CentOS VM 41
تنظیم passwordless login بین ماشین محلی ویندوز و CentOS VM 43
تنظیم passwordless login داخلی ماشین مجازی CentOS 44
بررسی حالتهای راه اندازی کلاستر Hadoop 46
پیکره بندی کلاستر Hadoop در حالت Pseudo Distributed Mode (شبه توزیع شده) 47
دانلود بسته باینریهای Hadoop در ویندوز و انتقال آن به VM 47
دانلود بسته باینری Hadoop بطور مستقیم از محیط VM با ابزار wget 47
تنظیم متغیر محلی جاوا و hadoop در فایل profile ماشین مجازی 48
ویرایش فایلهای پیکربنده بندی hadoop برای حالت Pseudo Distributed Mode 51
راه اندازی demon های dfs و yarn 57
دسترسی به رابط تحت وب hdfs از مرورگر وب در ویندوز 57
به دسترسی به Yarn web UI 58
کار با دستورات اصلی مدیریت hdfs در کلاستر hadoop 59
ایجاد دایرکتوری کاربر در فایل سیستم hdfs 59
مانیتورینگ و اشکال یابی فرایندها در کلاستر hadoop با Log فایلها 60
تست عملکرد کلاستر شبه توزیعی هدوپ با مثال Wordcount Map-reduce 61
نحوه اجرای مثال Wordcount Map-reduce 61
دسترسی به فایل خروجی برنامه wordcount از طریق hdfs web UI 65
خواندن فایل خروجی برنامه از hdfs در ترمینال 66
توقف کلاستر هدوپ 66
راه اندازی چارچوب Apache Spark در کلاستر شبه توزیعی hadoop در حالت Local………………………………………………………………………..67
مفاهیم پایه ای در چارچوب پردازشی آپاچی اسپارک 69
مزایای موتور پردازشی آپاچی اسپارک نسبت به محیطهای پردازشی مشابه 70
پوسته اسپارک (Spark-Shell) 71
ساختار داده ای دیتاستهای توزیعی- منعطف (RDD) در اسپارک 72
مثال عملی spark- برنامه word Count در محیط پردازشی Apache Spark 73
ارسال دیتاست نمونه از ویندوز به VM 74
ارسال دیتاست از فایل سیستم VM به hdfs 75
ایجاد RDD با خواندن فایل ورودی از hdfs با Spark-Scala API 75
اعمال transformation برای شناسایی کلمات در متن 75
اعمال transformation برای تعیین جفتهای کلید- مقدار 75
اعمال transformation برای کاهش کلیدهای مشابه 75
تثبیت RDD خروجی در حافظه اصلی 75
چاپ خروجی برنامه Wordcount Spark در ترمینال 76
مثال عملی spark – برنامه تطابق الگو در اسناد متنی (Pattern matching) با Scala 78
استخراج تعداد بازدید کنندگان از وبسایت بر اساس زمان بازدید با Log file 78
مثال عملی spark- نمونه برنامه متن کاوی با Scala 81
مهاجرت دایرکتوری hadoop به خارج از دایرکتوری کاربر root 83
pyspark (رابط برنامه نویسی با زبان pyton در محیط آپاچی اسپارک) 84
مثال عملی spark : ایجاد برنامه wordcount با pyspark به زبان python 85
دانلود و کار با بسته' ماشین مجازی آماده نیمه توزیعی hdp/spark 89
مثال عملی Spark Wordcount با بسته' ماشین مجازی آماده نیمه توزیعی hdp/spark 90
لینک دانلود بسته' ماشین مجازی آماده نیمه توزیعی hdp/spark 92

مقدمه
Big Dataدارایی هایی از جنس داده، با حجمی انبوه، روند تولید پرشتاب، با فرمتهای گوناگون و حاوی ارزش نهفته در درون خود هستند. این نوع از داده ها نیاز به روش های پردازشی تازه ای دارند تا تصمیم گیری بهتر، بینش تازه و ارزش آفرینی بیشتر را برای صاحبانشان به ارمغان آورند. رایانش خوشه ای یا کلاسترنوعی از سیستم های پردازش موازی و توزیع شده است، که متشکل از مجموعه ای از کامپیوترهای مستقل می باشد که در ارتباط تنگاتنگ با کل سیستم هستند و به عنوان یک منبع یکپارچه کار می کنند.
چارچوبهای پردازش خوشه ای مثل Apache Hadoop در اصل، برای بکارگیری در سرورهای لینوکس طراحی شده اند. برای ایجاد کلاسترهای پردازشی در محیط واقعی(Multi-Node Cluster) نیاز است که چند سرور فیزیکی لینوکس را شبکه نموده و یک چارچوب پردازش خوشه ای مثل Apache Hadoop را روی آنها پیکربندی و راه اندازی کنیم. زمانیکه قصد داریم ازچارچوبهای پردازشی Big data با اهداف تست،توسعه برنامه های کاربردی، آموزش و یادگیری استفاده کنیم لزوما" نیاز به راه اندازی کلاستر واقعی نداریم. اگر سیستم عامل ماشین ما ویندوز است، ضرورتی ندارد بطور فیزیکی سرور لینوکس نصب کنیم. به کمک فناوریهای مجازیسازی یک سرور مجازی لینوکس ایجاد و چارچوب پردازش خوشه ای را روی آن پیاده سازی کرده، برای فعالیتهای تحقیقاتی از آن بهره میبریم.
در مواردی که ابزاری با اهداف تست، پژوهش و توسعه یک کلاستر Hadoop یا Spark مورد نیاز باشد، دو روش برای راه اندازی وجود دارد: روش اول ، استفاده از بسته های آماده کلاستر مجازی است که توسط شرکت هایی مثل کلودرا و هورتون ورکز ارائه شده و دارای محدودیتهای زیادی است. از جمله اینکه تقریبا" همه' این شرکتها دسترسی کاربران ایرانی را تحریم کرده اند، دارای حجم بسیار بالایی هستند و احتیاج به سیستمی با حافظه رم نسبتا" بالا دارند.(حداقل 8 ، توصیه شده 16 گیگا بایت) دارند.
روش دوم که ما در این آموزش از آن استفاده کرده ایم راه اندازی دستی (Manual) کلاستر روی یک ماشین واحد، در حالت شبه توزیعی(Pseudo Distributed mode) است. چون در این روش، تمام مراحل پیکره بندی را خودمان انجام میدهیم ، این امکان وجود دارد که خصوصیات کلاستر را با توجه به موضوع در دست پژوهش و امکانات سخت افزاری که در اختیار داریم با انعطاف بیشتری سفارشی سازی کنیم.
مقاله آموزشی حاضر ، با توجه به نوپا بودن مفاهیم Big data و کمبود منابع کاربردی و محدودیت هایی که در پژوهشهای حوزه Big Data برای دانش پژوهان، در بکارگیری ابزارها و تبدیل دانش تئوری به یک پروژه هدفمند و کاربردی وجود دارد،تهیه گردیده و اهداف اصلی زیر را دنبال میکند:
الف) رویکرد اصلی که در این آموزش مد نظر قرار داده ایم، این است که هر فرد علاقمند به کار با مفاهیم big data بتواند با در دسترس ترین امکانات سخت افزاری و نرم افزاری مثل یک لپ تاپ یا PC معمولی ویندوز ، با صرف حداقل هزینه و در کوتاه ترین زمان ممکن ، مهارت ایجاد و کار با کلاستری را که برای اهداف تست و یادگیری نیاز دارد را شخصا" ایجاد نماید.روش کار این است که با نرم افزار مجازیسازی Vmware workstation در محیط ویندوز یک سرور مجازی لینوکس CentOs minimal ایجاد میکنیم، و کلاستر مجازی هدوپ را با معماری شبه توزیعی(Pseudo Distributed Mode) در بستر این سرور مجازی بصورت قدم بقدم راه اندازی میکنیم.در گام بعدی، به مراحل یکپارچه سازی چارچوب پردازشی Apache Spark با سیستم فایل توزیع شده هدوپ (HDFS) میپردزیم. بعد از راه اندازی کلاستر هدوپ/اسپارک با استفاده از چندین مثال و سناریوی عملی نحوه کار و مدیریت کلاستر پردازشی هدوپ/اسپارک ، از محیط ویندوز را با تمام جزئیات بصورت تصویری بهمراه بیش از 100 عکس از تک تک مراحل آموزش میدهیم.همانطور که میدانید چارچوب Hadoop از دولایه' اصلی فایل سیستم توزییع شده Hdfs و موتور پردازشی بر مبنای مدل پایه Map-reduce تشکیل شده. مدل پایه Map-reduce ضمن اینکه بعنوان مدل اصلی در پلتفرم هدوپ چند سال مورد استفاده قرار گرفته، همیشه بدلیل هزینه' زمانی و کندی در پردازش job های تکراری مورد انتقاده بوده. هدف اصلی از شکل گیری چارچوب پردازشی Apache Spark بعنوان یکی از زیر پروژه های هدوپ رفع این نقص بزرگ مدل پایه نگاشت-کاهش است.هسته اسپارک یک موتور پردازشی است و فاقد لایه' فایل سیستم و ذخیره سازی است. ولی اسپارک این کمبود را با انعطاف پذیری بالایی که در یکپارچه شدن با سایر فایل سیستمها و انواع پایگاههای داده خارجی دارد بنحو موثری جبران میکند. یکی از مزایای معماری تلفیقی ر این استفاده شده در این آموزش این است که در کار با مثالها، تفاوت پردازش مدل پایه map-reduce در هدوپ و همچنین زمانیکه موتور پردازشی اسپارک در تعامل با لایه hdfs هدوپ کار میکند را عملا" لمس خواهیم کرد.
پیشنیازهای سخت افزای و نرم افزاری برای پیکربندی دستی کلاستر Hadoop/spark :
1. لپ تاپ یا PC با سیستم عامل ویندوز 7+ ، ترجیحا" 64 بیتی (اگر از سیستم عامل 32 بیتی استفاده میکنید باید پیشنیازها را متناسب با سیستمهای 32 بیتی تهیه فرمایید.)
2. اتصال به اینترنت و امکان دانلود بسته های اینترنتی
3. حداقل GB4 حافظه رم داخلی و GB 10+ فضای خالی هارد
4. نصب نرم افزار Vmware workstation، ویرایش +8 در ویندوز
فایل ایمیج سیستم عامل لینوکس CentOs ورژن 6.5 – minimal
5. فایل فشرده باینریهای هدوپ (hadoop-2.7.2)
6. فایل فشرده باینریهای آپاچه اسپارک (spark-1.5.0-bin-custum-spark.tgz)
7. شبیه ساز ترمینال لینوکس در ویندوز (در آموزش از Cygwin استفاده شده ، نرم افزارهای مشابه مثل git bash ، Winscp ، … هم قابل استفاده است. )

ب) بدلایل زیادی ، برای اکثر ما کاربران ایرانی ، یک سیستم کامپیوتری مفهومی معادل یک PC با سیستم عامل ویندوز را در ذهن تداعی میکند . هر چند سعی شده هیچ نکته ای در آموزش از قلم نیفتد، اما چون ممکن است در آغاز، کار با دستورات محیط لینوکس برای پیکر بندی یک کلاستر پردازشی، با آزمون وخطا همراه بوده یا زمانبر باشد، لذا برای دسترسی همگانی بهمراه این آموزش، اقدام به ارائه ماشین مجازی آماده نیمه توزیعی هدوپ/ اسپارک ، با پیکربندی کامل نموده ایم و فایل فشرده آنرا در کتابخانه دیجیتالی شخصی آپلود و لینک دانلود آنرا (باحجم 1 گیگابایت) در متن مقاله به اشتراک گذاشته ایم . نرم افزارهای مورد نیاز را قبلا" دانلود و نصب کرده ایم. این ماشین مجازی احتیاج به هیچگونه تنظیمات و پیکربندی نداشته، در یک PC ویندوز 64 بیتی با امکانات معمولی و با نصب نرم افزار مجازیسازی Vmware ، و یک نرم افزار شبیه ساز ترمیال لینوکس مثل Cygwin یا رابط puttyآماده استفاده میباشد.ضمنا" دیتا ستهای بکار گرفته شده در این آموزش برای استفاده در فایل سیستم ماشین مجازی آماده موجود است.
لطفا" ویدئوی راه اندازی ماشین مجازی آماده هدوپ/اسپارک را از طریق لینک زیر مشاهده فرمایید.
http://www.aparat.com/v/omZV4

لینک دانلود ماشین مجازی آماده hdp/spark
https://drive.google.com/open?id=0B2nqVcv89GyEVlhmSUd2MVgzOTQ

نصب SSH و Cygwin
Hadoop معمولا بر روی ماشین هایی که از سیستم عامل لینوکس استفاده میکنند اجرا میشود و برای اینکه بتوانیم از آن در محیط ویندوز استفاده کنیم باید از ماشین مجازی استفاده کنیم که در این آموزش از ماشین مجازی Cygwin استفاده میشود. سیگوین مجموعه ای از ابزارهای نرم افزاری آزاد است که به نسخه های متفاوت از مایکروسافت ویندوز این امکان را می دهد که مانند سیستم عامل یونیکس عمل نمایند. تمرکز Cygwin انتقال نرم افزارهایی که بر روی سیستم عامل های بر پایه یونیکس (مانند لینوکس، بی اس دی) اجرا می شوند، است تا این نرم افزارها را بتوان در محیط سیستم عامل ویندوز نیز اجرا نمود.
برای نصب Cygwin ابتدا فابل نصب آن(نسخه 64 بیتی) را از سایت www.cygwin.com دانلود میکنیم . و سپس شروع به نصب مینماییم .

بعد از ظاهر شدن پنجره Choose Installation Type گزینه Install from Intenret را انتخاب میکنیم ( در صورتی که برنامه را قبلا نصب کرده باشیم و فایل های مورد نیاز را دانلود کرده باشیم میتوانیم دوباره از همان فایل ها استفاده کنیم و برای این کار گزینه Install from Local Directory را انتخاب میکنیم.) و سپس next را میزنیم.

، بعد از آن در صفحه بعد مسیر نصب را مشخص میکنیم که بهترین مسیر برای این کار همان مسیر پیشفرض است،

در صفحه بعد پوشه ای را برای فایل های نصب که میخواهیم دانلود کنیم انتخاب میکنیم.گزینه پیشفرض را انتخاب کرده. Next را میزنیم.
در صفحه بعد نوع اتصال برای دانلود پکیج ها را Direct Connection انتخاب میکنیم.

در صفحه بعد یکی از سایتهای لیست شده را برای دانلود انتخاب میکنیم.

در این مرحله ابزار راه اندازی سیگوین ( Setup tools Cygwin Base) دانلود خواهد شد.Next را میزنیم.

در پنجره Select Packages پکیج های مورد نیاز مان برای نصب را باید انتخاب کنیم. اولین پکیج مورد نیاز ما پکیج Default است. و ابزارهای مورد نیاز ما در دسته بندی Archive و Net قرار دارند که باید انتخاب شوند و در شکلهای زیر نشان داده شده اند، بعد از انتخاب آنها نصب را ادامه میدهیم و با کلیک روی Next بسته های انتخابی نصب میشوند.

.

نهایتا" با زدن Finish مراحل نصب کامل میشود.

بعد از نصب شبیه ساز آن روی آیکن آن در دسکتاپ راست کلیک کرده با انتخاب گزینه Run As Administor برنامه را اجرا میکنیم.

دستورت پرکاربرد در cygwin :
دستور pwd : مسیر جاری را نشان میدهد.مسیر پیشفرض: نام کابر جاری/home/ در سیستم ما کاربر جاری A-sh-ka-n است. بنابراین خروجی دستور بعد از اجرای اولیه نرم افزار بصورت home/ A-sh-ka-n / نمایش داده خواهد شد.که به مسیرC:/cygwin64/home/A-sh-ka-n در ماشین ویندوز اشاره دارد.

دستور ورود به درایوها و پوشه های ویندوز: نام پوشه/نام درایو cd
نکته : مسیر نام فایل/نام پوشه/نام درایو/ در ویندوز در محیط cygwin بصورت:
نام فایل /نام پوشه/نام درایو/cygdrive/ نمایش داده میشود.
دستور لیست کردن محتویات مسیر جاری: ls -altr

با اجرای دستور ssh صحت نصب پکیج open-ssh را تست میکنیم.

و سپس دستورات زیر را به ترتیب اجرا میکنیم :

$ chmod +r /etc/passwd
$ chmod u+w /etc/passwd
$ chmod +r /etc/group
$ chmod u+w /etc/group
$ chmod 755 /var

سپس باید SSH را بر روی سیستم پیکره بندی کنیم برای این کار از دستورات زیر استفاده میکنیم:

$ ssh-host-config
سپس طبق تصویر صفحه بعد به سوالات پرسیده شده جواب میدهیم :

بعد از پیکره بندی SSH در لیست سرویس های ویندوز(پنجره services ) سرویس sshd با نام CYGWIN sshd قابل مشاهده است ، برو روی آن کلیک میکنیم و سپس start را میزنیم .
حالا باید کلید های خصوصی و عمومی را تولید کنیم ، برای این کار دستور ssh‐keygen را اجرا میکنیم و در جواب سوال هایی که پرسیده میشود فقط کلید enter را میزنیم مانند شکل زیر :

بعد از اینکه کلید ها را تولید کردیم باید کلید عمومی تولید شده را کپی کرده و یک authorized key در ماشین slave تعیین کنیم . در حال حاظر چون ما فقط از یک سیستم استفاده میکنیم از دستور زیر در خط فرمان Cygwin استفاده میکنیم :

با دستور ssh localhost به سیستم local از طریق SSh متصل میشویم.

ایجاد ماشین مجازی لینوکس CentOs 6.5 minimal با VMware workstation در ویندوز
لینک دانلود VMware workstation pro نسخه ویندوز:
https://soft98.ir/os/virtual-machine/1232-vmware-workstation.html
نرم افزار مجازیسازی VMware workstation را اجرا کرده، از نوار منو، تب File گزینه New vitual machine را انتخاب میکنیم.پنجره' New virtual machin Wizard ، برای ایجاد مرحله به مرحله ظاهر میشود. در اولین پنجره گزینه' Typical را انتخاب کرده، دکمه Next را میزنیم.(شکل زیر)

در پنجره بعدی دکمه Next را میزنیم

در پنجره بعدی، گزینه Iwill Install the operating system later باید انتخاب شود.

در پنجره Select a Guest Operating System نوع سیستم عامل Linux و ورژن آنرا CentOS 64-bit انتخاب میکنیم..

در پنجره Name the Virtual Machine نامی دلخواه را برای ماشین مجازی تایپ میکنیم.

پس از ایجاد ماشین مجازی ، در پنجره اصلی برنامه، گزینه Edit Virtual Machine Setting را برای تنظیمات تکمیلی انتخاب میکنیم.

آدرس دهی فایل ایمیج لینوکس CentOS :
در پنجره Virtual Machine Setting تب Hardwareگزینه' CD/DVDرا از سمت چپ انتخب میکنیم.در کادر "درخت ذخیره ساز" روی آیکون مشخص شده در شکل زیر کلیک کرده،سپس در بخش سمت راست صفحه بخش Connection دکمه رادیویی گزینه Use ISO image file را فعال کرده روی دکمه Brows کلیک میکنیم، پنجره جدیدی برای مسیر دهی به فایل ایمیج لینوکس CentOS باز میشود.مطابق شکل زیر، در پنجره' جدید مسیری را که فایل ایمیج لینوکس CentOS بنام:
CentOS-6.5-x86_64-minimal.iso
را ذخیره کرده ایم آدرسدهی میکنیم.

در پنجره اصلی روی گزینه Power on this Virtual Machine برای راه اندازی کلیک میکنیم.در موارد معدودی ممکن است باخطایی مشابه شکل زیر مواجه شوید، بدین معنی است که تکنولوژی مجازیسازی در سیستم شما فعال نیست. نحوه فعالسازی مجازی سازی را میتوانید در لینک زیر مشاهده فرمایید.
http://tezino.ir/%D8%A2%D9%85%D9%88%D8%B2%D8%B4-%D9%81%D8%B9%D8%A7%D9%84-%D8%B3%D8%A7%D8%B2%DB%8C-%D8%AD%D8%A7%D9%84%D8%AA-virtualization-%D8%A8%D8%A7%DB%8C%D9%88%D8%B3/

نکته: در مراحل مختلف شبیه سازی، شاید نیاز شود که به دفعات ، کنترل برنامه را از ماشین میزبان به میهمان مجازی و بالعکس تغییر دهیم(بین دو محیط سوییچ کنیم) . با کلیک درفضای ماشین مجازی در VMware ، کنترل برنامه از ماشین محلی میزبان(ویندوز) ، به ماشین مجازی میهمان(لینوکس) منتقل و اشاره گر ماوس و کلیدهای کیبورد برای استفاده ، در محیط ماشین مجازی فعال خواهد شد. برای بازگرداندن کنترل برنامه به محیط ویندوز از کلیدهای ترکیبی Alt+Ctrl (کلید Ctrl و Alt سمت چپ کیبورد) که در اصطلاح مجازیسازی به آن Hot Key گفته میشود، میتوانیم استفاده کنیم.
بعد از چند لحظه، صفحه' خوش آمدگویی برای نصب سیستم عامل CentOs ظاهر میشود.
در این مرحله ، گزینه های متعددی برای نصب و تست حافظه، لیست شده است.
ما قصد نداریم، از گزینه های لیست شده استفاده کنیم.
بلکه میخواهیم ماشین CentOS را با استفاده از دستور text export که سیستم عامل را بدون رابط گرافیگی پیکربندی میکند نصب کنیم.
کلید tab از صفحه کلید را میفشاریم، سپس عبارت text export را تایپ کرده و کلید Enter را برای اجرای دستور میزنیم.

فایل ایمیج برای نصب سیستم عامل لینوکس CentOS در محیط مجازی شده شروع به بارگذاری میکند.

در پنجره ای که ظاهر میشود(شکل زیر)، از کاربر سئوال شده که آیا قصد دارد رسانه ها ، قبل از عملیات نصب، توسط برنامه' Setupتست شود یا نه.با فشردن کلید تب میتوانیم بین گزینه های ارائه شده(OK – Skip) سوئیچ کنیم. با فشردن کلید Enter و یا Space از صفحه کلید، گزینه ای که روی آن سوئیچ شده، انتخاب و اجرا شده و به صفحه' بعدی منتقل میشویم.تست مدیای نصب بسیار زمانبر است و در صورتیکه فایل ایمیج سالم باشد ، عملیات تست ضرورتی ندارد . لذا، با کلید tab از صفحه کلید ، روی گزینه' Skip سوئیچ کرده و کلید Enter را میزنیم.

دو پنجره بعدی را با انخاب گزینه OK تایید میکنیم.

در پنجره بعدی ، زبان مورد نظر ،حین نصب برنامه را که بصورت پیشفرض انگلیسی است، تایید میکنیم.

در پنجره بعدی، گزینه' Re-initialize all"" را انتخاب میکنیم.

پنجره بعدی، انتخاب منطقه زمانی است، منطقه زمانی را به دلخواه انتخاب میکنیم.

در پنجره انتخاب کیبورد گزینه US را انتخاب میکنیم.

تعیین گذرواژه کاربر root
تنظیمات پنجره بعدی(Root password) مهم است ، باید پسورد کاربر root را تعیین کنیم.(حداقل 6 کاراکتر). این پسورد در اولین لاگین بعد از نصب و هر بار که قصد لاگین بعنوان کاربر ریشه را به ماشین مجازی داریم از ما سئوال خواهد شد.تنها کاربری که میتواند پیکربندی بعدی و تنظیمات کاربران و مجوزهای دسترسی را ایجاد و ویرایش کند، کاربر ریشه است. بنابراین باید پسوردی انتخاب کنیم که همیشه در خاطرمان بماند و در یادآوری آن با مشکل مواجه نشویم. در غیر اینصورت ، سیستم امنیتی قوی لینوکس بهیچ وجه اجازه' لاگین اولیه را در صورت اشتباه وارد کردن پسورد root بما نخواه داد و ناچار خواهیم بود فرایند نصب را تکرار کنیم.

اگر در تعیین گذر واژه از کاراکترهای ترکیبی بصورت همزمان استفاده نشود ،ممکن است با اخطار نا امن بودن پسوورد (Weak Password)مواجه شویم، برای ادامه با همین پسورد میتوانیم گزینه Use Anyway را انتخاب کنیم.

در پنجره بعدی ، باید دو مرحله تنظیم انجام دهیم ،
گزینه اول تنظیم اطلاعات پارتیشن بندی است، انتخاب گزینه Replace Existing Linux system را توصیه میکنیم. اما گزینه Use entire drive هم میتواند انتخاب شود. با دکمه های جهتی گزینه Replace Existing Linux system ، انتخاب کرده، . با کلید tab به سئوال دوم سوییچ کرده، گزینه sda سوییچ را با کلید Space انتخاب میکنیم. مجددا" با کلید tab روی دکمه OK سوییچ کرده با زدن Enter تنظیمات را اعمال میکنیم.(شکل زیر)

برای شروع مراحل نصب ، در صفحه بعد گزینه Write Change to disc را انتخاب میکنیم.
صبر میکنیم مراحل نصب کامل شود …

زمانیکه فرایند نصب تکمیل شود، پنجره ای ظاهر شده، پیام Compelete نشان داده میشود و برای بالا آمدن سیستم عامل ،درخواست Rebootمیکند. با فشردن کلید Enter ماشین مجازی Reboot شود.
.

پس از چند لحظه، صفحه لاگین به نمایش درمی آید. در این مرحله با یوزر root و پسوردی که در حین مراحل نصب تعیین کرده بودیم، به ماشین مجازی لاگین میکنیم. توجه کنیم که بدلایل تدابیر امنیتی ، هنگام تایپ پسورد، کاراکترها نمایش داده نمیشود.
مشاهده مشخصات اینترفیسهای ماشین مجازی:
استخراج IP آدرس اینترفیسهای اترنت ماشین مجازی مهم است. چون در مراحل بعدی، به آن نیاز خواهیم داشت. دستور ifconfig -a یکی از دستورات اصلی مدیریت اینترفیسها در محیط لینوکس است. این دستور را در خط فرمان تایپ کرده، برای اجرای آن کلید Enter را میفشاریم.همانطور در شکل زیر دیده میشود اینترفیس اترنت صفر ماشین مجازی(eth0) فاقد هرگونه IP آدرس است. اولین کاری که باید انجام دهیم پیکربندی اصولی پارامترها برای عملکرد صحیح ارتباطات شبکه در ماشین مجازی است.

کار با ویرایشگر متنی vi در لینوکس:
برای ویرایش فایلها با ویرایشگر vi از دو مد اصلی استفاده میشود:
مد insert : این مد پس از باز کردن محتویات فایل با ویرایشگر vi و فشردن کلید insert از صفحه کلید (زمانی که کنترل برنامه در محیط ماشین مجازی است) ، فعال میشود. در این مد نشانگر ماوس فعال شده و با استفاده از کلیدهای جهتی در صفحه کلید میتوان بین خطوط و کارکترها حرکت و متن جدید اضافه ، یا حذف کرد.
مد escape : با فشار کلید esc از صفحه کلید فعال میشود، برای ، و خروج از مد insert استفاده میشود. برای اعمال اولیه تغییرات و ذخیره' فایل بعد از عملیات ویرایش، و خروج از محیط ویرایشگر باید این مد را فعال کنیم.
پیکر بندی شبکه ماشین مجازی :
پیکربندی ویژگیهای کلی شبکه، در مسیر /etc/sysconfig و در فایل network قابل تنظیم است. با وارد کردن دو دستور زیر در ترمینال لینوکس ابتدا با اجرای اولین دستور وارد مسیر /etc/sysconfig شده ، با دستور دوم فایل network را با ویرایشگر پیشفرض vi برای ویرایش باز میکنیم.بدیهی است که برای اجرای دستورات بعد از وارد کردن هر دستور باید کلید Enter را بزنیم.
cd /etc/sysconfig
vi network

محتویات پیشفرض فایل network مطابق شکل زیر است. در این فایل ابتدا بایستی Gateway برای شبکه تعریف کنیم.و HOSTNAME (نام ماشین مجازی) را ویرایش کنیم.

تعیین آدرس Gatway در ماشین مجازی CentOS :
برای تعیین IP آدرس مناسب برای Gatway نیاز است ابتدا، IP آدرس کارت شبکه مجازی نرم افزار VMware را استخراج کنیم .دلیلش این است که Gatway بایستی در رنج IP آدرس کارت شبکه مجازی تعریف شود.
IP آدرس کارت شبکه مجازی هنگام نصب نرم افزار VMware Workstation ، بصورت تصادفی اختصاص داده میشود. VMware بصورت پیشفرض دو کارت شبکه مجازی از نوع اترنت بنامهای Vmnet1 و Vmnet8 در ویندوز ایجاد میکند. کارت شبکه ی مجازی default ، Vmnet8 است، بنابراین ما باید IP آدرس Vmware adapter Vmnet8 را بدست بیاوریم.برای استخراج ویژگیهای کارتهای شبکه در محیط Windows ، میتوان از دستور ipconfing در خط فرمان Command prompt ویندوز استفاده کرد.پس چون در حال حاضر در محیط ماشین مجازس هستیم، ابتدا با کلیدهای Ctrl+Alt کنترل را از ماشین مجازی به محیط ویندوزمنتقل میکنیم، سپس cmd را اجرا میکنیم، سپس با اجرای دستور ipconfing در cmd ویندوز IP مربوط به Vmnet8 را پیدا میکنیم. همانطور که در شکل زیر میبینیم، در شبیه سازی نمونه که ما انجام داده ایم ، IP کارت شبکه Vmware adapter Vmnet8 برابر با 192.168.24.1 میباشد.

نکته : توجه کنیم که بدلیل اختصاص تصادفی، این IP در سیستمهای مختلف معمولا" متفاوت است، وحتی با حذف و نصب مجدد نرم افزار Vmware در یک سیستم واحد هم در اغلب موارد تغییر میکند.لذا IP بدست آمده در پژوهش حاضر نباید بعنوان یک معیار کلی در همه کامپیوترها در نظر گرفته شود.
اگر الگوی کلی IP آدرس Vmnet8 را xxx.xxx.xxx.1 در نظر بگیریم ، بهترین الگویی که میتوان در این شبکه برای تعریف IP Address Gateway پیشنهاد کرد، میتواند xxx.xxx.xxx.2 باشد.
میخواهیم Ip آدرس 192.168.24.2 (که در رنج IP آدرس Vmnet8 در سیستم بکار گرفته شده در این پژوهش است) را بعنوان Ip آدرس Gatway شبکه ، به فایل network ماشین CentOS اضافه کنیم.
کنترل را به محیط ماشین مجازی CentOS منتقل میکنیم، به متن فایل network در محیط ویرایشگر vi رفته، مد insert را فعال کرده و دستور زیر را برای تعریف Gareway به متن فایل network اضافه میکنیم.
GATEWAY=192.168.24.2

در فایل network نام ماشین بصورت پیشفرض localhost.localdomain تعریف شده، در مرحله بعدی ، میخواهیم یک HOSTNAME دلخواه با قالب URL FQDN برای ماشین مجازی تعریف کنیم.
الگوی تعریف URL با فرمت FQDN بصورت زیر است:
حوزه فعالیت.نام دپارتمان.نام سرور
myserver.security.com :مثال

در این پژوهش ما hdp.its.com را بعنوان HOSTNAME FQDN در نظر گرفته ایم . کاربردهای HOSTNAME FQDN و استفاده ی عملی از آن را در مراحل بعدی همین پژوهش خواهیم دید.
متن نهایی ویرایش شده فایل network در سیستم مورد استفاده در این پژوهش بصورت زیر خواهد بود. .(شکل زیر)
NETWORKING=yes
GATEWAY=192.168.24.2
HOSTNAME=hdp.its.com

با فشردن کلید esc وارد مد escape شده با تایپ عبارت 😡 و سپس زدن کلید Enter ، تغییرات را ذخیره و از محیط ویرایشگر vi خارج میشویم.

پیکربندی اینترفیس اترنت ماشین مجازی CentOS
در مرحله بعدی ، میخواهیم اینترفیس eth0 از ماشین CentOS را کانفیگ کنیم.بطور خلاصه کارهایی را باید انجام دهیم از این قرار است:
* تغییر پروتکل اخصاص IP از روش پویا(dynamic) به روش ایستا(static)
* اختصاص IP static و subnet mask به اینترفیس eth0
یک اصل کلی در اختصاص IP در شبکه کامپیوتری این است که IP سرورها باید بصورت ایستا و دستی پیکربندی شود. روش اختصاص IP بصورت پیشفرض پویا تعریف شده.در روش پویا، IP توسط سرور dhcp و بطور تصادفی تخصیص داده میشود، و با خاموش و روشن کردن سرور ممکن است تغییر کند.این مسئله از نظر امنیتی ، دسترسی و اتصال به سرور از راه دور و مدیریت مجوزهای دسترسی کاربران اختلال ایجاد خواهد کرد.بنابراین باید IP پورت eth0 را پیکربندی کنیم.فایل پیکربندی eth0 بنام ifcfg-eth0 در مسیر /etc/sysconfig/network-scrips قرار دارد. در حال حاضر در دایرکتوری sysconfig قرار داریم . بنابراین با دستورات زیر در ترمینال ، مسیر جاری را به network-scrips تغییر میدهیم و با ویرایشگر vi فایل ifcfg-eth0 را باز میکنیم.
cd network-scrips
vi ifcfg-eth0

محتویات فایل ifcfg-eth0 مشابه شکل زیر است.

با ویرایشگر vi فایل ifcfg-eth0 را به صورت زیر ویرایش کرده ایم.

DEVICE=eth0
IPADDR=192.168.24.100
NETMASK=255.255.255.0
BOOTPROTO=static

نکته: توجه کنیم که IP تعیین شده باید در رنج Vmnet8 باشد. اکتاو پایانی IP مقداری بین 3 الی 224 باشد.( IP با اکتاو پایانی 1 آدرس کارت شبکه Vmnet8 ، IP با اکتاو پایانی 2 آدرس Gateway و IP با اکتاو پایانی 255 آدرس پخش همگانی در شبکه است. ما اکتاو پایانی را 100 انتخاب کرده ایم)

بعد از ویرایش و ذخیره تغییرات ، فایل ifcfg-eth0 را بسته و از ویرایشگر خارج میشویم.
برای اعمال تغییرات پیکربندی شبکه دستور زیر را اجرا میکنیم.
service network restart

حالا مجددا" برای بررسی صحت تغییرات اعمال شده دستور ifconfig -a را دوباره اجرا میکنیم. همانطور که در شکل زیر دیده میشود، به eth0 آی پی مورد نظر ما تخصیص یافته است.

برای اینکه برقراری اتصال بین ماشین محلی ویندوز و ماشین مجازی را تست کنیم ، کنترل را به محیط ویندوز منتقل کرده، از خط فرمان ویندوز (Command Prompt) به IP ماشین مجازی ping میکنیم.
هماطور که در شکل زیر میبینیم، خروجی دستور ping برقرای اتصال بین دو ماشین را تایید میکند. در واقع با این اتصال ما یک شبکه مجازی دو گره متشکل از ماشین محلی ویندوز و سرور مجازی لینوکس ایجاد کرده ایم.

برقراری اتصال ssh از محیط ویندوز به ماشین لینوکس با ترمینال شبیه ساز Cygwin :
روی آیکون Cygwin در دسکتاپ راست کلیک کرده، بعنوان Administrator برنامه را اجرا میکنیم. با دستور زیر یک Connection با پروتکل امن ssh به دایرکتوری home/ کاربر ریشه در ماشین مجازی میزنیم. سئوال سیستم را با yes پاسخ میدهیم.
(یادآوری میکنیم که lp ماشین مجازی در سیستمهای مختلف متفاوت است .)
ssh root@192.168.24.100
همانطور که در شکل زیر مشهود است، خط فرمان Cygwin به [root@localhost ~]# تبدیل میشود. این بدین معناست که از ماشین ویندوز به ترمینال ماشین مجازی لینوکس وصل شده ایم و میتوانیم با مجوزهای کاربر root آنرا از راه دور پیکربندی و مدیریت کنیم. از مزایای دیگر این اتصال برای ما این است که دیگر لزومی ندارد برای انتقال کنترل برنامه بین محیطهای دو ماشین مرتبا" سوییچ انجام دهیم. بعلاوه دستورات را میتوانیم در ویندوز کپی و در رابط سیگوین paste و در ماشین مجازی اعمال کنیم ،که این امر در محیط نرم افزار مجازیسازی مقدور نیست.
این فرایند دقیقا" مشابه شبکه ای در محیط واقعی است. با این تفاوت که در محیط واقعی سرور راه دور یک ماشین فیزیکی مستقل است. در حالیکه در این شبیه سازی ما همین فرایند را با ابزار شبیه ساز Vmware Workstation و با منابع سخت افزاری و نرم افزاری یک ماشین واحد ویندوز Simulate کرده ایم.

بروز رسانی فایل hosts در ویندوز و اختصاص نام مستعار برای IP آدرس ماشین لینوکس:
فرض میکنیم در یک شبکه تعداد زیادی host داریم ، هرکدام از این ماشینها یک IP منحصر بفرد دارند و در دپارتمانهای مختلف سازمان پخش شده اند. شما مثلا" بعنوان مدیربخش IT باید همه' این گره ها را مدیریت کنید. مسلما" وقتی تعداد ماشینها زیاد باشد بخاطر سپردن IP آدرس تک تک آنها مشکل خواهد بود. در چنین مواردی میتوانیم در فایل hosts از ماشینی که به آن متصل هستیم با توجه به آدرس هر ماشین برای آن نام مستعار (Alias) تعریف کنید . در این صورت با استفاده از Alias میتوانید بدون نیاز به آدرس ماشینها به آنها متصل شوید.
میخواهیم برای ماشین مجازی Centos که ایجاد کرده ایم ، در ماشین محلی ویندوز نام مستعار تعریف کنیم. با فرض اینکه سیستم عامل ویندوز در درایو C نصب شده ، باید به مسیر زیر برویم.
C:WindowsSystem32driversetc

در مسیر بالا و در پوشه etc فایلی بنام hosts وجود دارد که باید ویرایش کنیم. برای اینکار باید مجوز Administrator داشته باشیم. روی فایل راست کلیک میکنیم و آنرا با یک ویرایشگر متن مثل Notepad باز میکنیم. در مرحله پیکربندی فایل network ماشین HOSTNAME از localhost.localdomain بهhdp.its.com
تغییر داده بودیم . حالا میخواهیم برای ماشین مجازی نام hdp را تعریف کنیم. مطابق شکل زیر ، در یک سطر جدید از فایل hosts ابتدا IP ماشین مجازی لینوکس و بعد از چند space نام مستعار hdp را اضافه کرده، تغییرات را save میکنیم.

اول از cmd ویندوز با نام مستعار hdp ، بدون اشاره به IP آدرس ، از ماشین مجازی ping میگیریم.
ping hdp
به hdp پینگ داریم. (شکل زیر)

حالا در ترمینال cygwin با کلیدهای ترکیبی Ctrl+C اتصال ssh را بسته و به خط فرمان ویندوز در cygwin برمیگردیم و از hdp پینگ میگیریم. پینگ داریم.(شکل زیر)

اینبار با دستور زیر با نام مستعار hdp از ترمینال cygwin بدون قید کردن IP به ماشین لینوکس ssh میزنیم.
ssh root@hdp
اتصال ssh با موفقیت برقرار میشود. (شکل زیر)

تنظیمات دسترسی به اینرنت در ماشین مجازی Centos
میخواهیم اتصال ماشین مجازی با اینترنت را برقرار کنیم.برای بررسی وضعیت اتصال اینترنت در Centos VM از سایت گوگل ping میگیریم.
ping www.google.com

همانطور که در شکل زیر مشخص است با اولین ping مشخص است که در VM اتصال اینترنت نداریم.در مراحل قبلی در تنظیمات فایل network برای ماشین مجازی Gateway IP Address تعریف کردیم. الگویی که برای این IP در نظر گرفتیم xxx.xxx.xxx.2 بود و در سیستم مورد استفاده در این آموزش این آدرس را 192.168.24.2 تعریف کردیم.کاری که برای برقراری اتصال VM به اینترنت باید انجام بدهیم به شرح زیر است.
* در دایرکتوری /etc ماشین مجازی فایلی با نام resolv.conf ایجاد میکنیم.
* IP آدرس Gateway را بعنوان DNS با دستور echo به فایل resolv.conf اضافه میکنیم.
دستور آن بشرح زیر است.
echo "nameserver 192.168.24.2" >> /etc/resolv.conf

* همانطور که در شکل زیر میبینیم، بعد از اجرای دستور بالا ping دوم به سایت گوگل برقراری اتصال VM به اینترنت را تایید میکند.برای جلوگیری از ادامه ping های مکرر از کلید ترکیبی Ctrl+C استفاده میکنیم.

دانلود و نصب مستقیم نرم افزارهای مورد نیاز از اینترنت در VM CentOS
java-openjdk ویرایش متن باز چارچوب توسعه جاواست. Jdk نسخه 7 و بالاتر سکوی اصلی برای راه اندازی کلاستر Hadoop و اسپارک محسوب میشود. wget ابزاری سودمند برای دانلود بسته های نرم افزاری در سیستم عاملهای مبتنی بر لینوکس است. nano ویرایشگر متنی است که قابلیتهای عملکردی بالاتری نسبت به ویرایشگر پیشفرض vi دارد. پرل یکی از زبانهای برنامه نویسی سطح بالا ، همه منظوره ، دارای مفسر و دینامیک است. نرم افزاری که با زبان پرل تحت سیستم عامل لینوکس و یا مک اواس نوشته شده، روی سیستم عامل مایکروسافت ویندوز و یونیکس هم اجرا می شود. قابلیت چندسکویی امکان توسعه نرم افزار را بر روی هر سیستم عاملی فراهم می کند. میخواهیم jdk -perl – nano -wget را با دستور yum روی ماشین مجازی Centos با یک دستور دانلود و نصب نماییم.
نکته: بیشتر آنتی ویروسهای تحت ویندوز برخی از وبسایتهای مرجع دانلود مبتنی بر لینوکس را بلاک میکنند، این در حالیست که این وبسایتها از نظر امنیتی جزو امن ترین و سالم ترین منابع آنلاین هستند. توصیه اکید داریم قبل از اجرای دستور زیر نرم افزار آنتی ویروس ویندوز سیستم خود را بطور موقت غیر فعال کنید، تا در اتصال ماشین مجازی به وبسایتهای مرجع دانلود اختلال و خطا ایجاد نشود.
تذکر : ابزار open-ssh در اکثر ایمیجهای CenOS-6.5-minimal و CenOS-6.6-minimal از قبل فعال است. معهذا قبل از اجرای دستور زیر دستور ssh را برای تست اجرا کنید. در صورت برخورد با هرگونه خطا open-ssh را به لیست ابزارها در دستور زیر اضافه کنید.
تذکر: اگر در اجرای دستور ماشین مجازی بهر دلیلی موفق به برقراری اتصال با وبسایت مرجع دانلود نشد، کلید -y را از دستور زیر حذف کنید و مجددا" اجرا نمایید. در بدون نیاز به پاسخ تایید همه سرورهای اصلی و کمکی برای دانلود جستجو خواهد شد.
yum -y install wget java-1.8.0-openjdk nano perl

صبر میکنیم عملیات دانلود و نصب تمام شود و پیام compelete! نمایش داده شود.

صحت نصب جاوا jdk را با دستور java -version تست میکنیم.

فایروال و جداول فیلترینگ Ip
SELinux سیاست های امنیتی شدیدی برای اینکه کدام کابران ، گروه ها یا برنامه ها میتواند به کدام اجزا دسترسی داشته باشند اعمال میکند.
SELinux در مورد برنامه ها و پردازش های سیستم عامل بسیار سخت گیر است، پیکربندی آن تخصصی است ،لذا عملا" بسیاری از پلتفرمها و نرم افزارها برای نصب احتیاج به غیر فعال کردن SELinux دارند .
iptablesNetfilter فایروال محلی سیستم عامل لینوکس می باشد که در لایه کرنل عمل می کند و از جداول IP برای کنترل ، مدیریت و فیلتر کردن پکت ها بر روی IPv4 و IPv6 استفاده می شود.فعال بودن SELinux و iptablesNetfilter در صورتیکه بطور حرفه ای کانفیگ نشود ،میتواند اختلالات جدی در ارتباطات شبکه ایجاد کند.
غیرفعال کردن SELinux
فایل پیکربندی SELinux بنام config در مسیر /etc/selinux قراردارد. با دستور زیر به این مسیر رفته ، فایل config را با ویراشگر nano باز میکنیم.

nano /etc/selinux/config

قطعه کد SELINUX=enforcing را به SELINUX=disabled تغییر میدهیم. برای ذخیره در ویرایشگر nano ابتدا کلید ترکیبی Ctrl+x را زده و برای تایید و خروج از ویرایشگر حرف y را تایپ کرده، Enter را میزنیم.

تعیین نام مستعار برای IP آدرس در ماشین مجازی CentOS
در مراحل قبل به IP ماشین مجازی در ماشین محلی ویندوز نام مستعار تعریف کرده بودیم. این عملیات را باید در فایل hosts ماشین مجازی هم انجام دهیم. فایل hosts در دایرکتوری /etc قرار دارد.این فایل را با ویرایشگر nano باز نموده ،
nano /etc/hosts

در سطری جدید خط زیر را به این فایل اضافه کرده، تغییرات را ذخیره و از ویرایشگر خارج میشویم.
192.168.24.100 hdp.its.com hdp

حالا، با دستور init 6 ماشین مجازی را برای اعمال تغییرات restart میکنیم، بعد از ریستارت شدن VM در محیط ویندوز و از ترمینال cygwin با استفاده از نام مستعار به ماشین مجازی ssh میزنیم.
اتصال ماشین محلی و VM با استفاده از alias تعیین شده برقرار است.(شکل زیر)
ssh root@hdp

غیر فعال کردن فیلترینگ جداول IP
با دستورات زیر فایروال و فیلترینگ جداول IP را غیر فعال میکنیم.
chkconfig iptables off
service iptables stop

با دستور زیر غیر فعال شدن فایروال را تست میکنیم:
service iptables status

انتقال فایل از ماشین محلی ویندوز به CentOS VM
میخواهیم فایل فشرده باینری نصب هادوپ نسخه 2.7.2 را به دایرکتوری /home کاربر root در در ماشین مجازی انتقال دهیم. قبل از فایل فشرده Hadoop را به پوشه محلی کاربر سیگوین در ویندوز کپی کنیم.

حال در ترمینال cygwin با دستور exit از خط فرمان ماشین مجازی خارج شده و به خط فرمان محیط ویندوز در cygwin باز میگردیم سپس با دستور زیر عملیات انتقال را انجام میدهیم.
scp ~/hadoop-2.7.2.tar.gz root@hdp:~
با وارد کردن پسورد کاربر root در ماشین مجازی عملیات انتقال انجام میشود.

تنظیم passwordless login بین ماشین ویندوز و VM
باید فایل id_rsa.pub را که در پوشه .ssh کاربر cygwin در ویندوز و در مسیر:
C:cygwin64homeA-sh-ka-n.ssh
قرار دارد را به دایرکتوری ssh. در ماشین مجازی CentOS کپی کنیم.ابتدا فایل را از محیط ویندوز به دایرکتورکتوری کاربر root ماشین مجازی ارسال میکنیم.
scp ~/.ssh/id_rsa.pub root@hdp:~

سپس به ماشین مجازی ssh میزنیم.با دستور ssh و scp فعال بودن open-ssh را در ماشین مجازی تست میکنیم.

نکته: اگر در خروجی دستور sshو یا scp با خطا مواجه شویم ، به این معنی است که open-ssh در VM فعال نیست و باید به روشی که قبلا" هم توضیح داده شد آنرا دانلود و نصب کنیم.مجددا" این دستور را یادآوری میکنیم:
yum install open-ssh

در ادامه بررسی میکنیم که دایرکتوری .ssh درحال حاضر در VM موجود است یا نه:
ls -altr

اگر فایل دایرکتوری .ssh را مطابق شکل بالا در لیست دایرکتوریها موجود باشد، ابتدا با دستور زیر آنرا حذف میکنیم(دلیل وجود دایرکتوری .ssh در شکل بالا این است که مرحله لاگین بدون پسوردرا قبلا" در این VM انجام داده ایم .لذا در راه اندازی اولیه معمولا" نیازی به اجرای دستور زیر نیست):
rm -rf .ssh

در مرحله بعد باید دایرکتوری جدید ssh. را در ماشین مجازی ایجاد کرده، مجوز دسترسی به این پوشه را تعیین کنیم ، سپس فایل id_rsa.pub که از ویندوز منتقل کرده بودیم و حاوی کلید عمومی sshمیباشد را به فایل authorized_keys در دایرکتوری .ssh ماشین مجازی منتقل کنیم.دستورات آن بشرح زیر است.
mkdir .ssh ; chmod 700 .ssh
cat id_rsa.pub >> .ssh/authorized_keys

با دستور exit از خط فرمان VM خارج شده، از ترمینال cygwin در ویندوز به ماشین مجازی ssh میزنیم. همانطور که میبینیم، با موفقیت و بدون تقاضای password به VM لاگین میکنیم.(شکل زیر)

تنظیم passwordless login در خود ماشین مجازی CentOS:
چون در مراحل بعدی کار پس از کامل شدن پیکربندی هادوپ، هنگام راه اندازی سرویسهای هادوپ مثل namenode ، datanode و yarn باید امکان برقراری اتصال sshبا localhost در ماشین مجازی فعال مقدور باشد، ابتدا در ماشین مجازی با دستور ssh-keygen کلید ssh تولید میکنیم.مطابق شکل زیر 3 سئوال پرسیده میشود که نیازی به پاسخ نیست، با زدن Enter گزینه های پیشفرض سیستم را تایید میکنیم.

با دستور زیر کلید عمومی که تولید میشود را به لیست کلیدهای عمومی در فایل authorized_keys که در مرحله قبل ایجاد کردیم اضافه کرده،
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
سپس به localhost خود ماشین مجازی ssh میزنیم:
ssh root@localhost
در اولین اتصال به localhost سئوال سیستم را با yes پاسخ میدهیم.

با اجرای دستور exit ابتدا اتصال ssh به localhost را قطع میکنیم. با اجرای مجدد دستور exit از ترمینال ماشین مجازی hdp خارج شده و به ترمینال cygwin در ویندوز برمیگردیم.
فایل فشرده باینری نصب Apache Spark که ما در این پژوهش استفاده میکنیم
spark-1.5.0-bin-custom-spark.tgz
نام دارد، این فایل را بعد از دانلود به پوشه home کاربر cygwin در ویندوز منتقل و به با دستور زیر به دایرکتوری کاربر root در ماشین مجازی hdp منتقل میکنیم :
scp ~/spark-1.5.0-bin-custom-spark.tgz root@hdp:~

ممکن است در ظاهر بنظر برسد تا این مرحله اقدام عملی مستقیمی برای نصب هادوپ و اسپارک انجام نداده ایم، تا کنون در کلیه کارها و تنظیماتی که انجام دادیم ، هدف ما این بود که مناسبترین بستر و زیرساخت را برای راه اندازی کلاستر hadoop ایجاد کنیم. این مهمترین و پایه ای ترین مرحله برای راه اندازی هادوپ و اسپارک است .به تجربه بما ثابت شده است دلیل اصلی اکثر مشکلاتی که در راه اندازی ابزارها و چارچوبهای big data مثل هادوپ و اسپارک رخ میدهد ، بیشتر از اینکه مربوط به پیکربندی اجزای داخلی آن پلتفرم باشد، مربوط به آماده نبودن بستری است که ابزارها روی آن سوار میشوند.
حالا با مفاهیم زیادی مثل مجازی سازی سرور، ساختار و دستورات اولیه لینوکس، ویرایش فایلها ، انتقال فایلها تا حدودی آشنا شده ایم و این امر کمک زیادی به ما در مراحل بعدی که پیاده سازی و پیکربندی اصولی کلاستر هادوپ و اسپارک خواهد کرد.
هر چند تمرکز ما در این پژوهش بیشتر اهداف پیادی سازی و بکارگیری عملی ابزارهای داده های بزرگ در جهت ابجاد اصولی کلاستر هادوپ و اسپارک است ، تا پرداختن به جنبه های تئوری، اما قبل از شروع به راه ادازی عملی، ضروری است که حالت های راه اندازی کلاستر هادوپ را اجمالا" مرور کنیم:
تفاوت مدهای راه اندازی کلاستر هدوپ
کلاستر هادوپ می تواند در 3 حالت مختلف زیر اجرا شود.
Standalone Mode -1 (حالت مستقل)
* از فایل سیستم توزیع شده هدوپ (HDFS) در این حالت استفاده نمیشود.
* از فایل سیستم محلی برای عملیات ورودی و خروجی استفاده میشود.
* مورد استفاده برای اهداف اشکال زدایی
* عدم نیاز به تنظیمات سفارشی در 3 فایل mapred-site.xml، core-site.xml، hdfs-site.xml

Pseudo Distributed Mode(Single Node Cluster) -2 (شبه توزیع شده- تک گره)
* همه daemon ها (Master Node / Data Node / Job Tracker / Task Tracker) روی یک گره واحد اجرا میشوند.( daemon را میتوان مشابه یک سرویس در ویندوز فرض کرد)
* پیکربندی برای 3 فایل mapred-site.xml، core-site.xml، hdfs-site.xml انجام شود.
* HDFS راه اندازی میشود و میتوان کدهای واقعی را روی آن تست کرد.
* مقدار ویژگی تکرار(Replication factor) برای HDFS برابر 1 است.
* برای اهداف تست قبل از اجرا در کلاستر واقعی، توسعه برنامه های کاربردی و آموزش بهترین گزینه است.
Fully distributed mode (or multiple node cluster) -3 (توزیع شده- چند گره)
* کلاستر واقعی با چند Node است. موازی سازی وظایف.بین گره ها صورت میگیرد.
* از معماری (Master-Slave) استفاده میشود.
* Master Node / Data Node / Job Tracker / Task Tracker در گره های جداگانه راه اندازی میشوند.
* مقدار ویژگی تکرار(Replication factor) برای HDFS بیشتر از 1 است.

نکته: در مراحل بعدی کار هر جا از عبارت ویندوز استفاده میکنیم منظور ما ماشین محلی-فیزیکی ویندوز است و هرجا از عبارت hdp استفاده میکنیم منظور ما همان ماشین مجازی لینوکس CentOS میباشد

پیکره بندی کلاستر Hadoop در حالت Pseudo Distributed Mode (شبه توزیع شده)
بسته باینری نصب Hadoop را به چند روش میتوان دانلود و تهیه کرد.ما به دو روش اشاره میکنیم.
1-دانلود بسته باینری Hadoop در ویندوز و انتقال آن به hdp
همانطور که در مرحله انتقال فایل با scp در بالا دیدیم ما از این روش استفاده کردیم . برای دانلود به وبسایت رسمی آپاچی Hadoop رفته . یکی از وبسایتهای مرجع دانلود را انتخاب و نسخه دلخواه دانلود میکنیم.
نکته : توصیه اکید داریم از نسخه 2.7.2 که stable ترین نسخه محسوب میشود استفاده کنید.
برای دانلود مستقیم میتوانید از یکی از لینکهای زیر استفاده کنید.
http://www-eu.apache.org/dist/hadoop/common/hadoop-2.7.2/hadoop-2.7.2.tar.gz
http://mirror.its.dal.ca/apache/hadoop/common/hadoop-2.7.2/hadoop-2.7.2.tar.gz
http://apache.mirrors.pair.com/hadoop/common/hadoop-2.7.2/hadoop-2.7.2.tar.gz
2-دانلود بسته باینری Hadoop بطور مستقیم از محیط hdp با ابزار wget
در حالیکه در خط فرمان ترمینال hdp قرار دادیم ابتدا دستور wget را تایپ و بعد آدرس یکی از لینکهای بالا را بعد از آن قرار داده، Enter میزنیم. برای مثال :
wget http://mirror.its.dal.ca/apache/hadoop/common/hadoop-2.7.2/hadoop-2.7.2.tar.gz

با sshاز ویندور به hdp وصل میشویم. باید فایل فشرده hadoop-2.7.2/hadoop-2.7.2.tar.gz را با دستور زیر از حالت فشرده خارج کنیم:
tar xzf hadoop-2.7.2.tar.gz

با اجرای دستور ls صحت غیر فشرده سازی را بررسی میکنیم. دایرکتوری جدیدی بنام hadoop-2.7.2
به لیست فایلها و دایرکتوریهای مسیر /root اضافه شده است. برای اینکه مجبور نباشیم در تنظیمات بعدی، هر دفعه نام کامل دایرکتوری hadoop-2.7.2 را تایپ کنیم یک پیوند نرم(soft link) بنام hadoop
از آن ایجاد میکنیم.
ln -s hadoop-2.7.2 hadoop

پیکربندی جاوا jdk
در این مرحله باید مسیر نصب جاوا jdk را به سیستم معرفی کنیم. برای پیدا کردن مسیر نصب جاوا دستور زیر را اجرا میکنیم. در خروجی این دستور قسمتی که در شکل زیر مشخص شده، مسیر اصلی نصب جاواست.
find / -name "java"

حال مسیر نصب جاوا ، یعنی :
usr/lib/jvm/java-1.8.0-openjdk-1.8.0.121-0.b13.e16-8.x86_64/jre
و مسیر دایرکتوری hadoop یعنی: /root/hadoop را باید بعنوان متغیر محلی در فایل bash_profile . به سیستم عامل معرفی کنیم.
فایل .bash_profile را با ویرایشگر nano باز میکنیم.
nano ~/.bash_profile

محتویات فایل را بصورت زیر ویرایش میکنیم:
export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.121-0.b13.el6_8.x86_64/jre
export HADOOP_HOME=/root/hadoop
PATH=$PATH:$HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin

در خط سوم متغیر محلی PATH را به این دلیل ویرایش کرده ایم ، که برای اجرای دستورات hadoop هر دفعه مجبور نباشیم وارد دایرکتوری hadoop/bin/ یا hadoop/sbin/ شویم. و از هر مسیری در hdp بتوانیم دستورات hadoop را اجرا کنیم.

سپس باید با یکی از دو دستور زیر تغییرات فایل .bash_profile را تایید کنیم.
. ~/.bash_profile
source ~/.bash_profil

اگر دستور hadoop را اجرا کنیم ، باید راهنمای کاربرد دستور hadoop را مشاهده کنیم.ولی پیکربندی hadoop هنوز کامل نشده .و باید چند فایل را ویرایش کنیم.که در ادامه به آنها خواهیم پرداخت.

وارد دایرکتوری اصلی هدوپ شده، محتویات آنرا لیست میکنیم:
cd hadoop
ls -ltr

حالا باید به مسیر /etc/hadoop رفته، محتوات زیر دایرکتوری /hadoop/etc/haoop را لیست میکنیم.همانطور که درشکل زیر مشاهده میکنیم، فایلهای hadoop-env.sh ، core-site.xml ، yarn-site.xml hdfs-site.xml و mapred-site.xml فایلهای مهمی هستند که معماری، عملکرد و ویژگیهای کلاستر hadoop وابسته به آنهاست، و باید ویرایش شوند.

ویرایش فایل hadoop-env.sh
ابتدا فایل hadoop-env.sh را با ویرایشگر nano (یا vi)باز کرده ،

همانطور که میدانیم پلتفرم hadoop بر پایه زبان جاوا نوشته شده و demon ها و اجزای اجرایی hadoop بر روی ماشین مجازی جاوا JVM)) راه اندازی میشوند.هنگام راه اندازی برای ایجاد JVM و اجرای دستورات hadoop سیستم باید به محل نصب جاوا دسترسی داشته باشد.
مسیر نصب جاوا jdk یا همان JAVA_HOME را در محتویات فایل hadoop-env.sh با دستور زیر تعیین میکنیم(شکل زیر). فایل را ذخیره کرده و از محیط ویرایشگر خارج میشویم.
export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.121-0.b13.el6_8.x86_64/jre

ویرایش فایل core-site.xml
در یک کلاستر hadoop بوسیله ویژگی با نام fs.defaultFS در محتویات فایل core-site.xml میتوان برای demon ها مشخص کرد که آدرس گرهی که در کلاستر نقش NameNode را ایفا میکند کدام است و شماره پورت اتصال به آن چند است(معمولا" پورت 9000 یا 8020 اختصاص داده میشود).
فایل core-site.xml را با ویرایشگر nano (یا vi)باز کرده ،بین دو تگ <configuration> و </configuration>
قطعه کد زیر را اضافه میکنیم(شکل زیر).فایل را ذخیره و از محیط ویرایشگر خارج میشویم.
<property>
<name>fs.defaultFS</name>
<value>hdfs://hdp.its.com:8020</value>
</property>

ویرایش فایل hdfs-site.xml
* در این فایل با ویژگی dfs.namenode.name.dir مسیر دایرکتوری که dfs namenode جداول نام فایلهای hdfs را در سیستم محلی(Centos vm) نگهداری میکند بایدمشخص کنیم.
* با ویژگی dfs.datanode.data.dir مسیری که DFS data node ، بلاک های داده hdfs را در فایل سیستم محلی(Centos vm) نگهداری میکند باید مشخص کنیم.
* با ویژگی dfs.namenode.checkpoint.dir مسیری که secondary data node ایمیجهای موقت را ، در فایل سیستم محلی(Centos vm) نگهداری میکند مشخص میکنیم.
* با ویژگی dfs.replication تعداد گره هایی که توسط namenode باید عمل تکرار(replication) روی آنها انجام شود مشخص میکنیم.
ابتدا دایرکتوریهای مورد نیاز را در فایل سیستم محلی با دستورات زیر ایجاد میکنیم.
mkdir /name
mkdir /data
mkdir /secondary
mkdir /hdfs
سپس دایرکتوریهای /name ، /data و /secondary را به دایرکتوری /hdfs منتقل میکنیم.
mv -f /name /hdfs
mv -f /data /hdfs
mv -f /secondary /hdfs

فایل hdfs-site.xml را باز کرده، بین دو تگ <configuration> و </configuration>
قطعه کد زیر را اضافه میکنیم(شکل زیر).فایل را ذخیره و از محیط ویرایشگر خارج میشویم.

<property>
<name>dfs.replication</name>
<value>1</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>/hdfs/name</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>/hdfs/data</value>
</property>
<property>
<name>dfs.namenode.checkpoint.dir</name>
<value>/hdfs/secondary</value>
</property>

ویرایش فایل yarn-site.xml
* فایل yarn-site.xml را باز کرده و بین دو تگ <configuration> و </configuration> با قطعه کد زیر ،برای ویژگی yarn.nodemanager.aux-services مقدار mapreduce_shuffle را بعنوان سرویس کمکی نام (auxiliary service name) معرفی میکنیم. (شکل زیر).فایل را ذخیره و از محیط ویرایشگر خارج میشویم.

<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>

ویرایش فایل mapred-site.xml.template
ابتدا باید فایلی بنام mapred-site.xml ایجاد و محتویات فایل الگوی mapred-site.xml.template را داخل آن کپی کنیم.سپس mapred-site.xml را باز کرده، پیکربندی کنیم.
cp mapred-site.xml.template mapred-site.xml
nano mapred-site.xml

چون میخواهیم کلاستری در حالت Pseudo Distributed Mode ایجاد کنیم ، با انتخاب مقدار yarn برای ویژگی mapreduce.framework.name تعیین میکنیم چارچوب مدیریت و زمانبندی job های mapreduce را فریم ورک مدیریت کلاستر yarn تعیین میکنیم. (در مد standalone این ویژگی با مقدار local مقدارهی میشود.)
برای اینکار بین دو تگ <configuration> و </configuration> قطعه کد زیر را اضافه میکنیم. (شکل زیر).فایل را ذخیره و از محیط ویرایشگر خارج میشویم.
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>

در این مرحله ویرایش فایلهای پیکربندی کلاستر hadoop در مد شبه توزیع شده(Pseudo Distributed Mode) کامل شد.در مرحله بعد باید گره name node را برای پشتیبانی از فایل سیستم HDFS فرمت کنیم.
فرمت کردن name node
name node را با یکی از دو دستور زیر میتوانیم قالب بندی میکنیم.
hdfs namenode -format

hadoop namenode -format

در صورت فرمت موفقیت آمیز نتیجه دستور ، مشابه شکل زیر خواهد بود.

پیکربندی کلاستر هدوپ در حالت Pseudo Distributed Mode در این مرحله کامل شده است . حال بایستی دستورات راه اندازی demon های dfs و yarn که را برای ایجاد کلاستر شبه توزیع شده هادوپ اجرا کنیم.
دستور start-dfs.sh : datanode ، namenode وsecondary namenode را راه اندازی میکند.
دستور start-yarn.sh سرویس (deamon) yarn (مدیر و زمانبند job ها در کلاستر) را راه اندازی میکند.
دستور start-all.sh در یک مرحله DFS و yarn را راه اندازی میکند.
نکته: اگر بعد از اجرای هر کدام از دستورات بالا، بجای start عبارت stop را اجرا کنیم. Desmon های اجرا شده با دستور start را متوقف میکند.مثلا" دستور stop-all.sh، DFS و yarn را متوقف میکند.
دستور start-dfs.sh را اجرا میکنیم.در اولین اجرا سئوالات سیستم با yes جواب میدهیم، در اجراهای بعدی این سئوالات تکرار نخواهد شد.

بغیر از رابط کاربری خط فرمان hadoop رابط کاربری گرافیکی تحت وب برای hdfs و yarn در اختیار ما میگذارد.
دسترسی به hdfs web UI
برای دسترسی به hdfs web UI در ویندوز نرم افزار Web browser مانند کروم یا فایرفاکس را باز کرده، URL زیر را در نوار آدرس وارد و اجرا میکنیم.
http://hdp:50070
50070 پورت پیشفرض hdfs web UI و hdp هم که نام ماشین مجازی است.صفحه وب hdfs web UI
مطابق شکل زیر گشوده میشود.

دستور start-yarn.sh را برای راه اندازی مدیر کلاستر yarn اجرا میکنیم.

دسترسی به دسترسی به yarn web UI
آدرس زیر را در نوار آدرس مرورگر وب وارد میکنیم. yarn web UI باز میشود.
http://hdp:8088

کار با دستورات اصلی مدیریت hdfs در کلاستر hadoop
ایجاد دایرکتوری کاربر ریشه در فایل سیستم hdfs
در حال حاضر کلاستر هدوپ بطور کامل راه اندازی شده و میتوانیم با دستورات محیط hadoop کار کنیم.
اولین کاری که باید انجام دهیم، تعریف یک دایرکتوری برای کاربران و در داخل آن تعریف یک دایرکتوری برای کاربر root در فایل سیستم hdfs است.
با دستور زیر میتوانیم دایرکتوریهای موجود در فایل سیستم hdfs را لیست کنیم.
hadoop fs -ls /
همانگونه که در شکل زیر میبینیم، اولین اجرای دستور بالا هیچگونه خروجی معتبر ندارد، یعنی فایل سیستم
hdfs فاقد هرگونه دایرکتوری است.
با دستور زیر یک دایرکتوری بنام root در فایل سیستم hdfs ایجاد میکنیم
hadoop fs -mkdir -p /user/root

حال اگر مجددا" دستور hadoop fs -ls / را اجرا کنیم ، مشاهده میکنیم که دایرکتوری /user و در داخل آن زیر دایرکتوری /root عضو گروه supergroup با مجوز دسترسی خواندن ، نوشتن و اجرا کردن ایجاد شده است.

حال به محیط مرورگر web رفته و hdfs web UI را Refresh میکنیم. از تب Utilities گزینه Brows the file system را انتخاب میکنیم. در فضای فایل سیستم hdfs میتوانیم دایرکتوری /user را مشاهده کنیم.

روی دایرکتوری user کلیک میکنیم. دایرکتوری کاربر root موجود است.(شکل زیر)

دسترسی ، مدیریت و اشکال یابی با Log فایلها
Log فایلها ابزار مدیریتی و اشکال یابی کلیدی در چارچوبهای big data محسوب میشوند. سرویس وقایع نگار هدوپ بسیار کارامد است و در صورت بروز هرگونه چالش در اجرای فرایندها و برنامه ها با بررسی Log فایلها میتوان علت آنرا جستجو، اشکالیابی و مشکل را مرتفع کرد.
در hdfs web UI اگر از تب Utilities گزینه ی Logs را انتخاب کنیم، دایرکتوری فایلهای log ، به نمایش در میآید .

اگر روی فایلهای با پسوند log دارند کلیک کنیم، محتویات آن فایل Log در صفحه جدید باز خواهد شد.با مطالعه متن لاگ جزئیات اجرای deamon ها و job ها را میتوان استخراج کرد.

تست کلاستر شبه توزیعی هدوپ با مثال wordcount mapreduce
میخواهیم ضمن اینکه با مراحل اجرای یک برنامه نمونه از مثالهای پیشفرض هدوپ شویم صحت پیکره بندی کلاستر شبه توزیعی که ایجاد کردیم را نیز بدینوسیله آزمایش نماییم.
برای اجرای برنامه نمونه، ما به یک سری فایل متنی به عنوان ورودی برنامه احتیاج داریم،میخواهیم این فایلهای متنی را از hdp به hdfs منتقل کنیم، و مثال wordcont که تعداد کلمات یک یا چند داکیومنت متنی را با مدل mapreduce محاسبه میکند را به آنها اعمال کنیم.ما برای نمونه محتویات دایرکتوری مسیر
/root/hadoop/etc/hadoop
را که شامل 30 فایل با محتوای متنی و فرمتهای مختلف مثل xml. – .sh – prpoerties. هستند را بعنوان ورودی برنامه wordcont در نظر گرفته ایم.
قبل از هر کاری یک دایرکتوری جدید بنام conf داخل دایرکتوری root/ در hdfs میسازیم و فایلهای پیکره بندی متنی که در مسیر /root/hadoop/etc/hadoop قرار دارند را از فایل سیستم hdp در آن کپی میکنیم.بنابراین با دستوری که خواهیم نوشت، عملا" با فرایند کپی فایل و دایرکتوری از فایل سیستم محلی به فایل سیستم هدوپ هم آشنا میشویم.ابتدا به دایرکتوری کاربر root وارد شده ، عمل ایجاد دایرکتوری conf در hdfs و کپی فایلهای پیکره بندی را با استفاده از کلید -put که زیر مجموعه دستور hadoop fs هست با دستور زیر انجام میدهیم:
hadoop fs -ls /user/root
hadoop fs -put /root/hadoop/etc/hadoop conf
همانطور که در شکل زیر مشاهده میشود، دایرکتوری conf در مسیر root//user ایجاد شده،

اما آیا فایلهای کانفیگ از hdp به دایرکتوری conf/ در hdfs منتقل شدند؟ به دو روش میتوانیم این موضوع را بررسی کنیم.
1) نمایش محتویات دایرکتوری conf/ با دستورات hadoop در command line
hadoop fs -ls /user/root/conf

2) استفاده از hdfs file browser در رابط گرافیکی تحت وب hdfs

اگر در hdp به مسیر زیر برویم jar فایل برنامه های آماده mapreduce را میتوانیم ببینیم.(شکل زیر)
/root/hadoop-2.7.2/share/hadoop/mapreduce

اگر با دستور hadoop jar این فایل را اجرا کنیم، توضیحات مربوط به برنامه هایی که میشود با این jar فایل اجرا کرد لیست خواهد شد.(شکل زیر)

حال میخواهیم با یک دستور، مثال wordcount را روی محتویات دایرکتوری /conf که شامل 30 فایل متنی در فایل سیستم hdfs هستند اجرا و تست کنیم و نتیجه خروجی را در دایرکتوری دیگری در hdfs بنام output01 ذخیره کنیم.دستور آن بشرح زیر است:
hadoop jar /root/hadoop-2.7.2/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.2.jar wordcount /user/root/conf /user/root/output01

مراحل مختلف اجرای برنامه به ترتیب، در شکلهای زیر مشاهده میشود.

مشاهده فایل خروجی در hdfs web UI
اگر در hdfs web UI به مسیر /user/root/output01 برویم فایل خروجی برنامه بنام part-r-00000
را میتوانیم ببینیم.

خواندن خروجی برنامه با دستور fs hadoop
برای مشاهده محتوای خروجی میتوانیم از کلید -cat در دستور hadoop fs بصورت زیر استفاده کنیم.
hadoop fs -cat /user/root/output01/ part-r-00000

تصویر زیر قسمتی ازخروجی برنامه را نشان میدهد.

توقف کلاستر هدوپ:
با دستور stop-all.sh میتوانیم deamon های در حال اجرا را متوقف کنیم. برای پایان دادن به اتصال ssh ، پس از توقف کلاستر، میتوانیم ،با دستور exit در ترمینال cygwin از محیط خط فرمان hdp
خارج شویم.

راه اندازی Apache Spark در کلاستر hadoop بصورت محلی
از ویندوز ، به hdp اتصال ssh میزنیم. فایل فشرده باینریهای Apache Spark را که از ویندوز به فضای کاربر root در hdp منتقل کرده بودیم ، با دستور tar از حالت فشرده خارج میکنیم:
tar xzf spark-1.5.0-bin-custom-spark.tgz
از دایرکتوری spark-1.5.0-bin-custom-sparkیک soft link بنام spark ایجاد میکنیم:
ln -s spark-1.5.0-bin-custom-spark spark

برای معرفی مسیر spark بعنوان متغیر محلی ، فایل .bash_profile را با ویرایشگر vi باز میکنیم.
vi ~/.bash_profile
قطعه کد زیر را به متن فایل اضافه میکنیم:
export SPARK_HOME=/root/spark
همچنین، مسیر پوشه bin اسپارک را، مطابق شکل زیر به متغیر PATH اضافه میکنیم.

تغییرات را ذخیره، و از ویرایشگر vi خارج میشویم. تغییرات را با دستور زیر تایید میکنیم:
. ~/.bash_profile
در این مرحله ، پیکربندی spark کامل میشود، با دستور spark-shell کلاستر spark را در مد محلی Run کرده و صحت تنظیمات را تست میکنیم:
spark-shell -master local

صبر میکنیم تا spark-shell اجرا شود، بعد از چند لحظه همانطور که در شکل زیر میبینیم خط فرمان بصورت spark-shell بصورت scala> به نمایش درمیاید.با دستور exit از spar-shell خارج میشویم.

مروری بر مفاهیم پایه ای در چارچوب پردازشی آپاچی اسپارک
آپاچی اسپارک یک چارچوب محاسبات خوشه ای متن باز است که در اصل در آزمایشگاه AMPLab دانشگاه برکلی توسعه داده شده است. Spark's in-memory در یک نرم افزار کاربردی معین کارایی ۱۰۰ برابر نگاشت کاهش دو مرحله ای هادوپ (Hadoop's two-stage disk-based MapReduce paradigm) را فراهم می کند.اسپارک برای الگوریتم های یادگیری ماشین بسیار مناسب است. اسپارک یکی از فعال ترین پروژه های متن باز است و در سال ۲۰۱۴ بیش از ۴۶۵ کمک کننده[ در توسعه] داشت که آن را فعال ترین پروژه های بنیاد آپاچی در خصوص پروژه های نرم افزاری کلان داده(Big Data)ساخته اند. اسپارک در ابتدا در سال ۲۰۰۹ توسط Matei Zaharia در آزمایشگاه AMPLab دانشگاه برکلی شروع شد و در سال ۲۰۱۰ تحت مجوز BSD متن باز شد. در ۲۰۱۳ این پروژه به بنیاد نرم افزاری آپاچی هدیه شد و مجوز آن به آپاچی۲.۰ تغییرکرد و یک پروژه های سطح بالای آپاچی شد. در نوامبر۲۰۱۴ تیم مهندسی Databricks از اسپارک استفاده کردند و رکورد جهانی جدیدی در مرتب سازی مقیاس بالا ثبت کرد.
اسپارک چارچوب محاسباتی برای دادههای عظیم است. Spark از MapReduce به عنوان موتور اجرای خودش، استفاده نمیکنداما بخوبی با هادوپ یکپارچه است. در واقع Spark میتواند در Yarn اجرا شود و با فرمت دادهای هادوپ و HDFS کار کند. Spark بیشتر بخاطرتوانایی نگهداشتن مجموعه داده بین کارها، در حافظه، شناخته میشود. این قابلیت Spark سبب میشود تا سریعتر از جریان کاریMapReduce معادل که مجموعه داده همیشه از دیسک بار میشوند، عمل کند. دو نوع کاربردی که از مدل پردازشی Spark بهره مبرند، الگوریتمهای تکرار شونده که یک تابع بر روی مجموعه داده بصورت تکراری تا حصول شرط خروج، اعمال میگردد، و تحلیل تعاملی(که یک کاربر مجموعه ای از پرس و جوهای اکتشافی تک کاره را بر روی مجموعه ی داده ای، اعمال میکنند) است.
پروژه اسپارک شامل چند جزء کاملا یکپارچه است. در هسته آن "موتور پردازشی" که مسئول زمان بندی، توزیع و نظارت بر برنامه هایی است که شامل وظایف محاسباتی بسیاری در میان چندین ماشین کارگر یا یک کلاستر محاسباتی است. اجزاء Spark مانند SQL یا یادگیری ماشین طوری طراحی شده اند تا بتوانند به خوبی با هم کار کنند و یکپارچه باشند. این امکان شما را قادر می سازد تا این اجزا را مانند کتابخانه ها در پروژه نرم افزاری، ترکیب کنید.
قابلیت یکپارچگی کامل چندین مزیت دارد. اولین مزیت آن این است که تمام کتابخانه ها و اجزاء سطح بالا در پشته، از بهبود در لایه های پایین، سودمی برند. برای مثال، زمانی که موتور هسته Spark یک بهینه سازی را اعمال می کند، کتابخانه های SQL و یادگیری ماشین بطور خودکار بخوبی سریع تر می شوند. دومین مزیت، هزینه ی مرتبط با اجرای پشته، به حداقل می رسد، زیرا یک سازمان به جای اجرای پنج یاده سیستم نرم افزاری مستقل،به یک برنامه نیاز دارد. این هزینه ها شامل توسعه، نگهداری، آزمایش، پشتیبانی و موارد دیگر است. در واقع هر زمان که یک جزء جدید به پشته اسپارک اضافه شد، هر سازمانی که ازاسپارک استفاده می کند، در همان زمان قادر است این جزء جدید را اعمال کند. این مسائل، هزینه استفاده انجامنوع جدید تحلیل داده از بارگیری، استقرار و یادگیری یک پروژه نرم افزاری جدید برای به روزرسانی Spark را کاهش می دهد.
در پایان، یکی از مزیت های بزرگ یکپارچگی کامل، قابلیت ساخت برنامه هایی است که بدون دردسر چندین مدل پردازشی را ترکیب می کنند. برایمثال، در Spark می توانید برنامه ای بنویسید که از یادگیری ماشین برای کلاس بندی بی درنگ داده هایی که از منابع جریانی دریافت می شوند،استفاده کند. به طور همزمان، تحلیل گران می توانند نتایج را از طریق SQL برای نمونه، برای الحاق داده های نتیجه با فایل های ثبت بدون ساختار) وهمچنین در زمان بی درنگ، پرس و جو کنند.شکل زیر اجزای پشته اسپارک را نشان میدهد.

در مقام مقایسه ، به برخی از مزایای استفاده از چارچوب پردازشی آپاچی اسپارک را نسبت به محیطهای مشابه پردازش داده های بزرگ، نظیرپلتفرم آپاچی هادوپ (Apache Hadoop) میتوان به موارد زیر اشاره کرد.
* سرعت بالا در پردازش دسته ای داده ها (Batch processing) ، با بکارگیری ساختارهای داده ای RDD و Data Frame (تا 100 برابر سریعتر از مدل پردازشی Map-reduce در هادوپ )
* پیچیدگی به مراتب کمتر در فرایند تولید برنامه های کاربردی، نسبت به مدل شی نظیر جاوا، با استفاده از برنامه نویسی تابع گرا ، کتابخانه ها و توابع پیش ساخته و پشتیبانی از چندین زبان سطح بالای اسکالا، پایتون و آر (Scala – Python -R)
* پشتیبانی همزمان از پردازش دسته ای (Bach Processing) و پردازش جریان داده ای (Stream Processing)
* قابلیت نصب و بکارگیری ساده در سیستم عاملهای مختلف، بصورت Single-node (با اهداف تست،آموزش، توسعه) و Multi-node (کلاستر واقعی)
* قابلیت اجرا با معماری مستقل و بصورت محلی (Local) و یکپارچه شدن با سایر چارچوبهای پردارشی و ذخیره سازی مثل فایل سیستم هادوپ (HDFS) ، پایگاههای داده مبتنی بر Sql و Nosql نظیر Mysql -Cassandra-Hbase.

پوسته اسپارک (Spark-Shell)
وظیفه ی هسته ی اسپارک ،پخش وظایف ( task ) های توزیع شده ، زمان بندی و عملیات پایه ای ورودی و خروجی است. اسپارک از ساختار داده ویژه ی خودش (RDD) استفاده می کند که وظیفه آن جمع آوری منطقی داده تقسیم شده بین ماشین ها است.
RDD ها به دو طریق ساخته می شوند ، نوع اول با ارجاع دیتاست ها درسیستم های حافظه خارجی و نوع دوم با اعمال تغییر حالت مثل map ، fitter ، reducer ، join روی RDD های موجود.
سطح انتزاعی RDD از طریق language- API های وابسته به زبان مشخص می شود ، با این روش پیچیدگی های برنامه نویسی ساده تر می شود، چون تغییر RDD های برنامه ها راحت تر از تغییر مجموعه داده های محلی ( Local ) است. اسپارک دارای یک پوسته تعاملی است ، یک ابزار قوی برای آنالیز داده به صورت تعاملی ، که در زبان Python یا Scala موجود می باشد. اولین سطح انتزاع اسپارک مجموعه ای توزیع شده از آیتم هاست که به آن دیتاست های توزیع شده ارتجاعی ( RDD ) می گویند.
RDD ها یا با فرمت ورودی Hadoopمثل فایل های HDFS ، یا با تغییر دیگر RDDها ساخته می شوند.
وقتی شما spark-shell را اجرا می کنید، راه اندازِ برنامه همان spark-shell می باشد و شما می توانید عملیاتی را که می خواهید اجرا شوند، تایپ کنید. برنامه راه انداز توسط یک شیء Spark Context به Spark دسترسی دارد که در واقع اتصال به یک کلاستر محاسباتی را نشان می دهد. در محیط spark-shell، شیء SparkContext بطور خودکار برای شما متغیر sc را ایجاد می کند.
SparkContext: بمنزله' قلب یک اپلکیشن اسپارک است. SparkContext را میتوان بعنوان نمونه' اولیه یک اپلکیشن در اسپارک قلمداد کرد که سرویسهای داخلی را اسپارک ( internal services) را set کرده و یک اتصال(Connection) به محیط اجرایی اسپارک ( Spark execution environment) برقرار میکند.زمانیکه یک نمونه از SparkContext ساخته میشود ، میتواند از آن برای ایجاد RDD ها ، انباشتگرها ، متغیرهای Broadcast ، دسترسی به سرویسهای اسپارک و اجرای وظایف (jobs) استفاده کرد.

پیاده سازی عملی 3 سناریو در محیط تعاملی Spark و hdfs
برنامه word Count با زبان scala و اجرا در محیط Apache Spark
برای ایجاد و اجرای برنامه word Count در اسپارک میتوانیم از ترکیب transformer هایی مثل map ، reduceByKey , flatMap بهمراه Action های مختلفی مثل ,reduce, collect count ، foreach استفاده کنیم.
بطور مثال طرح کلی برنامه' wordcound به زبان اسکالا و با استفاده از transformation اصلی تجمیع با کلید (reduceByKey ) مانند شکل زیر است.

در شکل بالا ،خروجی برنامه در یک دایرکتوری در hdfs بنام output و در قالب یک فایل متنی ذخیره میشود.
شرح سناریو:
میخواهیم این فایل متنی را از ویندوز به فایل سیستم hdp و سپس از hdp به فایل سیستم hdfs هدوپ منتقل کنیم.سپس آنرا بوسیله' ایجاد یک ساختار RDD در اسپارک خوانده، برنامه ای ایجاد کنیم که بعنوان خروجی ، تعداد تکرار کلمات استفاده شده در رمان جنگ و صلح را نمایش دهد.
قصد داریم این برنامه را با ترانسفورمر اصلی reduceByKey و Action (اجراکننده) collect ایجاد و اجرا کنیم، بطوریکه نتیجه' خروجی بدون اینکه جایی ذخیره شود ، مستقیما" از حافظه در ترمینال اسپارک نمایش داده شود.
برای اجرای مثال wordCount احتیاج به یک فایل متنی داریم. این فایل متنی میتواند دارای پسوندهای معمول فایلهای متنی، مثل txt ، csv و یا فاقد هرگونه فرمت باشد. ما در این آموزش فایل متنی لاتین رمان جنگ و صلح نوشته لئو تولستوی، بنام WarPeace.txt با حجم 3.15 مگابایت را ا به این منظور انتخاب کرده ایم.

ارسال فایل نمونه از ویندوز به ماشین مجازی:
اول بایستی فایل WarPeace.txt را از ویندوز به hdp منقل کنیم. با چگونگی انجام این کار را در مراحل قبلی آشنا شده ایم. فایل WarPeace.txt را به پوشه home کاربر cygwin در ویندوز کپی کرده با دستور زیر به فضای hdp منتفل میکنیم.
scp ~/free root@hdp:~
با دستور start-all.sh کلاستر هدوپ را راه اندازی مجدد میکنیم.
ایجاد دایرکتوری برای ذخیره دیتاست نمونه در hdfs
با دستور زیر یک دایرکتوری بنام mydata در hdfs ایجاد میکنیم.
hadoop fs -mkdir /user/root/mydata
ارسال دیتاست نمونه از ماشین مجازی به دایرکتوری ایجاد شده HDFS
دستور:
hadoop fs -put ~/WarPeace.txt /user/root/mydata

Spark-shell را در مد محلی راه اندازی میکنیم:
spark-shell -master local

در اولین اقدام، باید با Spark-Scala API فایل ورودی را بخوانیم و یک ساختار RDD ایجاد کنیم
از دستور زیر برای خواندن فایل WarPeace.txt از مسیر /user/root/mydata در hdfs و ایجاد RDD جدید بنام textFile استفاده میکنیم.
val textFile = sc.textFile("hdfs://hdp.its.com:8020/user/root/mydata/WarPeace.txt")

در مرحله بعدی قصد داریم تعداد کلمات روی فایل را استخراج کنیم،اینکار باید 3 کار انجام دهیم:
1) اول یک flat map برای تفکیک هر خط به کلمات نیاز داریم.الگوی شناسایی کلمات در متن را باید به برنامه معرفی کنیم، برای اینکار باید تعیین کنیم که در یک توالی از کاراکترهای رشته ای، کلمات با کاراکتر جداکننده' space از هم مجزا میشوند. (بخش سبز رنگ در قطعه کد پایین)
2) سپس باید جفتهای کلید-مقدار را مشخص کنیم.، هرکلمه را بعنوان یک کلید (key) با مقدار "1" در نظر میگیریم. (بخش قرمز رنگ در قطعه کد پایین)
3) تعداد کلیدها را با تجمیع کلیدهای مشابه کاهش می دهیم. (بخش آبی رنگ در قطعه کد پایین)
val counts = textFile.flatMap(line => line.split(" ")).map(word => (word, 1)).reduceByKey(_ + _)

بعد از اجرای این دستورات ما خروجی مشاهده نخواهیم کرد، علت این است که هنوز Actions ای فراخوانی نکرده ایم . بلکه تنها به متن transformation اعمال کرده ایم.یک Action میتواند ذخیره نتایج transformer ها در یک فایل یا چاپ آن در ترمینال spark-shell باشد. ما میخواهیم گزینه دوم را بکار ببریم.(نحوه ذخیره خروجی در یک فایل در شکلی که بعنوان الگو در بالا ارایه شد موجود است)
اما اول باید با دستور زیر RDD نتیجه را با استفاده از تابع Persist() در حافظه تثبیت (freez) کنیم.
counts.persist()

تابع collect() بعنوان یک Action آرایه ای از عناصر دیتاست مورد تحلیل (در اینجا متن transform شده)
را به برنامه' اصلی(Driver) برمیگرداند. در کد زیر از تابع foreach() برای اعمال تابع collect به هر یک از عناصر دیتاست خروجی و از println برای چاپ نتیجه در ترمینال استفاده میکنیم .
counts.collect().foreach(println)

شکل زیر بخشی از مراحل اجرای برنامه را نشان میدهد.

دو شکل زیر بخشی از خروجی برنامه را نشان میدهد.

مثال عملی 2 – برنامه تطابق الگو در اسناد متنی (Pattern matching) با Scala
استخراج تعداد بازدیدکنندگان از وبسایت NASA بر اساس زمان بازدید ، با تحلیل Log فایل
دیتاست ورودی ما در این مثال فایل متنی NASA_AXESS_log است. این فایل شامل پنج ستون است که توضیح مربوط به ستونها بشرح زیر است:
ستون 1) آدرس اینرنتی Host درخواست کننده
ستون 2) زمان دریافت درخواست
ستون 3) درخواست (محتوای علامت نقل قول " ")
ستون 4) کد پاسخ HTTP
ستون 5) حجم پاسخ (به Byte)

شرح سناریو: میخواهیم با استفاده از تعامل چارچوب پردازشی آپاچی اسپارک و فایل سیستم hdfs کلاستر شبه توزیعی hadoop ، تعداد بازدید کنندگان از وبسایت ناسا را بر اساس زمان بازدید از فایل بالا که لاگ فایل سرور وقایع نگار میباشد استخراج کنیم.
واضح است که ابتدا باید مشابه مثال Wordcount ابتدا این فایل را از ویندوز به hdp کپی کرده ،

سپس با دستور زیر آن را به hdfs ارسال کنیم:
hadoop fs -put ~/ NASA_AXESS_log /user/root/mydata

پس از راه اندازی کلاستر هدوپ و spark -shell در حالت محلی با خواندن فایل ورودی از hdfs یک RDD از دیتاست ورودی ایجاد میکنیم.
val textFile = sc.textFile("hdfs://hdp.its.com:8020/user/root/mydata/ NASA_AXESS_log")

نکته:
regex در زبان اسکالا :
یک class در زبان Scala است که امکان ایجاد و استفاده از عبارات منظم(regular expressions) را فراهم میکند. هدف آن استخراج رشته ای است که با یک الگوی خاص مطابقت داشته باشد.فرم کلی استفاده از آن بصورت زیر است:
regex(regex: String, groupNames: String*)

در الگوی بالا regex رشته ایست که نماینده ی یک عبارت منظم است و groupNameالگوی مورد مطابقت در کل متن است. روش معمول ایجاد regex استفاده از متد .r است.
replaceAllIn: تابع زیر مجموعه کلاس regex است و تمام رشته های دارای مطابقت با الگوی خاص را با با رشته دیگر جایگزین میکند.
مبدل sortByKey() :زمانیکه این transformer بر روی دیتاستی از جفتهای کلید- مقدار مثل(K-V) فراخوانی میشود، دیتا ستی مرتب شده (بصورت صعودی یا نزولی) از دیتاست (K-V) را به برنامه ی Driver باز میگرداند.

قطعه کد زیر با اعمال مبدلها و اکشن ها به RDD اولیه، دیتاستی با 2 ستون با توضیح زیر بعنوان RDD خروجی ایجاد کرده و در ترمینال چاپ میکند.
ستون 1) ساعت بازدید
ستون 2) تعداد بازدید کنندگان
val regex = "- ".r

val result = input.map(line => regex.replaceAllIn(line,""))
def getDate(line:String) : String = {var date = line.replace("[", "").replace("]", "");date = date.split(":")(1); return date }
val dateTime = result.map(line => (getDate(line.split(" (?=([^"]*"[^"]*")*[^"]*$)+(?![^[]*])")(1)), 1)).reduceByKey((a, b) => a + b).sortByKey();
val format = dateTime.map(line => line._1 + "-" + ((line._1).toInt + 1) + " Hours : "+line._2);
format.collect().foreach(println)

خروجی برنامه(شکل زیر):

سناریوی عملی 3 در محیط Apache Spark : نمونه برنامه متن کاوی با Scala
شرح سناریو: میخواهیم در فایل NASA_AXESS_log تمام خطوطی که در آنها آدرس اینترنتی "lya.colorado.edu"
بکار رفته را استخراج کنیم.
پس از راه اندازی کلاستر هدوپ و spark -shell در حالت محلی باید با خواندن مجدد فایل ورودی از hdfs یک RDD از دیتاست ورودی ایجاد میکنیم.
val textFile = sc.textFile("hdfs://hdp.its.com:8020/user/root/mydata/ NASA_AXESS_log")

نکته:
عملکرد مبدل filter(func) : شرط func را به دیتا ست ورودی اعمال میکند. با انتخاب تمام عناصری که بعد از اعمال شرط func مقدار true را برگردانند ، یک دیتاست جدید ایجاد کرده، به برنامه' Driver بازمیگرداند.
قطعه کد زیر تمام خطوطی که در آنها آدرس اینترنتی lya.colorado.edu آمده را فیلتر کرده در خروجی ترمینال چاپ میکند:
val errors = textFile.filter(line => line.contains("lya.colorado.edu"))

errors.collect().foreach(println)

شکل زیر خروجی برنامه را نشان میدهد:

مهاجرت دایرکتوری hadoop به خارج از فضای کاری کاربر root
مسیر دایرکتوری کلاستر هدوپ را در در فضای کاربر root تعیین کردیم، مادامیکه هدف ما یادگیری و آموزش باشد این موضوع مهمی نیست، ولی ، در کلاسترهای واقعی که معمولا" چند کاربر بغیر از کاربر ریشه داریم، چون سیستم امنیتی لینوکس بطور پیشفرض اجازه ی دسترسی سایر کاربران را به فضای کاربر ریشه نمیدهد، از نظر رعایت اصول اصلی شبکه بندی و تعیین مجوز دسترسی به کاربرانی که میخواهیم در آینده ایجاد کنیم ، بهتر است مسیر دایرکتوری هدوپ را از /root/hadoop به مسیری خارج از دایرکتوری کاربر ریشه مثل /software/hadoop انتقال دهیم. برای اینکار ابتدا یک دایرکتوری بنام /software ایجاد کرده، محتویات دایرکتوری /root را در آن کپی میکنیم. ضمنا" بایستی در مرحله بعدی تنظیمات متغیرهای محلی hadoop و spark را در .bash_profile با توجه به مسیر جدید ویرایش کنیم، دستورات آن به شرح زیر است:
mkdir /software
cp -rf */software
nano ~/.bash_prfile

ویرایش .bash_profile مطابق شکل زیر است:

بعد از ذخیره اول تغییرات و خروج از ویرایشگر با دستور ~/.bash_prfile . تغییرات را اعمال میکنیم.
برای تست صحت تغییرات ابتدا دستور which hadoop و یا echo $HADOOP_HOME را اجرا میکنیم. خروجی چاپ شده باید مسیر جدید دایرکتوری هدوپ در مسیر /software/hadoop باشد.
در مرحله بعدی deamon های کلاستر های هدوپ را دستور start-all.sh راه اندازی کرده، صحت اجرای همه' deamon ها را از مسیر جدید دایرکتوری hadoop با دستور زیر بررسی میکنیم.
ps -aux | grep java | awk '{print $12}'

خروجی دستور بالا باید مطابق شکل زیر باشد:

pyspark (رابط برنامه نویسی با زبان pyton در محیط آپاچی اسپارک) :
آپاچی اسپارک یک چارچوب پردازشی است که زبان پیشفرض و مورد پیشنهاد در این پلتفرم زبان سطح بالای scala میباشد،این موضوع بیشتر بدلیل تلفیق کارامد روشهای تابع گرایی و شی گرایی و همچنین ساختارهای داده ای با انعطاف در اسکالاست. علاوه بر این اسپارک محیط پردازشی است که Mutiple language support بوده و از چندین زبان برنامه نویسی دیگر مثل R ,Python و جاوا هم بخوبی پشتیبانی میکند.استفاده از pyspark بیشتر در مواردی توصیه میشود که:
شروع کار با چارچوب اسپارک زمانیکه کاربر مهارت کافی در زبان پایتون دارد، لیکن هیچگونه آشنایی و سابقه قبلی کار با زبان scala را نداشته باشد.
* اهدافی عمومی و پردازش دسته ای(نه جریانی) بر روی داده های با حجم بالا مطرح باشد.
* استفاده از اسپارک بعنوان ابزار تحلیلی و آنالیز داده مورد نظر باشد.

دسترسی خط فرمان pyspark :
بعد از راه اندازی deamon های dfs و yarn کافی است دستور pyspark را اجرا کنیم. بعد از اجرا صبر میکنیم تا خط فرمان hdp به نماد >>> تغییر کند . دستورات عمومی زبان python و دستورات مشترک python و Spark (که شامل مجموعه ای از کلاسها و توابع پایتون ، در قالب transformation ها و Action ها و انباشتگرها[Containers] در رابط برنامه کاربردی pyspark تعبیه شده است) را ، میتوانیم در خط فرمان pyspark تایپ و اجرا کنیم.

سناریوی عملی4 Spark : ایجاد برنامه wordcount با pyspark به زبان python
شرح سناریو: میخواهیم با استفاده از Spark python API و خواندن فایل متنی free از hdfs ابتدا یک RDD از فایل ورودی ایجاد کرده، با استفاده از ترکیب transformer ها و Action های map() ، flatmap() ، filter() ، reduceByKey() ،sortByKey() و take() ابتدا تعدادخطوط دارای متن را استخراج کرده ، از آنها ، تعداد تکرار هر یک از کلمات در فایل ورودی را محاسبه و بصورت نزولی مرتب کنیم، در نهایت ده کلمه ای که بیشترین تکرار را متن داشته اند ، در ترمینال چاپ کنیم.دستورات این برنامه بشرح زیر است:

lines = sc.textFile('hdfs://hdp.its.com:8020/user/root/mydata/free)
lines_nonempty = lines.filter( lambda x: len(x) > 0 )
lines_nonempty.count()
words = lines_nonempty.flatMap(lambda x: x.split())
wordcounts = words.map(lambda x: (x, 1)).reduceByKey(lambda x,y:x+y).map(lambda x:(x[1],x[0])).sortByKey(False)
wordcounts.take(10)

تصویر زیر، مراحل ایجاد ، اجرا و خروجی این برنامه را نشان میدهد:

دانلود و کار با ماشین مجازی آماده نیمه توزیعی hdp/spark
در این مقاله آموزشی، به مراحل گام بگام ایجاد ، کار و انجام مثالهای نمونه با یک کلاستر مجازی نیمه توزیعی هدوپ/ اسپارک بطور کامل پرداختیم.
هدف اصلی که در این آموزش مد نظر قرار داده ایم، این است که هر فرد علاقمند به کار با مفاهیم big data بتواند با در دسترس ترین امکانات سخت افزاری و نرم افزاری مثل یک لپ تاپ یا PC معمولی ، با صرف حداقل هزینه و در کوتاه ترین زمان ممکن ، بصورت علمی و اصولی و بیشترین تشابه با کلاسترهای محیط واقعی، مهارت ایجاد و کار با کلاستری را که برای اهداف تست و یادگیری نیاز دارد را شخصا" ایجاد نماید.
ضمنا" ما یک نمونه ماشین مجازی آماده ، با پیکربندی کامل تهیه کرده، در کتابخانه دیجیتالی شخصی آپلود کرده ایم ، و بعنوان هدیه ای ناقابل و تقدیر از شما دوست فرهیخته که لطف کرده و این آموزش را دنبال کرده اید ، لینک دانلود آنرا با شما به اشتراک میگذاریم.لازم بتوضیح است که این ماشین مجازی احتیاج به هیچگونه تنظیمات و پیکربندی ندارد و آماده استفاده میباشد.
لینک دانلود ماشین مجازی آماده، کلاستر نیمه توزیعی hadoop/spark

https://drive.google.com/open?id=0B2nqVcv89GyEVlhmSUd2MVgzOTQ

نکته:
مراحل ایجاد ماشین مجازی آماده دقیقا" همان مراحلی است که در این آموزش با جزئیات کامل به آن پرداخته ایم. تنها موردی که لازم بذکر است این است که همانطور که میدانید از نظر اصول شبکه بندی و بدلیل رعایت تدابیر امنیتی در یک شبکه واقعی آی پی آدرس تمام سرورهای شبکه باید بطور دستی تعیین شود(همانگونه در این آموزش ip static و Gateway تعریف کردیم).
برای اینکه شما بعد از دانلود بدون هیچگونه تنظیماتی ماشین ماشین مجازی را روی سیستم ویندوز شخصی خود اجرا کنید،
1) ip static تعریف نکرده ایم و روش آدرسدهی را dhcp ست کرده ایم.
2) نوع اتصال شبکه را در نرم افزار Vmware از بجای NAT از نوع host only Adapter انتخاب کرده ایم.
3) آدرس فایل سیستم hdfs در ماشین مجازی آماده آدرس پیشفرض localhost:8020 میباشد.
بنابراین برای آدرسدهی به فایل سیستم hdfs در ماشین مجازی آماده بجای hdp:8020 از localhost:8020 استفاده میکنیم.
راه اندازی ماشین مجازی آماده:
بعد از دانلود، فایل فشرده ماشین مجازی آماده را به مسیری دلخواه در ویندوز مثل Desktop انتقال داده ، پوشه فشرده شده ماشین مجازی را با نرم افزار winrar یا winzip از حالت فشرده خارج میکنیم.

نرم افزار Vmware را اجرا کرده، از منوی File گزینه' Open را انتخاب و به مسیر پوشه ی ماشین مجازی آماده مسیردهی میکنیم. فایل CentOS-64.vmx را باز میکنیم.

ماشین مجازی را Run میکنیم.

پس از بارگذاری، با یوزر root و گذرواژه ی password به VM لاگین کرده، آدرس IP ماشین مجازی را با دستور ifconfig -a استخراج میکنیم. توجه کنیم که این IP در سیستم شما با آنچه در شکل زیر مشاهده میکنید متفاوت خواهد بود.

از ترمینال Cygwin از ویندوز به فضای کاربر root با استفاده از IP استخراج شده ، ssh میزنیم.

حال میخواهیم مثال wordcount در spark با زبان اسکالا را در ماشین مجازی آماده انجام دهیم.
اجرای برنامه wordcount spark در ماشین مجازی آماده:
Deamon های کلاستر hadoop را با دستور start-all.sh راه اندازی میکنیم.

در hdfs برای کاربر root و ارسال دیتاست دایرکتوری ایجاد کرده، دیتاست warepeace.txt را از فایل سیستم محلی به دایرکتوری /mydata در hdfs کپی میکنیم.(دیتاستهای بکار گرفته شده در مثالهای این آموزش برای استفاده در فایل سیستم ماشین مجازی موجود است)

Spark-shell را راه اندازی میکنیم.

باید با Spark-Scala API فایل ورودی را بخوانیم و یک ساختار RDD ایجاد کنیم.
نکته ای که میخواستیم به آن برسیم این است که باید توجه شود در ماشین مجازی آماده آدرس hdfs را localhost:8020 مسیردهی میکنیم. همانطور که میبینیم مابقی دستورات و خروجی برنامه دقیقا" با آنچه قبلا" انجام شد، مشابه است.

خروجی:

لینک دانلود ماشین مجازی آماده کلاستر شبه توزیعی hdp/spark :
https://drive.google.com/open?id=0B2nqVcv89GyEVlhmSUd2MVgzOTQ

1


تعداد صفحات : 92 | فرمت فایل : WORD

بلافاصله بعد از پرداخت لینک دانلود فعال می شود