مقدمة متعمقة لبنية SQOOP

Apache Sqoop هي أداة لاستيعاب البيانات مصممة لنقل البيانات المجمعة بكفاءة بين Apache Hadoop ومخازن البيانات المنظمة مثل قواعد البيانات العلائقية والعكس صحيح.

كجزء من هذه المدونة ، سأشرح كيف تعمل الهندسة المعمارية على تنفيذ أمر Sqoop. سأغطي تفاصيل مثل إنشاء الجرة عبر Codegen وتنفيذ مهمة MapReduce والمراحل المختلفة التي ينطوي عليها تشغيل أمر استيراد / تصدير Sqoop.

كودجن

يعد فهم Codegen أمرًا ضروريًا ، حيث يعمل هذا داخليًا على تحويل مهمة Sqoop إلى جرة تتكون من عدة فئات Java مثل POJO و ORM وفئة تنفذ DBWritable ، مما يمدد SqoopRecord لقراءة وكتابة البيانات من قواعد البيانات العلائقية إلى Hadoop & Vice- بالعكس.

يمكنك إنشاء Codegen بشكل صريح كما هو موضح أدناه للتحقق من الفئات الموجودة كجزء من الجرة.

sqoop codegen \ -- connect jdbc:mysql://ms.jayReddy.com:3306/retail_db \ -- username retail_user \ -- password ******* \ -- table products

ستتم كتابة جرة الإخراج في نظام الملفات المحلي لديك. ستحصل على ملف Jar وملف Java وملفات جافا التي يتم تجميعها في ملفات .class:

دعنا نرى مقتطفًا من الكود الذي سيتم إنشاؤه.

فئة ORM لجدول "المنتجات" // النموذج العلائقي للكائنات الذي تم إنشاؤه لرسم الخرائط:

طرق Setter & Getter للحصول على القيم:

داخليًا ، يستخدم عبارات JDBC المعدة للكتابة إلى Hadoop و ResultSet لقراءة البيانات من Hadoop.

سقوب للاستيراد

يتم استخدامه لاستيراد البيانات من قواعد البيانات العلائقية التقليدية إلى Hadoop.

دعونا نرى عينة مقتطف لنفسه.

sqoop import \ -- connect jdbc:mysql://ms.jayReddy.com:3306/retail_db \ -- username retail_user \ -- password ******* \ -- table products \ -- warehouse-dir /user/jvanchir/sqoop_prac/import_table_dir \ -- delete-target-dir

يتم تنفيذ الخطوات التالية داخليًا أثناء تنفيذ sqoop.

الخطوة 1 : قراءة البيانات من MySQL بطريقة البث المباشر. يقوم بعمليات مختلفة قبل كتابة البيانات في HDFS.

كجزء من هذه العملية ، سيتم أولاً إنشاء رمز (رمز تقليل الخريطة النموذجي) وهو ليس سوى رمز Java. باستخدام كود Java هذا ، سيحاول الاستيراد.

  • قم بإنشاء الكود. (Hadoop MR)
  • قم بتجميع الكود وإنشاء ملف Jar.
  • قم بإرسال ملف الجرة وقم بإجراء عمليات الاستيراد

أثناء الاستيراد ، يتعين عليه اتخاذ قرارات معينة بشأن كيفية تقسيم البيانات إلى سلاسل رسائل متعددة بحيث يمكن تحجيم استيراد Sqoop.

الخطوة 2 : فهم بنية البيانات وتنفيذ CodeGen

باستخدام عبارة SQL أعلاه ، سيتم جلب سجل واحد مع أسماء الأعمدة. باستخدام هذه المعلومات ، سيتم استخراج معلومات البيانات الوصفية للأعمدة ونوع البيانات وما إلى ذلك.

الخطوة 3 : قم بإنشاء ملف java ، وقم بتجميعه وإنشاء ملف jar

كجزء من إنشاء الكود ، فإنه يحتاج إلى فهم بنية البيانات وعليه تطبيق هذا الكائن على البيانات الواردة داخليًا للتأكد من نسخ البيانات بشكل صحيح إلى قاعدة البيانات الهدف. يحتوي كل جدول فريد على ملف Java واحد يتحدث عن بنية البيانات.

سيتم حقن ملف jar هذا في ثنائيات Sqoop لتطبيق البنية على البيانات الواردة.

الخطوة 4 : احذف الدليل الهدف إذا كان موجودًا بالفعل.

الخطوة 5 : استيراد البيانات

هنا ، يتصل بمدير الموارد ويحصل على المورد ويبدأ التطبيق الرئيسي.

لأداء التوزيع المتساوي للبيانات بين مهام الخريطة ، فإنه ينفذ داخليًا استعلامًا حدوديًا استنادًا إلى المفتاح الأساسي افتراضيًا

للعثور على الحد الأدنى والحد الأقصى لعدد السجلات في الجدول.

استنادًا إلى الحد الأقصى للعدد ، سيتم تقسيمه على عدد مصممي الخرائط وتقسيمه بين كل مصمم خرائط.

يستخدم 4 مصممين خرائط افتراضيًا:

تقوم بتنفيذ هذه الوظائف على منفذين مختلفين كما هو موضح أدناه:

يمكن تغيير العدد الافتراضي لواضعي الخرائط عن طريق تعيين المعلمة التالية:

لذلك في حالتنا ، فإنه يستخدم 4 خيوط. يعالج كل مؤشر ترابط مجموعات فرعية حصرية بشكل متبادل ، أي أن كل مؤشر ترابط يعالج بيانات مختلفة عن الآخرين.

لمعرفة القيم المختلفة ، تحقق مما يلي:

العمليات التي يتم إجراؤها تحت كل عقد منفذ:

في حالة إجراء استيراد خلية Sqooop ، تتم خطوة واحدة إضافية كجزء من التنفيذ.

الخطوة 6 : نسخ البيانات إلى جدول الخلية

تصدير سكووب

يستخدم هذا لتصدير البيانات من Hadoop إلى قواعد البيانات العلائقية التقليدية.

دعونا نرى مقتطفًا نموذجيًا لنفسه:

sqoop export \ -- connect jdbc:mysql://ms.jayReddy.com:3306/retail_export \ -- username retail_user \ -- password ******* \ -- table product_sqoop_exp \ -- export-dir /user/jvanchir/sqoop_prac/import_table_dir/products

On executing the above command, the execution steps (1–4) similar to Sqoop import take place, but the source data is read from the file system (which is nothing but HDFS). Here it will use boundaries upon block size to divide the data and it is internally taken care by Sqoop.

The processing splits are done as shown below:

After connecting to the respective database to which the records are to be exported, it will issue a JDBC insert command to read data from HDFS and store it into the database as shown below.

Now that we have seen how Sqoop works internally, you can determine the flow of execution from jar generation to execution of a MapReduce task on the submission of a Sqoop job.

Note: The commands that were executed related to this post are added as part of my GIT account.

Similarly, you can also read more here:

  • Hive Architecture في العمق مع الكود .
  • بنية HDFS في العمق مع التعليمات البرمجية .

إذا كنت ترغب أيضًا ، يمكنك التواصل معي على LinkedIn - Jayvardhan Reddy.

إذا كنت قد استمتعت بقراءة هذا المقال ، فيمكنك النقر فوق التصفيق وإعلام الآخرين بذلك. إذا كنت تريد مني إضافة أي شيء آخر ، فلا تتردد في ترك رد؟