سیستم فایل HDFS- قسمت دوم

Facebooktwitterpinterestlinkedinmail
Print Friendly, PDF & Email

ذخیره سازی در HDFS :

HDFS از سیستم قدیمی مرتب سازی فایل ها بصورت سلسله مراتبی پشتیبانی می کند. یک کاربر یا نرم افزار می تواند دایرکتوری ایجاد و درون آن ها فایل ها را ذخیره کند. همانند دیگر سیستم های فایل موجود، امکان ساخت و حذف فایل ها، جابجایی فایل ها از دایرکتوری ها به دیگر دایرکتوری ها و یا تغییر نام فایل ها نیز وجود دارد. HDFS هنوز امکان تعیین مجوز دسترسی ندارد و همچنین از Hardlink ها و Softlink ها پشتیبانی نمی کند. هرچند که HDFS مانع از بکارگیری این ویژگی ها هم نمی شود.

هر تغییری که درفضای سیستم فایل رخ می دهد، توسط NameNode ضبط می شود. یک نرم  افزار می تواند تعیین کنندده تعداد کپی هایی که باید توسط HDFS از فایل ها گرفته شود باشد. تعداد کپی های موجود از یک فایل را فاکتور کپی سازی(Replication Factor) آن فایل می نامیم.

HDFS برای نگهداری فایل های بزرگ بر روی ماشین های موجود در کلاستر های بزرگ طراحی شده است. HDFS هر فایل را بصورت سری از بلوک ها ذخیره می کند. تمامی بلوک های یک فایل به جز بلوک آخر هم سایز هستند. تمامی بلوک ها برای مقاوم بودن دربرابر خطاها و خطرات احتمالی کپی سازی شده اند. اندازه بلاک ها و فاکتور کپی سازی را می توان برای هر فایل تنظیم نمود. فایل های موجود در HDFS بصورت write once read many هستند و در هر زمان فقط یک نویسنده دارند.

تمامی تصمیم گیری های درباره کپی سازی بلاک ها توسط  NameNode صورت می گیرد. NameNode در بازه های زمانی مختلف از DataNode ها HeartBeat و  BlockReport می گیرد. HeartBeat برای بررسی عملکرد مناسب DataNode و BlockReport نیز شامل لیستی از تمامی بلاک های آن DataNode می باشد.

محل قرارگیری کپی ها برای HDFS در بحث های عملکرد و قابلیت اطمینان خیلی مهم و ضروری می باشد. بهینه سازی محل های قرارگیری کپی ها وجه تمایزی بین HDFS و دیگر سیستم ها بوجود آورده است.

هدف قرارگیری کپی ها در رک های مناسب به جهت بهبود قابلیت اطمینان،  دسترس پذیری و مدیریت پهنای باند شبکه می باشد.

نمونه های بزرگ HDFS بر روی کلاستری از کامپیوترهایی که معمولا روی رک های مختلف قرار دارند جای دارند. برقراری ارتباط دو گره در رک های متفاوت باید از طریق سویچ ها صورت پذیرد. در اکثر حالات، پهنای باند بین ماشین های روی یک رک بیشتر از حالتی است که در چند رک هستند. NameNode شناسه رک هر DataNode را شناسایی می کند. یک راهکار ساده ولی غیر بهینه این است که کپی های بلاک های یک فایل بر روی رک های یکتایی قرار گیرند که مانع از صرف بیش از اندازه پهنای باند در خواندن بین رک ها و همچنین  در مواقع بروز مشکل برای رک مانع از از دست دادن داده می شود. این راهکار بخوبی و بطور متوازن بار را بر روی کلاستر پخش می کند. درصورتیکه این روش باعث افزایش هزینه نوشتن می شود چون پس از نوشتن باید بلاک ها بر روی رک های مختلف منتقل شوند.

کپی سازی:

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

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

Safemode

در ابتدای بالا آمدن سیستم، NameNode وارد یک حالت خاص به نام Safemode می شود. تاهنگامیکه گره در این حالت است کپی سازی صورت نمی گیرد. NameNode از DataNodeها HeartBeat و  BlockReport را دریافت می کند. وقتی داده های دریافتی از DataNodeها پایان پذیرفت، NameNode به بررسی آن ها می پردازد. مثلا هر بلاک باید تعداد کپی های معینی داشته باشد و NameNode چک می کند که آیا این تعداد بر اساس لیستی که BlockReport داده است درست می باشد یا خیر. پس از این بررسی(بعلاوه 30 ثانیه دیگر) NameNode از حالت Safemode خارج می شود. حال به سراغ آن بلاک هایی می رود که تعداد کپی های کمتری از مقدار تعیین شده دارند و کپی ها را ایجاد می کند.

پایایی متادده های سیستم فایل

فضای نامی HDFS در NameNode ذخیره می شود. متاداده های NameNode از یک لاگ گیر تراکنش ها بنام EditLog برای ثبت هرگونه تغییر در متاداده های سیستم فایل استفاده می کند. بعنوان مثال در ساخت یک فایل جدید در HDFS منجر به ثبت این اتفاق در EditLog می شود. تمامی فضای نامی سیستم فایل شامل نگاشت بلاک ها به فایل ها و ویژگی های سیستم فایل درون فایلی بنام FsImage ذخیره می شوند. FsImage خود نیز بعنوان یک فایل درون NameNode محلی ذخیره می شود.

NameNode یک تصویر از فضای نامی سیستم فایل و نقشه بلاکی فایل های درون حافظه خود را نگهداری می کند. این متاداده طوری طراحی شده است که فشرده باشد و بعنوان مثال یک NameNode با 4GB رم برای پوشش تعداد بسیار زیادی فایل و دایرکتوری کافی می باشد.

وقتی که NameNode بالا می آید، FsImage و EditLog را از روی دیسک می خواند و تمام تغییرات ثبت شده در EditLog را بر روی FsImage اعمال می کند و نسخه جدید FsImage را ذخیره می کند. این فرایند را Checkpoint می نامند. در  پیاده سازی فعلی HDFS، Checkpoint تنها در زمان بالا آمدن NameNode فعال می شود. طراحان به دنبال اضافه کردن امکان Checkpoint گیری در بازه های زمانی مختلف می باشند.

DataNodeها داده های HDFS را درون فایل های درون خود ذخیره می کنند. DataNode هیچ دانشی درباره این فایل ها ندارد. هر بلوک داده ای را درون یک فایل جداگانه ذخیره می کند. DataNode همه فایل ها را درون یک دایرکتوری ذخیره نمی کند بلکه با استفاده از یک تابع هیروستیک(heuristic یا پیشگو) بهترین حالت تقسیم بندی فایل ها در مسیرها را پیدا می کند. عملا کار درستی هم نیست که تمام فایل ها درون یک دایرکتوری نگهداری شوند چون ممکن است سیستم نتواند این تعداد فایل را در یک دایرکتوری پشتیبانی کند. هنگامیکه DataNode بالا می آید، یک بررسی بر روی فایل موجود در خود انجام می دهد و لیستی از فایل های موجود به NameNode ارسال می کند.

ادامه این مطالب را نیز پیگیری کنید.

مطالعه قسمت اول مطلب سیستم فایل HDFS

مطالعه قسمت دوم مطلب سیستم فایل HDFS

مطالعه قسمت سوم مطلب سیستم فایل HDFS

مطالعه قسمت آخر مطلب سیستم فایل HDFS

درباره

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

۳ دیدگاه ها

ارسال دیدگاه