جلسه پنجم: 1400/05/03
چند دستور لینوکسی:
- دستور ssh node-x باعث می شود که از روی سرور جاری به سرور جدید بروید
- با دستور logout به سرور لاگین شده ی اولیه بازمی گردید
فضای ذخیره سازی:
دیسکهای ذخیره سازی براساس پارامترهایی مانند سرعت، قابلیت اطمینان و ..... قیمت های مختلفی دارند؛ با این توجه خوب است که اطلاعاتی که به ندرت به آنها نیاز است را در دیسک ارزان تر و برعکس اطلاعات پرکاربرد را به هاردهای سریع تر منتقل کنیم. به این کار در هادوپ Storage Tiering یا Tired Storage گفته می شود و شامل Archive، Disk، SSD و RAM_DISK می باشد. به این منظور باید در فایل hdfs-site.xml موارد زیر لحاظ شود. در زیر مواردی که با رنگ زرد مشخصی شده اند نشانگر نوع سخت افزار مورد استفاده است. به طور مثال از این پس تمامی فایل هایی که در مسیر opt/data_ssd نگهداری می شوند برروی هارد پرسرعت خواهند بود. مسیرهایی که در زیر مشخص شده است باید برروی تمامی DT (data node) ها وجود داشته باشند. ضمن اینکه بعد از انجام تغییرات در فایل hdfs-site.xml باید تغییرات را برروی DT ها هم کپی کرد.
Storage Types
• ARCHIVE
• DISK
• SSD
• RAM_DISK : supporting writing single replica files in memory
Storage Policies - Replica Block Placement (for n replicas)
• Hot : for both storage and compute - Disk: n
• Cold :only for storage with limited compute - ARCHIVE: n
• Warm : partially hot and partially cold , some of its replicas are stored in DISK and the remaining replicas are
stored in ARCHIVE - Disk: 1, ARCHIVE: n-1
• All_SSD : for storing all replicas in SSD
• One_SSD : for storing one of the replicas in SSD. The remaining replicas are stored in DISK
• Lazy_Persist : for writing blocks with single replica in memory
<property>
<name>dfs.datanode.data.dir</name>
<value>[DISK]file:///opt/data/dataNode,[SSD]file:///opt/data_ssd</value>
</property>
بدیهست که برای اعمال تغییرات بالا نیاز به stop و استارت کردن سرویس dfs می باشد.
اعمال حقوق دسترسی به کاربران hadoop:
- ابتداباید بخش زیر به فایل hdfs-site.xml اضافه شود. این فایل را به سایر نودها هم کپی نمایید. برای تاثیر باید سرویس dfs را استاپ و استارت نمایید.
- acls مخفف access control list می باشد. تنظیم زیر به ما این اجازه را می دهد که از حقوق دسترسی استفاده نماییم.
<property>
<name>dfs.namenode.acls.enabled</name>
<value>true</value>
</property>
نکته
تا هادوپ ورژن 2 تنها راه برای ایجاد redundancy دیتا استفاده از repliaction بود. از ورژن 3 به بعد امکان تحت عنوان Erasure Coding اضافه شده که مدل کارکرد آن مشابه راه حل RAID است که Parity هم به هنگام نگهداری اطلاعات مورد استفاده قرار می دهد. در اینصورت بلاک هایی که به هر علتی گم می شوند از طریق سازوکار Parity قابل استفاده خواهند بود. برای فعال سازی آن باید هر مسیر مورد نظر را برای اینکار تنظیم کرد. توصیه می شود که Erasure برای کلاسترهای بزرگ (از 5 نود بیشتر) مورد استفاده قرار گیرد.
مقدمات Distribute Processing
دارای یک engine است (مثلا MapReduce) که این قابلیت را دارد که Job ها در آن تعریف شوند. این Job از طریق یک Distribute Resource Manager مانند YARN
(yet another resource negotiator) بین نودها تقسیم شده و پس از اجرا نتایج عملیات را Merge می نماید.
عملکرد YARN به این گونه است که برای ما container می سازد.container ترکیبی منابع مانند رم، cpu و ... .است. در هنگام تعریف container محدوده ای از منبع (مثلا رم) مشخص می شود. مثلا اگر برای دو نود که 2 گیگابایت رم دارد (جمعا 4 گیگابایت) کانتینر 512 (نیم گیگابایت) تا 1536 (یک و نیم گیگابایت) ایجاد شود؛ درصورتیکه از کانتینر در حداقل منبع تولید شود جمعا 8 container خواهیم داشت.
در یک مثال جمعا 8 کانتینر داشته باشیم و Job ی داشته باشیم که در 10 بخش باید انجام شود، ابتدا 8 بخش به 8 کانتینر اختصاص می یابد و 2 بخش باقیمانده در انتظار آزاد شدن 2 کانتینر از 8 کانتینر خواهند بود و به محض آزاد شدن 2 بخش باقیمانده برای انجام به کانتینرها تخصیص خواهد یافت. پس در فایل پیکرندی YARN به عنوان مدیر انجام کار مشخص کنیم که:
- از هر نود چه میزان منبع در اختیار قرار می گیرد (که باید از میزان کل آن منبع - مثلا رم - کمترباشد)
- حداقل سایز container
- حداکثر سایز container
- آدرس Resource Manager
<property>
<name>yarn.resourcemanager.hostname</name>
<value>node-master</value>
</property>
<property>
<name>yarn.nodemanager.resource.memory-mb</name>
<value>1536</value>
</property>
<property>
<name>yarn.scheduler.maximum-allocation-mb</name>
<value>1536</value>
</property>
<property>
<name>yarn.scheduler.minimum-allocation-mb</name>
<value>512</value>
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.nodemanager.vmem-check-enabled</name>
<value>false</value>
</property>
<property>
<name>yarn.acl.enable</name>
<value>0</value>
</property>
- موارد بالا در فایل yarn-site.xml اعمال شده و فایل جدید برروی نودهای slave نیز کپی شوند.
برای اجرای YARN کافی است تا دستور start-yarn.sh را اجرا کنید. در مرورگر نیز 192.168.56.10:8088 آدرس YARN است.
- همچنین باید تغییرات زیر در فایل mapred-site.xml انجام شوند.
<property>
<name>yarn.app.mapreduce.am.env</name>
<value>HADOOP_MAPRED_HOME=/opt/hadoop</value>
</property>
<property>
<name>mapreduce.map.env</name>
<value>HADOOP_MAPRED_HOME=/opt/hadoop</value>
</property>
<property>
<name>mapreduce.reduce.env</name>
<value>HADOOP_MAPRED_HOME=/opt/hadoop</value>
</property>
-حال برای تکمیل سناریو، فایلی بنام data.txt با محتوای نمونه زیر را در مسیر /data/ می سازیم و آن را در هادوپ put می کنیم
foo bar foo foo bar test
test foo bar bar foo
- بارگذاری
hdfs dfs -put /opt/data.txt /data
- با اجرای دستور زیر، تعداد کلمات فایل data.txt شمارش شده و نتیجه در هادوپ ساخته می شود
yarn jar /opt/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.2.jar wordcount /data/data.txt /data/result/wc_result1