البرنامج التعليمي HDFS: Archiالتكنولوجيا والقراءة والكتابة Operaالإنتاج
⚡ ملخص ذكي
HDFS هي طبقة التخزين الموزعة في Hadoop، حيث تقوم بتقسيم الملفات الكبيرة جدًا إلى كتل مكررة عبر أجهزة عادية بحيث يتم تخزينها بواسطة NameNode واحد tracبيانات التعريف ks بينما تقوم العديد من عقد البيانات بتلبية طلبات القراءة والكتابة بشكل موثوق.
ما هو HDFS؟
نظام ملفات Hadoop الموزع (HDFS) هو نظام ملفات موزع لتخزين ملفات البيانات الضخمة جدًا، ويعمل على مجموعات من الأجهزة القياسية. يتميز بقدرته على تحمل الأعطال، وقابليته للتوسع، وسهولة توسيعه. يأتي Hadoop مزودًا بنظام HDFS (نظام ملفات Hadoop الموزع).
عندما تتجاوز البيانات سعة التخزين على جهاز مادي واحد، يصبح من الضروري تقسيمها على عدد من الأجهزة المنفصلة. يُطلق على نظام الملفات الذي يدير عمليات تخزين محددة عبر شبكة من الأجهزة اسم نظام الملفات الموزع. يعد HDFS أحد هذه البرامج.
HDFS Architecture
تتكون مجموعة HDFS بشكل أساسي من NameNode الذي يدير بيانات تعريف نظام الملفات و داتاينودس التي تخزن البيانات الفعلية.
- عقدة الاسم: يمكن اعتبار NameNode بمثابة المتحكم الرئيسي في النظام. فهو يحتفظ بشجرة نظام الملفات والبيانات الوصفية لجميع الملفات والمجلدات الموجودة في النظام. ويُستخدم ملفان، هما "صورة مساحة الاسم" و"سجل التحرير"، لتخزين معلومات البيانات الوصفية. يمتلك NameNode معلومات عن جميع DataNodes التي تحتوي على كتل بيانات لملف معين، ولكنه لا يخزن مواقع الكتل بشكل دائم. تُعاد بناء هذه المعلومات في كل مرة يبدأ فيها النظام من DataNodes.
- عقدة البيانات: تُعدّ عقد البيانات وحدات تابعة موجودة على كل جهاز في المجموعة، وتوفر التخزين الفعلي. وهي مسؤولة عن تلبية طلبات القراءة والكتابة من العملاء.
لأن عقدة الاسم الوحيدة ستكون نقطة فشل واحدة، فإن المجموعات الحالية تشغل عقدة اسم نشطة جنبًا إلى جنب مع عقدة اسم احتياطية تشارك سجل التحرير من خلال مجموعة من عقد JournalNodes، مع تجاوز الفشل التلقائي بين الاثنين.
تتم عمليات القراءة والكتابة في نظام ملفات Hadoop الموزع (HDFS) على مستوى الكتل. تُقسّم ملفات البيانات في HDFS إلى أجزاء بحجم كتل، تُخزّن كوحدات مستقلة. يبلغ حجم الكتلة الافتراضي 64 ميجابايت في Hadoop 1.x. أما في Hadoop 2.x وما بعده، فيختلف الحجم الافتراضي. حجم كتلة dfs 128 ميغا بايت.
يعتمد نظام ملفات Hadoop الموزع (HDFS) على مفهوم تكرار البيانات، حيث يتم إنشاء نسخ متعددة من كتل البيانات وتوزيعها على العقد في جميع أنحاء المجموعة لضمان توافر البيانات بشكل كبير في حالة تعطل إحدى العقد. عامل التكرار الافتراضي هو ثلاثة (dfs.replication), وعندما تتوقف عقدة البيانات عن إرسال إشارات النبض، تقوم عقدة الاسم تلقائيًا بإعادة نسخ كتلها في مكان آخر.
هل تعرف؟ الملف الموجود في HDFS، والذي يكون أصغر من كتلة واحدة، لا يشغل مساحة التخزين الكاملة للكتلة.
عرض Operaنشوئها في HDFS
يتم تلبية طلب قراءة البيانات بواسطة نظام ملفات Hadoop الموزع (HDFS) وعقدة الاسم (NameNode) وعقد البيانات (DataNodes). لنُطلق على قارئ البيانات اسم "العميل". يوضح الرسم البياني أدناه عملية قراءة الملفات في Hadoop.
- يقوم العميل ببدء طلب القراءة عن طريق استدعاء طريقة 'open()' لكائن FileSystem؛ وهو كائن من نوع DistributedFileSystem.
- يتصل هذا الكائن بـ NameNode باستخدام RPC ويحصل على معلومات البيانات الوصفية مثل مواقع كتل الملف. يُرجى ملاحظة أن هذه العناوين تخص الكتل القليلة الأولى من الملف.
- استجابةً لطلب البيانات الوصفية هذا، يتم إرجاع عناوين عقد البيانات التي تحتوي على نسخة من تلك الكتلة.
- بمجرد استلام عناوين عقد البيانات، يُعاد كائن من نوع FSDataInputStream إلى العميل. يحتوي FSDataInputStream على DFSInputStream الذي يتولى التفاعلات مع عقدة البيانات وعقدة الاسم. في الخطوة الرابعة الموضحة في الرسم التخطيطي أعلاه، يستدعي العميل الدالة 'read()' التي تُنشئ اتصالاً بين DFSInputStream وأول عقدة بيانات تحتوي على أول كتلة من الملف.
- تُقرأ البيانات على شكل تدفقات، حيث يستدعي العميل دالة القراءة () بشكل متكرر. وتستمر عملية القراءة هذه حتى تصل إلى نهاية الكتلة.
- بمجرد الوصول إلى نهاية الكتلة، يقوم DFSInputStream بإغلاق الاتصال وينتقل لتحديد موقع DataNode التالي للكتلة التالية.
- بمجرد أن ينتهي العميل من القراءة، فإنه يستدعي الدالة close().
كتابة Operaنشوئها في HDFS
في هذا القسم، سنتعرف على كيفية كتابة البيانات في نظام ملفات Hadoop الموزع (HDFS) من خلال الملفات. الرسم التخطيطي أدناه traces that write path.
- يبدأ العميل عملية الكتابة عن طريق استدعاء طريقة 'create()' لكائن DistributedFileSystem الذي يقوم بإنشاء ملف جديد - الخطوة رقم 1 في الرسم التخطيطي أعلاه.
- يتصل كائن نظام الملفات الموزع (DistributedFileSystem) بعقدة الاسم (NameNode) عبر استدعاء RPC، ويبدأ عملية إنشاء ملف جديد. مع ذلك، لا تُرفق عملية إنشاء الملف هذه أي كتل بيانات بالملف. تقع على عاتق عقدة الاسم مسؤولية التحقق من عدم وجود الملف (الذي يتم إنشاؤه) مسبقًا، ومن امتلاك العميل الصلاحيات اللازمة لإنشائه. في حال وجود الملف مسبقًا، أو عدم امتلاك العميل الصلاحيات الكافية لإنشائه، يتم إرسال استثناء IOException إلى العميل. وإلا، تنجح العملية، وتقوم عقدة الاسم بإنشاء سجل جديد للملف.
- بمجرد إنشاء سجل جديد في NameNode، يتم إرجاع كائن من نوع FSDataOutputStream إلى العميل. يستخدم العميل هذا الكائن لكتابة البيانات في HDFS. يتم استدعاء دالة كتابة البيانات (الخطوة 3 في الرسم التوضيحي).
- يحتوي FSDataOutputStream على كائن DFSOutputStream الذي يتولى الاتصال مع عقد البيانات وعقدة الاسم. بينما يواصل العميل كتابة البيانات، يواصل DFSOutputStream إنشاء حزم بيانات. تُضاف هذه الحزم إلى قائمة انتظار تُسمى DataQueue.
- يوجد مكون آخر يُسمى DataStreamer يستهلك قائمة انتظار البيانات هذه. كما يطلب DataStreamer من NameNode تخصيص كتل جديدة، وبالتالي يختار DataNodes المناسبة لاستخدامها في النسخ المتماثل.
- الآن، تبدأ عملية النسخ المتماثل عن طريق إنشاء خط أنابيب باستخدام DataNodes. في حالتنا، اخترنا مستوى النسخ المتماثل 3 وبالتالي هناك 3 DataNodes في طور التنفيذ.
- يقوم DataStreamer بصب الحزم في DataNode الأول في المسار.
- تقوم كل عقدة بيانات في خط الأنابيب بتخزين الحزمة التي استلمتها وإعادة توجيهها إلى عقدة البيانات الثانية في خط الأنابيب.
- يتم الاحتفاظ بقائمة انتظار أخرى، وهي "قائمة انتظار التأكيد"، بواسطة DFSOutputStream لتخزين الحزم التي تنتظر التأكيد من DataNodes.
- بمجرد استلام تأكيد استلام حزمة في قائمة الانتظار من جميع عقد البيانات في خط الأنابيب، يتم إزالتها من "قائمة الانتظار للتأكيد". وفي حالة فشل أي عقدة بيانات، يتم استخدام الحزم من هذه القائمة لإعادة بدء العملية.
- بعد أن ينتهي العميل من كتابة البيانات، يستدعي الدالة close() (الخطوة 9 في الرسم التوضيحي). يؤدي استدعاء الدالة close() إلى إرسال حزم البيانات المتبقية إلى خط الأنابيب، ثم انتظار تأكيد الاستلام.
- بمجرد استلام الإقرار النهائي، يتم الاتصال بـ NameNode لإبلاغه بأن عملية كتابة الملف قد اكتملت.
الوصول إلى نظام ملفات Hadoop الموزع (HDFS) باستخدام Java API
في هذا القسم، نحاول فهم Java الواجهة المستخدمة للوصول إلى نظام ملفات Hadoop.
من أجل التفاعل مع نظام ملفات Hadoop برمجيًا، يوفر Hadoop العديد من Java تحتوي الحزمة المسماة org.apache.hadoop.fs على فئات مفيدة في التعامل مع الملفات في نظام ملفات Hadoop. تشمل هذه العمليات الفتح والقراءة والكتابة والإغلاق. واجهة برمجة تطبيقات ملفات Hadoop عامة ويمكن توسيعها للتفاعل مع أنظمة ملفات أخرى غير HDFS.
قراءة ملف من HDFS، برمجيا
كائن java.net.URL يستخدم لقراءة محتويات الملف. للبدء، نحن بحاجة إلى القيام بذلك Java التعرف على نظام ملفات Hadoop المسمى hdfs URL مخطط. يتم ذلك عن طريق استدعاء المجموعةURLطريقة StreamHandlerFactory في URL يتم تمرير نسخة من FsUrlStreamHandlerFactory إلى الكائن. يجب تنفيذ هذه الطريقة مرة واحدة فقط لكل JVMومن ثم فهو محاط بكتلة ثابتة.
مثال على الكود هو-
public class URLCat { static { URL.setURLStreamHandlerFactory(new FsUrlStreamHandlerFactory()); } public static void main(String[] args) throws Exception { InputStream in = null; try { in = new URL(args[0]).openStream(); IOUtils.copyBytes(in, System.out, 4096, false); } finally { IOUtils.closeStream(in); } } }
يقوم هذا الكود بفتح ملف وقراءة محتوياته. ويتم تمرير مسار هذا الملف على نظام ملفات Hadoop الموزع (HDFS) إلى البرنامج كوسيط في سطر الأوامر.
الوصول إلى نظام ملفات Hadoop الموزع (HDFS) باستخدام واجهة سطر الأوامر
هذه إحدى أبسط الطرق للتفاعل مع نظام ملفات Hadoop الموزع (HDFS). تدعم واجهة سطر الأوامر عمليات نظام الملفات مثل قراءة الملفات، وإنشاء الدلائل، ونقل الملفات، وحذف البيانات، وعرض محتويات الدلائل.
يمكننا الجري '$HADOOP_HOME/bin/hdfs dfs -مساعدة' للحصول على مساعدة مفصلة حول كل أمر. هنا، 'dfs' هو أمر shell خاص بنظام ملفات Hadoop الموزع (HDFS) يدعم أوامر فرعية متعددة. في إصدارات Hadoop الحالية نظام الملفات الموزعة HDFS الشكل المفضل، بينما الشكل الأقدم نظام ملفات هادوب يؤدي الأمر نفس العمل لأي نظام ملفات مدعوم.
مذكور أدناه بعض الأوامر المستخدمة على نطاق واسع مع بعض التفاصيل الخاصة بكل منها.
1. انسخ ملفًا من نظام الملفات المحلي إلى HDFS
$HADOOP_HOME/bin/hdfs dfs -copyFromLocal temp.txt /
يقوم هذا الأمر بنسخ الملف temp.txt من نظام الملفات المحلي إلى HDFS، كما هو موضح في المخرجات أدناه.
2. يمكننا عرض قائمة الملفات الموجودة في دليل باستخدام الأمر -ls
$HADOOP_HOME/bin/hdfs dfs -ls /
في القائمة أدناه يمكننا أن نرى الملف 'temp.txt' (الذي تم نسخه سابقًا) ضمن الدليل ' / '.
3. أمر لنسخ ملف إلى نظام الملفات المحلي من HDFS
$HADOOP_HOME/bin/hdfs dfs -copyToLocal /temp.txt
يُحاكي هذا الأمر الأمر -get ويقبل مسار وجهة محليًا صريحًا كوسيط ثانٍ. يُظهر الناتج أدناه نسخ الملف temp.txt إلى نظام الملفات المحلي.
4. الأمر لإنشاء دليل جديد
$HADOOP_HOME/bin/hdfs dfs -mkdir /mydirectory
يتم تنفيذ الأمر بصمت، كما هو موضح في الرسالة أدناه.
تحقق مما إذا كان المجلد قد تم إنشاؤه أم لا. الآن، يفترض أنك تعرف كيفية القيام بذلك 😉




