HADOOP، فضای ذخیره سازی، امنیت، شروع کار با YARN

جلسه پنجم: 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 می باشد.

- با دستور زیر مسیر ایجاد می شود، کلید p- در دستور باعث می شود که کل مسیرها ایجاد شوند
hdfs dfs -mkdir -p /data/result
- در ادامه و با دستور زیر تنظیمات محل ذخیره سازی تکمیل می شود
hdfs storagePolocies -setStorage - path /data/result -policy ONE_SSD
- برای مشاهده وضعیت موجود مسیر نیز از دستور زیر استفاده کنید
hdfs storagePolocies -getStorage - path /data/result 

اعمال حقوق دسترسی به کاربران hadoop: 

- ابتداباید بخش زیر به فایل hdfs-site.xml اضافه شود. این فایل را به سایر نودها هم کپی نمایید. برای تاثیر باید سرویس dfs را استاپ و استارت نمایید.

- acls مخفف access control list می باشد. تنظیم زیر به ما این اجازه را می دهد که از حقوق دسترسی استفاده نماییم.

  <property>            

    <name>dfs.namenode.acls.enabled</name>            

    <value>true</value>  

  </property>

- با دستور زیر دسترسی برای کاربر Ali تنظیم می شود. تفاوت m- با set- آن است که در m- دسترسی های قبلی حفظ شده و صرفا تغییرات اعمال می شود اما در set- دسترسی های جدیدی تعریف می شود.
hdfs dfs -setfacl -m user:Ali:rwx /data/result
hdfs dfs -setfacl -m user:Ali:rwx,user:Ahmad:--- /data/result
- در دستور دوم در بالا، کلیه دسترسی ها از کاربر Ahmad گرفته شد. درصورتیکه کاربر Ahmad از نوع owner مسیر باشد اجرای این فرمان خللی در حقوق دسترسی وی ایجاد نخواهد کرد.

نکته

تا هادوپ ورژن 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


نظرات 0 + ارسال نظر
امکان ثبت نظر جدید برای این مطلب وجود ندارد.