برنامج تعليمي لـ Apache Sqoop: Archiالبنية، الأوامر، والأمثلة
⚡ ملخص ذكي
يقوم Apache Sqoop بنقل البيانات الضخمة بين قواعد البيانات العلائقية وHDFS باستخدام بنية موصل، مما يؤدي إلى إنشاء وظائف MapReduce التي تستورد الجداول إلى Hive أو HBase وتصدير النتائج المعالجة مرة أخرى إلى النظام المصدر.
ما هو SQOOP في Hadoop؟
اباتشي سكووب (SQL-to-Hadoop) هي أداة مصممة لدعم تصدير واستيراد البيانات بكميات كبيرة إلى HDFS من مخازن البيانات المهيكلة مثل قواعد البيانات العلائقية، ومستودعات بيانات المؤسسات، وأنظمة NoSQL. وهي أداة لترحيل البيانات تعتمد على بنية موصل تدعم الإضافات لتوفير الاتصال بالأنظمة الخارجية الجديدة.
مثال على حالة استخدام Hadoop Sqoop هي مؤسسة تقوم بتشغيل استيراد Sqoop ليلاً لتحميل بيانات اليوم من RDBMS لمعاملات الإنتاج إلى خلية النحل مستودع البيانات لمزيد من التحليل.
في هذا البرنامج التعليمي Apache Sqoop، سنتعلم المزيد عن بنية Apache Sqoop.
سكوب Architecture
كل الموجود أنظمة إدارة قواعد البيانات مع SQL معيار في الاعتبار. ومع ذلك، يختلف كل نظام إدارة قواعد بيانات فيما يتعلق باللهجة إلى حد ما. لذلك، يشكل هذا الاختلاف تحديات عندما يتعلق الأمر بنقل البيانات عبر الأنظمة. تعتبر موصلات Sqoop مكونات تساعد في التغلب على هذه التحديات.
أصبح نقل البيانات بين Sqoop Hadoop ونظام التخزين الخارجي ممكنًا بمساعدة موصلات Sqoop.
يحتوي Sqoop على موصلات للعمل مع مجموعة من قواعد البيانات العلائقية الشائعة، بما في ذلك MySQL, PostgreSQL, OracleوSQL Server وDB2. يعرف كل من هذه الموصلات كيفية التفاعل مع نظام إدارة قواعد البيانات المرتبط به. يوجد أيضًا موصل JDBC عام للاتصال بأي قاعدة بيانات تدعمه Javaبروتوكول JDBC الخاص بـ Sqoop. بالإضافة إلى ذلك، يوفر Sqoop أيضًا تحسينًا MySQL و PostgreSQL الموصلات التي تستخدم واجهات برمجة التطبيقات الخاصة بقاعدة البيانات لإجراء عمليات النقل المجمعة بكفاءة.
يوضح الرسم التخطيطي أدناه وضع عميل Sqoop بين مخزن البيانات الخارجي ومجموعة Hadoop، مع وجود طبقة الموصل على جانب واحد وHDFS وHive وHBase على الجانب الآخر.
أسفل طبقة الموصل، يقوم Sqoop بإنشاء Java فئة تعكس صفًا واحدًا من الجدول ثم ترسل خريطة فقط مابريديوس المهمة. تقرأ كل مهمة خريطة شريحة خاصة بها من نطاق العمود المنقسم، لذا فإن الإنتاجية تتناسب مع عدد الخرائط بدلاً من مؤشر JDBC واحد.
بالإضافة إلى ذلك، تمتلك Sqoop العديد من موصلات الطرف الثالث لمخازن البيانات، بدءًا من المؤسسات مستودعات البيانات (بما في ذلك Netezza وTeradata و Oracle) إلى متاجر NoSQL (مثل Couchbase). ومع ذلك، لا تأتي هذه الموصلات مع حزمة Sqoop؛ يجب تنزيلها بشكل منفصل ويمكن إضافتها بسهولة إلى تثبيت Sqoop الحالي.
لماذا نحتاج سكووب؟
تتطلب المعالجة التحليلية باستخدام Hadoop تحميل كميات هائلة من البيانات من مصادر متنوعة إلى مجموعات Hadoop. وتأتي عملية تحميل البيانات المجمعة إلى Hadoop، من مصادر غير متجانسة ثم معالجتها، مع مجموعة معينة من التحديات. ومن بين العوامل التي يجب مراعاتها قبل اختيار النهج الصحيح لتحميل البيانات الحفاظ على اتساق البيانات وضمانه وضمان الاستخدام الفعال للموارد.
القضايا الرئيسية:
- تحميل البيانات باستخدام البرامج النصية — إن الأسلوب التقليدي المتمثل في استخدام البرامج النصية لتحميل البيانات غير مناسب لتحميل البيانات بكميات كبيرة في Hadoop؛ فهذا الأسلوب غير فعال ويستغرق وقتاً طويلاً للغاية.
- الوصول المباشر إلى البيانات الخارجية عبر تطبيق MapReduce — إن توفير وصول مباشر إلى البيانات الموجودة في أنظمة خارجية (دون تحميلها في هادوب) لتطبيقات ماب-ريديوس يُعقّد هذه التطبيقات. لذا، فإن هذا النهج غير عملي.
إضافةً إلى قدرة هادوب على التعامل مع كميات هائلة من البيانات، فإنه يدعم التعامل مع البيانات بأشكال مختلفة. لذا، ولتحميل هذه البيانات المتنوعة إلى هادوب، تم تطوير أدوات مختلفة. سكوب و وهد هما أداتان لتحميل البيانات.
بعد ذلك في هذا البرنامج التعليمي لـ Sqoop مع الأمثلة، سنتعرف على الفرق بين Sqoop وFlume وHDFS.
Sqoop vs Flume vs HDFS في Hadoop
| سكوب | وهد | HDFS |
|---|---|---|
| يتم استخدام Sqoop لاستيراد البيانات من مصادر البيانات المنظمة مثل RDBMS. | يتم استخدام Flume لنقل بيانات التدفق المجمعة إلى HDFS. | HDFS هو نظام ملفات موزع يستخدمه نظام Hadoop لتخزين البيانات. |
| يعتمد Sqoop على بنية تعتمد على الموصلات. تعرف الموصلات كيفية الاتصال بمصدر البيانات المعني وجلب البيانات. | يتمتع Flume بهندسة تعتمد على الوكيل. هنا، تتم كتابة كود (يُطلق عليه اسم "الوكيل") والذي يتولى مهمة جلب البيانات. | يتمتع HDFS بهندسة موزعة حيث يتم توزيع البيانات عبر عقد بيانات متعددة. |
| HDFS هي وجهة لاستيراد البيانات باستخدام Sqoop. | تتدفق البيانات إلى HDFS من خلال قنوات صفرية أو أكثر. | HDFS هي الوجهة النهائية لتخزين البيانات. |
| لا يعتمد تحميل بيانات Sqoop على الأحداث. | يمكن أن يكون تحميل بيانات المسايل مدفوعًا بحدث ما. | يقوم HDFS فقط بتخزين البيانات المقدمة إليه بأي وسيلة كانت. |
| من أجل استيراد البيانات من مصادر البيانات المنظمة، يتعين على المرء استخدام أوامر Sqoop فقط، لأن موصلاتها تعرف كيفية التفاعل مع مصادر البيانات المنظمة وجلب البيانات منها. | من أجل تحميل البيانات المتدفقة مثل التغريدات التي تم إنشاؤها على تويتر أو ملفات السجل لخادم الويب، يجب استخدام Flume. تم تصميم وكلاء Flume لجلب بيانات التدفق. | يحتوي نظام ملفات Hadoop الموزع (HDFS) على أوامر سطر أوامر مدمجة لتخزين البيانات فيه. ولا يمكن لنظام HDFS استيراد البيانات المتدفقة. |
الميزات الرئيسية لـ Sqoop
توضح المقارنة أعلاه مكانة Sqoop. أما مجموعة الميزات أدناه فتحدد مدى ملاءمته لمهمة استيعاب بيانات محددة.
- حمولة كاملة: ينسخ أمر واحد جدولًا كاملاً، و
import-all-tablesيقوم بنسخ كل جدول في المخطط في عملية واحدة. - الحمل التزايدي:
appendطريقة tracks عمود متزايد بشكل رتيب مثل المفتاح البديل، بينماlastmodifiedطريقة tracks عمود الطابع الزمني، لذا فإن الصفوف الجديدة أو المتغيرة فقط هي التي تنتقل. - النقل المتوازي: يقسم العمود المنفصل نطاق المفاتيح عبر مهام الخريطة، ويحدد عدد عناصر الخريطة عدد المهام التي يتم تشغيلها في وقت واحد.
- استيراد الاستعلام الحر: يمكن استيراد نتيجة عبارة SQL عشوائية بدلاً من جدول كامل، مما يحافظ على عمليات الربط والتصفية على جانب قاعدة البيانات.
- التحميل المباشر إلى المستودع: يمكن لعملية الاستيراد إنشاء وتعبئة خلية النحل جدول أو الكتابة مباشرة في جدول HBase بدلاً من التوقفping في ملفات HDFS الخام.
- الضغط وتنسيقات الملفات: يمكن كتابة المخرجات كنص محدد، أو ملف تسلسلي، أو Avro، أو Parquet، مع ضغط اختياري على مستوى الترميز.
- الأمن: يتكامل Sqoop مع Kerberos، ويمكن قراءة بيانات الاعتماد من ملف كلمة المرور أو طلبها بدلاً من كتابتها على سطر الأوامر.
أوامر الاستيراد والتصدير في Sqoop
تتم عملية النقل في كلا الاتجاهين عبر أداة سطر أوامر واحدة. تقوم أداة الاستيراد بنقل الصفوف من قاعدة البيانات إلى هادوب، بينما تقوم أداة التصدير بنقل الملفات من هادوب إلى جدول قاعدة البيانات.
تتضمن عملية الاستيراد النموذجية أسماء اتصال JDBC، وجدول المصدر، ودليل الوجهة، وعمود التقسيم، وعدد وحدات الربط:
sqoop import \ --connect jdbc:mysql://localhost:3306/employees \ --username hadoop \ --password-file /user/hadoop/.mysql.password \ --table employees \ --target-dir /user/hadoop/warehouse/employees \ --split-by emp_no \ --num-mappers 4
عملية التصدير تعكس التدفق. فهي تقرأ الملفات المحددة الموجودة بالفعل في دليل HDFS وتدرجها في جدول موجود، لذلك يجب إنشاء الجدول الهدف أولاً:
sqoop export \ --connect jdbc:mysql://localhost:3306/employees \ --username hadoop \ --password-file /user/hadoop/.mysql.password \ --table employee_summary \ --export-dir /user/hadoop/warehouse/employee_summary \ --input-fields-terminated-by ','
نادراً ما تتطلب عملية الاستيراد الليلي استيراد الجدول بأكمله مرتين. يسجل الاستيراد التزايدي أعلى قيمة تم رصدها بالفعل، ويبدأ من تلك القيمة في التشغيل التالي.
sqoop import \ --connect jdbc:mysql://localhost:3306/sales \ --table orders \ --incremental append \ --check-column order_id \ --last-value 15000 \ --target-dir /user/hadoop/warehouse/orders
هذه هي الحجج التي تظهر في كل وظيفة تقريبًا:
| حجة | ما الذي يتحكم فيه |
|---|---|
--connect |
JDBC. URL من قاعدة البيانات المصدر أو الهدف. |
--table |
الجدول الذي تتم قراءته عند الاستيراد أو الكتابة إليه عند التصدير. |
--target-dir |
دليل HDFS الذي يستقبل عملية الاستيراد. يجب ألا يكون موجودًا بالفعل. |
--export-dir |
دليل HDFS الذي تُقرأ ملفاته بواسطة عملية تصدير. |
--split-by |
عمود يتم تقسيم نطاقه عبر مهام الخريطة. |
--num-mappers (-m) |
عدد مهام الخرائط المتوازية. القيمة الافتراضية هي أربعة. |
--incremental |
يختار append or lastmodified تغيير tracملك. |
--hive-import |
يقوم بإنشاء جدول Hive المطابق وتحميل البيانات المستوردة إليه. |
⚠️ احذر: لا تُعدّ عملية التصدير معاملةً واحدة. فكل مهمة ربط تُنفّذ دفعتها الخاصة، لذا فإنّ حدوث عطل في منتصف العملية قد يُبقي جزءًا من البيانات في الجدول الهدف. لذا، يُنصح بتوجيه عملية الكتابة عبر جدول وسيط عندما يكون التحميل إما كاملاً أو لا شيء.
حالة مشروع سكوب والبدائل الحديثة
هناك تفصيل واحد مهم في الإصدار قبل أن يتم إدخال أي من الأوامر المذكورة أعلاه في جدولة التنفيذ.
صوّت مطورو مشروع Sqoop على إيقاف المشروع في يونيو 2021، والانتقال إلى أباتشي أتيك اكتمل المشروع في يوليو 2021. الموقع الإلكتروني، القوائم البريدية، مستودع Git، المشكلة tracلا تزال ملفات ker والتنزيلات متاحة، ولكن للقراءة فقط، ولا توجد خطط لإصدارات أخرى. آخر إصدار إنتاجي هو Sqoop 1.4.7 من عام 2017؛ أما سلسلة Sqoop 2 المنفصلة (1.99.x) فلم تصل إلى مستوى الميزات المكافئة ولم يتم الإعلان عنها جاهزة للاستخدام الإنتاجي.
لا تزال مهام Sqoop الحالية قيد التشغيل، وتستمر توزيعات Hadoop التجارية في شحن ودعم الأداة ضمن منصاتها الخاصة. ومع ذلك، عادةً ما تُبنى عمليات استيعاب البيانات الجديدة على أحد هذه الخيارات بدلاً من ذلك:
| البديل | أفضل ملاءمة |
|---|---|
| Spark مع مصدر بيانات JDBC | مثال على جدول الدفعاتtracالتي توجد بالفعل داخل Spark خط أنابيب، مع قراءات مجزأة بدلاً من أدوات الربط. |
| اباتشي نيفي | توجيه قائم على التدفق، ومُهيأ بصريًا بين العديد من الأنظمة غير المتجانسة. |
| Kafka Connect مع موصل CDC | التقاط بيانات التغيير المستمر بدلاً من نافذة الدفعات الليلية. |
| منصات ETL المُدارة مثل Talend | موصلات جاهزة، وجدولة، وتتبع سلسلة العمليات دون الحاجة إلى كتابة المهام يدويًا. |

