سیستم فایل hdfs

23
ستم فایل سیHDFS ی رضای ناصر[email protected]

Upload: nasser-rezaei

Post on 10-Feb-2017

216 views

Category:

Data & Analytics


1 download

TRANSCRIPT

Page 1: سیستم فایل HDFS

HDFSسیستم فایل ناصر رضایی

[email protected]

Page 2: سیستم فایل HDFS

مقدمه

مجزا ( node)یوتر وقتی که اندازه یک دیتاست از ظرفیت ذخیره سازی کامپیوتر بیشتر می شود نیاز است تا آن را روی تعدادی کامپ•.قسمت کنیم

.ده می گویندبه سیستم فایل هایی که فضای ذخیره سازی را روی شبکه ای از ماشین ها مدیریت می کنند سیستم فایل توزیع ش•

.نام داردHadoop ،HDFSسیستم فایل توزیع شده •

Page 3: سیستم فایل HDFS

HDFSطراحی

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

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

به HDFS. احتیاجی به سخت افزارهای گران قیمت با مقاومت در برابر خرابی نداردHadoop: سخت افزار معمولی•.ها حداکثر با وقفه ای جزئی کار خود را ادامه دهدnodeگونه ای طراحی شده است که در مقابل خرابی های

•HDFSبا موارد زیر سازگار نیست:کار نمی HDFSبا اپلیکیشن هایی که نیاز به دسترسی با تاخیر کم دارند به خوبی: دسترسی به داده ها با تاخیر کم•

.کننددر حافظه اصلی نگه داری می شود محدودیت تعداد فایل های namenodeاز آن جایی که : تعداد زیاد فایل کوچک•

.بستگی داردnamenodeسیستم به میزان حافظه همیشه . توسط یک منبع نوشته می شوندHDFSفایل ها در : چند نویسنده؛ تغییر در فایل ها به صورت تصادفی•

.نمی توان در آفست خاصی از فایل تغییرات ایجاد کرد(. Append)محتویات به انتهای فایل اضافه می شود

Page 4: سیستم فایل HDFS

HDFSمفاهیم

•Block :بایت است در 512بالک دیسک معموال . بالک کوچک ترین واحد خواندن و نوشتن در دیسک است.حالی که بالک سیستم فایل معموال ضریبی از بالک دیسک است

•HDFS فایل ها در (پیش فرض)مگابایت 128هم مفهوم بالک را دارد منتها با اندازه بزرگ ،HDFS در قطعه هایی به اندازه بالکدازه بالک به این ان. برخالف سیستم فایل تک دیسکی فایلی با انداز کمتر از بالک تمام آن را اشغال نمی کند. ذخیره می شوند

.ک باشددلیل در سیستم بزرگ است که زمان خواندن تمام بالک بایستی خیلی بیشتر از زمان رسیدن به ابتدای بال

ماشین مجزا ( 3معموال )برای اطمینان از اینکه بالک در خرابی های سخت افزاری از بین نمی رود، هر بالک در تعداد محدودی •.کپی می شود

Page 5: سیستم فایل HDFS

Namenode وDatanode

•:Namenode فضای نام(namespace)ل ها را سیستم فایل را مدیریت می کند و متادیتای دایرکتوری ها و فای.در سیستم فایل نگه داری می کند

، همچنین edit logو namespace image: فایل نگه داری می شوند2این اطالعات به صورت دائمی در دیسک محلی در قالب •namenode تمامdatanodeهای مربوط به یک فایل خاص را می شناسد.

•Datanode :ده در وظیفه اش نگه داری و بازیابی بالک در هنگام فراخوانی و ارائه گزارش بالک های ذخیره ش.استnamenodeفاصله های زمانی به

Page 6: سیستم فایل HDFS

namenodeمحافظت از

را از خراب شدن namenodeبه همین دلیل بایستی . سیستم فایل بالاستفاده می گرددnamenodeبدون •:دو امکان را فراهم می کندHadoopبدین منظور . برحذر داشت

.که در سیستم های فایل متفاوت ذخیره می شود: پشتیبان گیری از متادیتای سیستم-1•

وظیفه اصلی آن ادغام تصویر . عمل نمی کندnamenodeکه برخالف نامش مثل یک : ثانویهnamenodeاستفاده از -2•namenode باedit log است تا اندازهedit logخیلی بزرگ نشود .Namenodeثانویه روی ماشین مجزایی ساخته می شود.

Page 7: سیستم فایل HDFS

کش کردن بالک

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

.هایی اجرا کند که بالک را کش کرده اندdatanodeها را روی Taskزمانبند کار می تواند •

.یک مخزن کش می تواند مدیریت دسترسی کش ها و استفاده از منابع را در اختیار بگیرد•

Page 8: سیستم فایل HDFS

HDFS Federation وHA

•HDFS Federation : این امکان را می دهد که در کالسترهای خیلی بزرگ چندnamenode داشته باشیم و هرnamenodeمثال یکی . مدیریت قسمتی از فضای نام سیستم فایل را در اختیار بگیرد/user و فایل ها و دایرکتوری

share/های درون آن و دیگری

•HDFS High Availability (HA) : ترکیب کپی کردن متادیتایnamenode روی چند سیستم فایل و استفاده ازnamenode ثانویه برای ساختcheckpoint سیستم را در برابر از دست دادنnamenodeاما اگر . بیمه می کندnamenode از کار بیفتد سیستم به دلیل تاخیر در بازیابیnamenode( دقیقه یا 30که در سیستم های بزرگ تا

.با مشکل بزرگی روبرو می شود( بیشتر می تواند زمان ببرد•Hadoop این مشکل را با اضافه کردنHA حل کرده است که در آن یک جفتnamenodeآماده به کار -در حالت های فعال

.آماده به کار بدون تاخیر قابل توجه راه اندازی می شودnamenodeفعال دچار مشکل شد namenodeوقتی که . وجود دارند

.بعضی تغییرات زیر الزم استHAبرای راه اندازی ••Namenode باید دارای حافظه اشتراکی برای اشتراکedit logباشد .edit log در هنگام از کار افتادگی برای بازیابی آخرین

.اصلی استفاده می شودnamenodeوضعیت •Datanode ها باید گزارش بالک ها را به هر دوnamenodeبدهند.•Client ها باید بتوانند خرابیnamenodeرا مدیریت کنند.NFS Filer2-QJM-1: وجود داردHAدو انتخاب برای حافظه اشتراکی •

Page 9: سیستم فایل HDFS

معیوبnamenodeتشخیص و قرنطینه کردن

•Failover : یکjob کوچک در هرnamenode است که وظیفه اش تشخیص خرابیnamenodeاست .Failover ها معموال ازZooKeeper برای تشخیص معیوب شدنnamenodeاستفاده می کنند.

•Fencing : متدی است که مانع ایجاد تغییرات ناخواستهnamenode معیوب که ممکن است موجب.مشکل در کالستر گردد، می شود

Page 10: سیستم فایل HDFS

Command-Lineرابط

سیستم فایل استفاده روی سیستم می توان از رابط های مختلفی برای کار باHadoopپس از راه اندازی •Commandمهم ترین آن . کرد lineاست.

:تعدادی از فرمان های ابتدایی سیستم فایل••fs خط فرمان سیستم فایلHadoop ای که تعدادی زیر دستور برای کار در سیستم فایل در خود جرا فراخوانی می کند

.داده است• % hadoop fs -copyFromLocal input/docs/quangleLocal.txt /user/tom/quangleHDFS.txt

.منتقل می کندHDFSبه آدرس تعیین شده روی (inputپوشه )فایل را از مسیر محلی •• % hadoop fs -copyToLocal quangleHDFS.txt quangleLocal.txt

.به سیستم فایل محلی کپی می کندHadoopفایل را از کالستر •• % hadoop fs -mkdir books .یک پوشه در سیستم فایل می سازد• % hadoop fs -ls .

• Found 2 items

• drwxr-xr-x - tom supergroup 0 2014-10-04 13:22 books

• -rw-r--r-- 1 tom supergroup 119 2014-10-04 13:21 quangleHDFS.txt

وشه برای پ)دسترسی های فایل را مشخص می کند، ستون دوم تعداد کپی ها از فایل namenodeستون اول در خروجی •. دمی کن، ستون سوم و چهارم کاربر و گروه آن را مشخص (قرار دارند این ستون بی معنی استnamenodeچون در ها

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

Page 11: سیستم فایل HDFS

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

مجموعه دسترسی هایی است که برای کاربر mode. داردmodeو owner ،groupهر فایل یا پوشه یک •در نظر مالک، گروه کاربری مالک و کاربرانی که نه مالک هستند و نه عضو گروه کاربری مالک هستند

.گرفته می شود

:دسترسی های فایل و پوشه ها در جدول زیر آمده است•

پوشه فایل دسترسی

خواندن محتویات پوشه خواندن فایل (r)خواندن

شهحذف و اضافه کردن فایل های پو لدر فاینوشتن (w)نوشتن

دسترسی به فرزندان نداردوجود (x)اجرا کردن

Page 12: سیستم فایل HDFS

Hadoopسیستم های فایل

•Hadoop چند نوع سیستم فایل تعریف کرده است کهHDFSتنها یک نمونه آن است .

•Hadoop از قالبURIن فایل های مثال برای لیست کرد.برای پیدا کردن سیستم فایل استفاده می کندrootروی دیسک محلی دستور زیر را وارد می کنیم:

• % hadoop fs –ls file:///

Page 13: سیستم فایل HDFS

Hadoopسیستم های فایل

توضیحات (org.apache.hadoopتحت )Javaسازی پیاده URIقالب سیستم فایل

محلیchecksumفایلی برای دیسک محلی با کنترل سیستم fs.LocalFileSystem file Local

MapReduceهماهنگ شده با . Hadoopشده سیستم فایل توزیع hdfs.DistributedFileSystem hdfs HDFS

.با امکان احراز هویت را فراهم می کندHDFSفایلی که امکان خواندن از سیستم hdfs.web.WebHdfsFileSystem webhdfs WebHDFS

WebHDFSاز HTTPSنسخه hdfs.web.SWebHdfsFileSystem swebhdfs Secure WebHDFS

برای کاستن فایلی که روی سیستم فایل دیگری سوار می شود و فایل ها راسیستم.آرشیو می کندnamenodeاز حافظه استفاده شده توسط

fs.HarFileSystem har HAR

معموال . Hadoopجدول اتصال سمت کالینت برای سایر سیستم های فایل یک.شوداستفاده میFederated namenodeبرای ساختن نقطه اتصال به

viewfs.ViewFileSystem viewfs View

برگردانده می شودFTPسیستم فایلی که با fs.ftp.FTPFileSystem ftp FTP

Amazon S3فایل سیستم fs.s3a.S3AFileSystem s3a S3

Microsoft Azureفایلسیستم fs.azure.NativeAzureFileSystem wasb Azure

OpenStackفایل سیستم Swift fs.swift.snative.SwiftNativeFileSystem swift Swift

Page 14: سیستم فایل HDFS

رابط1

HDFSهای

•Hadoopبه جاوا نوشته شده است.

.نوشته شده اندHDFSبرای دسترسی به Hadoopزیادی در رابط های •

•HTTP : رابطی است که به برنامه های غیر جاوا امکان دسترسی بهHDFS را از طریق پروتکلHDFS REST APIدو راه برای دسترسی به . می دهدHDFS از طریقHTTPوجود دارد.

را رسیدگی HTTPبه صورت مستقیم درخواست های HDFS( daemons)پردازش های پس زمینه : مستقیم•.می کنند

.proxyاز طریق : غیرمستقیم•

•C :Hadoop یک کتابخانهC به نامlibfs برای دسترسی بهHDFS و سایر سیستم های فایلHadoop فراهم کرده است که از

2JNI برای فراخوانی سیستم فایلclientجاوا استفاده می کند .

.استفاده می کند، معرفی شده استwebhdfsکه از رابط libwebhdfsهمچنین 1 Interface

Page 15: سیستم فایل HDFS

Javaرابط

.نوشتHadoopمی توان با استفاده از رابط کاربری جاوا کدهای شخصی شده برای سیستم های فایل •

د را از طریق اتصال فایل به استریم استاندار HDFSبرای نمایش محتویات یک فایل در catمثال زیر دستور •.خروجی را پیاده سازی می کند

سیستم فایل ;URL.setURLStreamHandlerFactory(new FsUrlStreamHandlerFactory())جاوا با استفاده از دستور •HDFS را می شناسد، این فراخوانی باید یکبار انجام پذیرد به همین دلیل آن را در بالکstaticقرار داده ایم.

• % export HADOOP_CLASSPATH=hadoop-examples.jar : فراخوانی در خط فرمان

• % hadoop URLCat hdfs://localhost/user/tom/quangle.txt1

1Source codes at: https://github.com/tomwhite/hadoop-book

Page 16: سیستم فایل HDFS

ساختار خواندن فایل

Page 17: سیستم فایل HDFS

ساختار خواندن فایل

.، فایلی را که میخواهد بخواند را صدا می زندFileSystemدر شی ()openکالینت با صدا زدن تابع -1

2-DistributedFileSystem ،namenode را از طریقRPC1

برای مشخص کردن مکان اولین بالک های فایل صدا می .هایی که یک کپی از آن بالک را دارند را برمی گرداندdatanodeآدرس namenodeبرای هر بالک، . زند

3-DistributedFileSystem یکFSDataInputStreamرا به کالینت برای خواندن فایل بر می گرداند.

وصل می datanodeبه نزدیک ترین DFSInputStreamو از طریق . را روی استریم صدا می زند()readکالینت -4.شود

را datanodeرا می بندد و سپس بهترین datanodeاتصال به DFSInputStreamوقتی به انتهای بالک می رسیم، -5.برای بالک بعدی پیدا می کند

.صدا می زند FSDataInputStreamرا از()closeوقتی که کالینت خواندن را تمام کرد، -6مواجه شد، نزدیک ترین بالک بعدی را بازیابی می datanodeبا خطایی در خواندن از DFSInputStreamاگر در طول خواندن •

.ی که با خطا مواجه شده است برای بالک های بعدی صرفنظر می کندdatanodeکند و از •DFSInputStream ،checksumاگر بالک خرابی یافت شد سعی می کند کپی دیگری از . بالک را نیز چک می کندdatanode

.گزارش کندnamenodeبخواند و خرابی را به

1Remote Procedure Call

Page 18: سیستم فایل HDFS

Hadoopتوپولوژی شبکه ای

•Hadoop سعی می کند نزدیک ترینnode بدین منظور . معرفی کندبالک برای خواندن راHadoop :پردازش ها را به دسته های زیر تقسیم می کند

.nodeپردازش های متعلق به یک -1•

•2-node های مختلف یکrack.

•3-node هایی باrackمتفاوت.

•4-node هایی با دیتاسنتر متفاوت(Hadoopهنوز این قابلیت را ندارد.)

Page 19: سیستم فایل HDFS

ساختار نوشتن در فایل

Page 20: سیستم فایل HDFS

ساختار نوشتن در فایل

را برای صدا RPCیک DistributedFileSystem. می سازدDistributedFileSystemاز ()createکالینت فایل را با صدا زدن -1.بسازدnamespaceمی سازد که فایل جدیدی در namenodeزدن

2-namenodeاخت بررسی های مختلفی انجام می دهد تا مطمئن شود که فایل از قبل وجود نداشته است و کالینت اجازه س.را به کالینت برای نوشتن اطالعات بر می گرداندFSDataOutputStreamیک DistributedFileSystem. فایل را دارد

ام آن را به بسته هایی تقسیم می کند که در یک صف داخلی به نDFSOutputStreamوقتی که کالینت داده ها را می نویسد -3data queueنوشته می شود .Data queue توسطDataStreamer خوانده می شود که لیستی ازdatanode های مناسب برای

.نگه داری کپی ها را می دهد

( replication level)به اندازه درجه تکرار pipelineهای datanodeتعداد . را می سازدpipelineها یک datanodeلیست -4اولی به دومی، دومی به . تا آخرین آن استریم می شودpipelineدر datanodeسپس از اولین . است3است که به طور پیش فرض

...سومی و

5-DFSOutputStream یک صفack می سازد که در آن لیست بسته هایی که منتظر شناخته شدن توسطdatanode ها هستند.شناسایی شده باشدpipelineهای datanodeحذف می شود که توسط تمام ackیک بسته در صورتی از لیست . وارد می شود

.را روی استریم فراخوانی می کند()closeوقتی که کالینت نوشتن داده ها را تمام می کند -6

می فرستد و منتظر شناخته شدن بسته datanodeرا به datanodeمربوط به pipelineاین عمل تمام بسته های باقیمانده روی -7.از قبل می داند چه بالک هایی ساخته شده اندNamenode.برای اعالن تکمیل فایل می شودnamenodeها قبل از ارتباط با

Page 21: سیستم فایل HDFS

سیاست تکرار بالک

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

.نوشته می شودnodeاولین rackدیگری غیر از rackبالک دوم در •

.دوم نوشته می شودnodeمربوط به rackتصادفی از nodeبالک سوم در •

.های تصادفی روی کالستر نوشته می شودnodeبالک های بعد در •

Page 22: سیستم فایل HDFS

کپی موازی

دن فایل برای مثال می توان از این دستور برای کپی کر . استفاده کرد( چند نخی)برای کپی موازی distcpمی توان از دستور •:های پوشه ها به شیوه زیر استفاده کرد

• % hadoop distcp dir1 dir2

.معموال برای انتقال اطالعات بین کالسترها یا بک آپ گرفتن استفاده می شودdistcpاز •

• % hadoop distcp -update -delete -p hdfs://namenode1/foo hdfs://namenode2/foo

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

Page 23: سیستم فایل HDFS

منابع

• White, Tom. Hadoop: The definitive guide, 4th edition. " O'Reilly Media, Inc.", 2015.