SlideShare a Scribd company logo
‫لظهور‬ ‫أدت‬ ‫التي‬ ‫المشكلة‬ ‫ما‬Sqoop‫؟‬
‫الكبير‬ ‫االزدياد‬ ‫مع‬‫في‬ ‫مؤخرا‬‫البيانات‬ ‫حجم‬‫وتنوعها‬‫الـ‬ ‫مفهوم‬ ‫ظهر‬Big Data‫تقنيات‬ ‫تستخدم‬ ‫الشركات‬ ‫وبدأت‬‫بيئة‬ ‫مثل‬
‫الموزعة‬ ‫والمعالجة‬ ‫التخزين‬Hadoop
Hadoop‫الـ‬ ‫وتعالج‬ ‫تخزن‬Big Data‫معالجة‬ ‫بيئات‬ ‫باستخدام‬‫مثل‬:MapReduce ,Hive ,Hbase ,Pig‫وبيئات‬
‫تخزين‬‫م‬‫ث‬‫ل‬:HDFS‫من‬ ‫لالستفادة‬ ‫وذلك‬‫والتخزين‬ ‫المعالجة‬‫الموزع‬.
‫باستخدام‬ ‫البيانات‬ ‫هذه‬ ‫بتحليل‬ ‫نقوم‬ ‫أن‬ ‫يمكن‬ ‫كيف‬ ‫عالئقية‬ ‫معطيات‬ ‫قاعدة‬ ‫ضمن‬ ‫بيانات‬ ‫لدينا‬ ‫بفرض‬Hadoop‫؟‬
‫بكتابة‬ ‫يقوموا‬ ‫أن‬ ‫المطورون‬ ‫اعتاد‬scripts‫إلى‬ ‫البيانات‬ ‫لتحمل‬Hadoop‫فعالة‬ ‫غير‬ ‫طريقة‬ ‫لكنها‬
‫طريق‬ ‫عن‬ ‫معطيات‬ ‫قاعدة‬ ‫ضمن‬ ‫المخزنة‬ ‫للبيانات‬ ‫الوصول‬MapReduce‫للخطأ‬ ‫وعرضة‬ ‫أيضا‬ ‫فعال‬ ‫غير‬ ‫أمر‬ ‫هو‬
‫قبل‬ ‫من‬ ‫إليها‬ ‫الوصول‬ ‫قبل‬ ‫المعطيات‬ ‫قاعدة‬ ‫ضمن‬ ‫للبيانات‬ ‫مسبق‬ ‫بتحضير‬ ‫القيام‬ ‫يجب‬Hadoop
‫نقل‬ ‫أن‬ ‫نالحظ‬‫و‬ ‫العالئقية‬ ‫المعطيات‬ ‫قواعد‬ ‫بين‬ ‫البيانات‬Hadoop‫التقليدية‬ ‫بالطرق‬‫وتعقيدات‬ ‫صعوبة‬ ‫يحوي‬‫تقنية‬
‫الحل‬:‫ظهرت‬Apache Sqoop
‫األداة‬ ‫هي‬ ‫ما‬Sqoop‫؟‬
Sqoop‫لـ‬ ‫اختصار‬SQL + Hadoop
open source framework‫مقدمة‬‫قبل‬ ‫من‬Apache
‫إلى‬ ‫العالئقية‬ ‫المعطيات‬ ‫قواعد‬ ‫من‬ ‫البيانات‬ ‫لنقل‬ ‫أداة‬Hadoop‫وبالعكس‬.
‫مثل‬ ‫العالئقية‬ ‫المعطيات‬ ‫قواعد‬:Oracle, MySQL, Postgres, Teradata
‫وإلى‬ ‫من‬ ‫البيانات‬ ‫وتصدير‬ ‫استيراد‬ ‫يتم‬Hadoop Distributed File System (HDFS)
‫جانب‬ ‫إلى‬HDFS‫وإلى‬ ‫من‬ ‫البيانات‬ ‫وتصدير‬ ‫استيراد‬ ‫يمكن‬Hadoop eco-systems‫مثل‬Hive‫و‬HBase
‫تستخدم‬MapReduce‫وإلى‬ ‫من‬ ‫البيانات‬ ‫لنقل‬Hadoop‫التوازي‬ ‫على‬ ‫نقل‬ ‫يوفر‬ ‫مما‬(‫الوقت‬ ‫بنفس‬)‫للبيانات‬
‫استخدام‬ ‫حاالت‬Use Cases
‫العالئقية‬ ‫المعطيات‬ ‫قواعد‬ ‫ضمن‬ ‫المرضى‬ ‫معلومات‬ ‫بتخزين‬ ‫تقوم‬ ‫اليوم‬ ‫المستشفيات‬ ‫معظم‬
‫المعلومات‬ ‫لهذه‬ ‫تحليل‬ ‫إجراء‬ ‫يتم‬ ‫لكي‬,‫إلى‬ ‫البيانات‬ ‫بنقل‬ ‫نقوم‬ ‫أن‬ ‫يجب‬Hadoop
Sqoop‫ذلك‬ ‫إلجراء‬ ‫فعال‬ ‫حل‬ ‫تقدم‬
‫استخدام‬ ‫يتم‬Sqoop‫الـ‬ ‫شركات‬ ‫قبل‬ ‫من‬ ‫كبير‬ ‫بشكل‬Big Data‫المعطيات‬ ‫قواعد‬ ‫بين‬ ‫البيانات‬ ‫لنقل‬
‫و‬Hadoop
‫اإللكترونية‬ ‫التسويق‬ ‫شركة‬ ‫مثال‬Coupons.com‫تستخدم‬Sqoop‫بين‬ ‫البيانات‬ ‫لنقل‬Hadoop‫وبين‬
‫البيانات‬ ‫مستودع‬IBM Netezza
‫يميز‬ ‫الذي‬ ‫ما‬Sqoop‫؟‬
‫االستخدام‬ ‫سهلة‬
‫المعطيات‬ ‫قواعد‬ ‫مختلف‬ ‫تدعم‬
‫عالي‬ ‫أمان‬ ‫تقدم‬
‫مكونات‬ ‫مع‬ ‫جيد‬ ‫بشكل‬ ‫تتكامل‬Hadoop ecosystem‫مثل‬ ‫المختلفة‬:HiveHbase,,Oozie
‫األداء‬ ‫في‬ ‫تحسين‬ ‫يعطي‬ ‫مما‬ ‫التوازي‬ ‫على‬ ‫البيانات‬ ‫تنقل‬
‫إمكانية‬‫مباشرة‬ ‫االستيراد‬‫إلى‬Hive‫أو‬Hbase
‫تدعم‬Accumulo(key/value Database)
‫تستخدم‬JDBC connectors‫المعطيات‬ ‫بقواعد‬ ‫لالتصال‬,‫الـ‬ ‫هذه‬connectors‫للبيانات‬ ‫فعال‬ ‫نقل‬ ‫تؤمن‬
‫سالمتها‬ ‫يضمن‬ ‫بشكل‬‫واتساقها‬
‫بناء‬ ‫سهل‬ ‫بشكل‬ ‫يمكن‬connectors‫مختلفة‬ ‫معطيات‬ ‫قواعد‬ ‫مع‬ ‫لالتصال‬ ‫جديدة‬
‫جيد‬ ‫بشكل‬ ‫لألخطاء‬ ‫معالجة‬ ‫وتقدم‬ ‫العبء‬ ‫تتحمل‬
‫تؤمن‬Sqoop‫للمستخدم‬Command line interface
‫يتم‬ ‫أمر‬ ‫إدخال‬ ‫عند‬‫إطالق‬Hadoop Map only job
‫مالحظة‬:‫مهمات‬ ‫إطالق‬ ‫يتم‬ ‫ال‬Reduce‫فقط‬ ‫البيانات‬ ‫لتجميع‬ ‫ألنها‬
‫الـ‬Map job‫يطلق‬‫الـ‬ ‫من‬ ‫عدد‬mappers(‫يحدده‬‫المستخدم‬)
‫كل‬mapper task‫الـ‬ ‫على‬ ‫اعتمادا‬ ‫البيانات‬ ‫من‬ ‫جزء‬ ‫لها‬ ‫إسناد‬ ‫يتم‬
primary key‫الخاص‬‫بالجدول‬
‫تقوم‬Sqoop‫الـ‬ ‫على‬ ‫البيانات‬ ‫بتوزيع‬mappers‫وذلك‬ ‫بالتساوي‬
‫عالي‬ ‫أداء‬ ‫على‬ ‫للحصول‬
‫كل‬mapper‫باستخدام‬ ‫المعطيات‬ ‫لقاعدة‬ ‫اتصال‬ ‫ينشأ‬JDBC‫ويقوم‬
‫إلى‬ ‫بكتابته‬ ‫ويقوم‬ ‫له‬ ‫المسند‬ ‫البيانات‬ ‫من‬ ‫الجزء‬ ‫بجلب‬HDFS‫أو‬Hive
‫أو‬HBase
‫تعمل‬ ‫كيف‬Sqoop‫؟‬
Sqoop Tools
Sqoop‫األدوات‬ ‫من‬ ‫مجموعة‬ ‫عن‬ ‫عبارة‬
‫ما‬ ‫أداة‬ ‫استخدام‬ ‫صيغة‬:sqoop tool-name [tool-arguments]
‫ضمن‬ ‫المتاحة‬ ‫باألدوات‬ ‫قائمة‬ ‫عرض‬Sqoop
‫األداة‬import‫إلى‬ ‫المعطيات‬ ‫قاعدة‬ ‫من‬ ‫جدول‬ ‫باستيراد‬ ‫تقوم‬HDFS
‫كل‬row‫كـ‬ ‫يمثل‬ ‫الجدول‬ ‫ضمن‬record‫ضمن‬HDFS
‫الـ‬ ‫خزن‬ُ‫ت‬records‫كل‬ ‫وضع‬ ‫ويتم‬ ‫آخر‬ ‫بمحرف‬ ‫أو‬ ‫بفاصلة‬ ‫القيم‬ ‫فصل‬ُ‫ت‬ ‫حيث‬ ‫نصية‬ ‫كملفات‬row‫جديد‬ ‫سطر‬ ‫في‬
‫المعطيات‬ ‫بقاعدة‬ ‫االتصال‬:
‫نحدد‬‫الـ‬argument:--connect(‫تصف‬‫الـ‬server‫باالتصال‬ ‫سنقوم‬ ‫التي‬ ‫المعطيات‬ ‫وقاعدة‬‫بها‬)
‫مثال‬:$ sqoop import --connect jdbc:mysql://database.example.com/employees
‫باالتصال‬ ‫نقوم‬‫بقاعدة‬‫معطيات‬MySQL‫باسم‬employees‫الجهاز‬ ‫على‬database.example.com
•‫الجهاز‬ ‫عنوان‬ ‫يكون‬ ‫أن‬ ‫يصح‬ ‫ال‬localhost‫نستخدم‬ ‫كنا‬ ‫إذا‬Sqoop‫على‬Hadoop cluster(‫كل‬ ‫ستتصل‬ ‫وإال‬node‫إلى‬
‫االتصال‬ ‫يفشل‬ ‫أو‬ ‫مختلفة‬ ‫معطيات‬ ‫قاعدة‬)
‫الـ‬ ‫نحدد‬arguments:‫الـ‬--username‫والـ‬--password
‫الـ‬ ‫نحدد‬argument:--table‫المعطيات‬ ‫قاعدة‬ ‫ضمن‬ ‫الجدول‬ ‫لنحدد‬‫الستيراده‬
‫الـ‬ ‫نحدد‬argument:--columns‫الستيرادها‬ ‫جدول‬ ‫من‬ ‫محددة‬ ‫عواميد‬ ‫لتحديد‬
‫الـ‬ ‫عملية‬import
‫متوازي‬ ‫بشكل‬ ‫االستيراد‬ ‫عمل‬ ‫آلية‬:
‫تقوم‬Sqoop‫بشكل‬ ‫البيانات‬ ‫باستيراد‬‫متوازي‬
‫نحدد‬‫الـ‬ ‫عدد‬map tasks‫الـ‬ ‫طريق‬ ‫عن‬ ‫االستيراد‬ ‫بعمليات‬ ‫ستقوم‬ ‫التي‬argument:--num-mappers
‫استخدام‬ ‫يتم‬ ‫افتراضي‬ ‫بشكل‬4‫مهمات‬.‫العمل‬ ‫بيئة‬ ‫إعدادات‬ ‫على‬ ‫يعتمد‬ ‫القيمة‬ ‫هذه‬ ‫زيادة‬.‫إلى‬ ‫القيمة‬ ‫هذه‬ ‫زيادة‬ ‫يؤدي‬ ‫قد‬
‫األداء‬ ‫في‬ ‫ضعف‬ ‫وبالتالي‬ ‫المعطيات‬ ‫قاعدة‬ ‫على‬ ‫الحمل‬ ‫زيادة‬
‫لتوزيع‬‫بين‬ ‫البيانات‬‫الـ‬map tasks‫تقوم‬Sqoop‫التقسيم‬ ‫إلجراء‬ ‫المعطيات‬ ‫قاعدة‬ ‫ضمن‬ ‫األعمدة‬ ‫أحد‬ ‫باستخدام‬(‫غالب‬‫ا‬
‫الـ‬ ‫عمود‬primary key)
‫اختيار‬ ‫يمكن‬‫الـ‬ ‫باستخدام‬ ‫آخر‬ ‫عمود‬argument:--split-by
‫تقوم‬Sqoop‫الـ‬ ‫على‬ ‫متساوي‬ ‫بشكل‬ ‫البيانات‬ ‫بتوزيع‬map tasks
‫مثال‬:‫الـ‬ ‫عمود‬ ‫فيه‬ ‫جدول‬ ‫من‬ ‫االستيراد‬ ‫أردنا‬ ‫أننا‬ ‫بفرض‬primary key‫من‬ ‫القيم‬ ‫يأخذ‬0‫إلى‬1000.‫ستقوم‬Sqoop
‫أربعة‬ ‫بإنشاء‬map tasks‫منها‬ ‫لكل‬ ‫بإسناد‬ ‫وتقوم‬250 rows
‫الـ‬ ‫عملية‬import
‫األداة‬ ‫استخدام‬ ‫على‬ ‫مثال‬import
$ sqoop import --connect jdbc:mysql://db.foo.com/corp --table EMPLOYEES
‫سيتم‬‫الجدول‬ ‫استيراد‬EMPLOYEES‫المعطيات‬ ‫قاعدة‬ ‫ضمن‬corp
‫إلى‬ ‫للبيانات‬ ‫استيراد‬ ‫إجراء‬ ‫على‬ ‫مثال‬Hive:
$ sqoop import --connect jdbc:mysql://db.foo.com/corp --table EMPLOYEES 
--hive-import
‫طريق‬ ‫عن‬–hive-import‫نخبر‬Sqoop‫إلى‬ ‫االستيراد‬ ‫نريد‬ ‫أننا‬Hive
‫الـ‬ ‫عملية‬import
‫الـ‬ ‫عملية‬import
‫عملية‬ ‫إلجراء‬ ‫المتبعة‬ ‫اآللية‬import:
‫تقوم‬Sqoop‫بجمع‬metadata‫الخاصة‬ ‫المعطيات‬ ‫قاعدة‬ ‫من‬
‫ستقوم‬ ‫التي‬ ‫بالبيانات‬‫باستيرادها‬
‫الـ‬ ‫على‬ ‫اعتمادا‬metadata‫توليد‬ ‫سيتم‬java classes‫خاصة‬
‫معه‬ ‫بالتعامل‬ ‫نقوم‬ ‫الذي‬ ‫بالجدول‬
‫إطالق‬ ‫يتم‬Hadoop map only job‫لنقل‬‫البيانات‬
‫الـ‬ ‫على‬ ‫اعتمادا‬ ‫الجدول‬ ‫تقسيم‬ ‫يتم‬primary key
‫الـ‬map job‫بإطالق‬ ‫يقوم‬‫الـ‬ ‫من‬ ‫عدد‬map tasks‫إسناد‬ ‫ويتم‬
‫سيتم‬ ‫التي‬ ‫الملفات‬ ‫من‬ ‫أجزاء‬ ‫إليها‬‫استيرادها‬
‫الـ‬map tasks‫التوازي‬ ‫على‬ ‫تعمل‬,‫وكل‬‫يقوم‬ ‫منها‬‫عدد‬ ‫بإجراء‬
‫الـ‬ ‫من‬transactions‫لضمان‬‫البيانات‬ ‫في‬ ‫ضياع‬ ‫حدوث‬ ‫عدم‬
‫استهالك‬ ‫من‬ ‫والتقليل‬‫الموارد‬
‫الـ‬ ‫عملية‬ ‫أن‬ ‫بما‬import‫التوازي‬ ‫على‬ ‫تنفذ‬,‫ضم‬ ‫الخرج‬ ‫سيكون‬‫ن‬
‫عدة‬‫ملفات‬
‫بعد‬‫معالجة‬‫الـ‬records‫تم‬ ‫التي‬‫إلى‬ ‫استيرادها‬HDFS(‫طريق‬ ‫عن‬MapReduce‫أو‬Hive‫مثال‬)‫في‬ ‫نرغب‬ ‫بيانات‬ ‫لدينا‬ ‫ينتج‬
‫المعطيات‬ ‫قاعدة‬ ‫إلى‬ ‫أخرى‬ ‫مرة‬ ‫تصديرها‬
‫األداة‬export‫من‬ ‫الملفات‬ ‫من‬ ‫مجموعة‬ ‫لتصدير‬ ‫استخدامها‬ ‫يتم‬HDFS‫المعطيات‬ ‫قاعدة‬ ‫إلى‬
‫المعطيات‬ ‫قاعدة‬ ‫ضمن‬ ‫إليه‬ ‫النقل‬ ‫سيتم‬ ‫الذي‬ ‫الجدول‬ ‫يتواجد‬ ‫أن‬ ‫يجب‬
‫قراءة‬ ‫سيتم‬‫على‬ ‫الملفات‬HDFS‫الـ‬ ‫من‬ ‫مجموعة‬ ‫إلى‬ ‫وتحويلها‬records‫لـ‬ ‫وفقا‬delimiters(‫المستخدم‬ ‫قبل‬ ‫من‬ ‫تحديدها‬ ‫يتم‬)
‫المعطيات‬ ‫قاعدة‬ ‫ضمن‬ ‫البيانات‬ ‫إدراج‬ ‫طريقة‬:
‫الـ‬ ‫نقل‬ ‫يتم‬ ‫افتراضي‬ ‫بشكل‬records‫طريق‬ ‫عن‬ ‫المعطيات‬ ‫قاعدة‬ ‫إلى‬INSERT statements
‫عن‬‫الـ‬ ‫طريق‬UPDATE mode‫يتم‬‫استخدام‬UPDATE statements
•‫الـ‬argument:--update-key‫الـ‬ ‫لتحديد‬ ‫ستستخدم‬ ‫التي‬ ‫األعمدة‬ ‫يحدد‬rows‫تعديلها‬ ‫سيتم‬ ‫التي‬
‫طريق‬ ‫عن‬call mode‫استدعاء‬ ‫سيتم‬stored procedure‫كل‬ ‫أجل‬ ‫من‬record‫نقله‬ ‫يتم‬
‫الجدول‬ ‫ضمن‬ ‫األعمدة‬ ‫كل‬ ‫تصدير‬ ‫سيتم‬ ‫افتراضي‬ ‫بشكل‬,‫الـ‬ ‫طريق‬ ‫عن‬ ‫لتصديرها‬ ‫أعمدة‬ ‫تحديد‬ ‫يمكن‬arguement:--columns
‫الـ‬ ‫عملية‬export
Arguments‫األداة‬ ‫استخدام‬ ‫عند‬ ‫إلزامية‬export:
--export-dir:‫الـ‬ ‫يحدد‬directory‫ضمن‬HDFS‫نريد‬ ‫التي‬ ‫البيانات‬ ‫ملفات‬ ‫يحوي‬ ‫الذي‬‫تصديرها‬
--table:‫الـ‬ ‫اسم‬ ‫يحدد‬table‫البيانات‬ ‫نقل‬ ‫سيتم‬ ‫الذي‬‫له‬
‫أو‬–call:‫الـ‬ ‫اسم‬ ‫يحدد‬stored procedure‫استدعائها‬ ‫سيتم‬ ‫التي‬
‫الـ‬ ‫عملية‬ ‫أداء‬export‫على‬ ‫النقل‬ ‫يكون‬ ‫درجة‬ ‫أي‬ ‫إلى‬ ‫على‬ ‫يعتمد‬‫التوازي‬
‫تستخدم‬Sqoop‫أربعة‬tasks‫الـ‬ ‫عملية‬ ‫إلجراء‬ ‫التوازي‬ ‫على‬export
‫البيئة‬ ‫إعدادت‬ ‫حسب‬,‫للـ‬ ‫يمكن‬tasks‫األداء‬ ‫في‬ ‫انخفاض‬ ‫إلى‬ ‫تؤدي‬ ‫أن‬ ‫يمكن‬ ‫أو‬ ‫التزامن‬ ‫من‬ ‫تحسن‬ ‫أن‬ ‫اإلضافية‬
‫الـ‬ ‫عدد‬ ‫تحديد‬ ‫يمكن‬map tasks‫الـ‬ ‫طريق‬ ‫عن‬argument:--num-mappers
‫توليد‬ ‫تلقائيا‬ ‫يتم‬code‫يستخدم‬‫البيانات‬ ‫تحوي‬ ‫التي‬ ‫الملفات‬ ‫لمعالجة‬‫تصديرها‬ ‫نريد‬ ‫التي‬‫المعطيات‬ ‫قاعدة‬ ‫إلى‬
•‫يمكن‬‫إعادة‬ ‫الحاالت‬ ‫بعض‬ ‫في‬‫الـ‬ ‫استخدام‬code‫لعملية‬ ‫كنتيجة‬ ‫توليده‬ ‫تم‬ ‫الذي‬import‫سابقة‬
‫الـ‬ ‫عملية‬ ‫كانت‬ ‫إذا‬insert‫الـ‬ ‫سيفشل‬ ‫المعطيات‬ ‫قاعدة‬ ‫على‬ ‫الموجودة‬ ‫القيود‬ ‫توافق‬ ‫ال‬export job
(‫مثال‬‫الـ‬primary key‫الجدول‬ ‫ضمن‬ ‫مسبقا‬ ‫موجود‬)
‫الـ‬ ‫عملية‬export
‫الـ‬ ‫عملية‬export
‫استخدام‬staging table‫المعطيات‬ ‫قاعدة‬ ‫إلى‬ ‫البيانات‬ ‫تصدير‬ ‫عند‬:
‫فشل‬‫الـ‬ ‫أحد‬export jobs‫قاعدة‬ ‫إلى‬ ‫للبيانات‬ ‫جزئي‬ ‫لنقل‬ ‫يؤدي‬ ‫قد‬‫المعطيات‬
‫تحديد‬ ‫طريق‬ ‫عن‬ ‫المشكلة‬ ‫هذه‬ ‫عالج‬ ‫يمكن‬staging table‫الـ‬ ‫باستخدام‬option:--staging-table
‫الـ‬ ‫ستقوم‬map tasks‫الـ‬ ‫ضمن‬ ‫البيانات‬ ‫بتعبئة‬staging table
‫الـ‬ ‫إلى‬ ‫نقلها‬ ‫سيتم‬ ‫كاملة‬ ‫البيانات‬ ‫وصول‬ ‫بعد‬table‫طريق‬ ‫عن‬ ‫المعطيات‬ ‫قاعدة‬ ‫في‬transaction‫وحيدة‬
‫الـ‬ ‫استخدام‬ ‫يؤدي‬ ‫الفشل‬ ‫حال‬ ‫في‬staging table‫البيانات‬ ‫سالمة‬ ‫حفظ‬ ‫إلى‬‫واتساقها‬
‫الـ‬ ‫إنشاء‬ ‫يجب‬staging table‫الـ‬ ‫تنفيذ‬ ‫قبل‬export job
‫األساسي‬ ‫الجدول‬ ‫لبنية‬ ‫مطابقة‬ ‫تكون‬ ‫أن‬ ‫يجب‬ ‫الجدول‬ ‫هذا‬ ‫بنية‬
‫الـ‬ ‫يكون‬ ‫أن‬ ‫يجب‬staging table‫الـ‬ ‫استخدام‬ ‫يتم‬ ‫أو‬ ‫فارغ‬option:--clear-staging-table
‫األداة‬ ‫استخدام‬ ‫على‬ ‫مثال‬export
$ sqoop export --connect jdbc:mysql://db.example.com/foo --table bar 
--export-dir /results/bar_data
‫سيتم‬‫محتوى‬ ‫تصدير‬‫ضمن‬ ‫الموجودة‬ ‫الملفات‬/results/bar_data‫الجدول‬ ‫إلى‬bar‫المعطيات‬ ‫قاعدة‬ ‫ضمن‬foo
‫الـ‬ ‫عملية‬export
‫عملية‬ ‫إلجراء‬ ‫المتبعة‬ ‫اآللية‬export:
‫تقوم‬Sqoop‫بجمع‬metadata‫الخاصة‬ ‫المعطيات‬ ‫قاعدة‬ ‫من‬
‫بتصديرها‬ ‫ستقوم‬ ‫التي‬ ‫بالبيانات‬
‫الـ‬ ‫على‬ ‫اعتمادا‬metadata‫توليد‬ ‫سيتم‬java classes‫خاصة‬
‫بالتعامل‬ ‫نقوم‬ ‫الذي‬ ‫بالجدول‬‫معه‬
‫يتم‬‫إطالق‬Hadoop map only job‫البيانات‬ ‫لنقل‬
‫الـ‬map job‫يقوم‬‫من‬ ‫عدد‬ ‫بإطالق‬‫الـ‬map tasks‫إسناد‬ ‫ويتم‬
‫تصديرها‬ ‫سيتم‬ ‫التي‬ ‫الملفات‬ ‫من‬ ‫أجزاء‬ ‫إليها‬
‫الـ‬map tasks‫التوازي‬ ‫على‬ ‫تعمل‬,‫يستخدم‬ ‫منها‬ ‫وكل‬
connection‫ا‬ ‫من‬ ‫عدد‬ ‫بإجراء‬ ‫ويقوم‬ ‫المعطيات‬ ‫لقاعدة‬ ‫منفصل‬‫لـ‬
transactions‫والتقل‬ ‫البيانات‬ ‫في‬ ‫ضياع‬ ‫حدوث‬ ‫عدم‬ ‫لضمان‬‫يل‬
‫الموارد‬ ‫استهالك‬ ‫من‬
‫الـ‬ ‫عملية‬export
Incremental Imports
‫غالبا‬‫ل‬ ‫بحاجة‬ ‫نكون‬ ‫ال‬‫نقل‬‫كاملة‬ ‫جداول‬,‫بل‬‫تعديل‬ ‫عليها‬ ‫جرى‬ ‫أسطر‬ ‫عدة‬ ‫لنقل‬‫أو‬‫تمت‬‫إضافتها‬
‫تقدم‬ ‫ذلك‬ ‫لتحقيق‬Sqoop‫إجراء‬ ‫إمكانية‬:incremental imports
‫األسطر‬ ‫بإحضار‬ ‫الميزة‬ ‫هذه‬ ‫تقوم‬‫إحضارها‬ ‫تم‬ ‫التي‬ ‫األسطر‬ ‫عن‬ ‫تختلف‬ ‫التي‬‫سابقا‬‫الجدول‬ ‫من‬‫المطلوب‬
arguments:--check-column‫إحضارها‬ ‫سيتم‬ ‫التي‬ ‫األسطر‬ ‫لتحديد‬ ‫سيستخدم‬ ‫الذي‬ ‫العمود‬ ‫تحدد‬
--last-value‫ضمن‬ ‫القيمة‬ ‫تحدد‬check column‫سابقا‬ ‫إحضاره‬ ‫تم‬ ‫سطر‬ ‫آلخر‬
‫الـ‬ ‫من‬ ‫نوعان‬ ‫هناك‬incremental imports:
append:‫إحضارها‬ ‫ونريد‬ ‫المطلوب‬ ‫للجدول‬ ‫إضافتها‬ ‫تمت‬ ‫قد‬ ‫جديدة‬ ‫أسطر‬ ‫هناك‬ ‫تكون‬ ‫عندما‬
‫سطر‬ ‫لكل‬ ‫يكون‬ ‫الجدول‬ ‫ضمن‬id,‫بالـ‬ ‫الخاص‬ ‫العمود‬ ‫نحدد‬ids‫طريق‬ ‫عن‬–check-column
‫قيمة‬ ‫لها‬ ‫التي‬ ‫األسطر‬ ‫استيراد‬ ‫يتم‬‫الـ‬ ‫ضمن‬check column‫القيمة‬ ‫من‬ ‫أكبر‬–last-value
‫مثال‬:--chech column id
--last-value 100
‫لها‬ ‫التي‬ ‫المعطيات‬ ‫قاعدة‬ ‫من‬ ‫األسطر‬ ‫استيراد‬ ‫سيتم‬id‫من‬ ‫أكبر‬100‫حصرا‬
lastmodified:‫إحضارها‬ ‫ونريد‬ ‫المطلوب‬ ‫الجدول‬ ‫ضمن‬ ‫تعديلها‬ ‫تم‬ ‫قد‬ ‫أسطر‬ ‫هناك‬ ‫يكون‬ ‫عندما‬ ‫يستخدم‬
‫إجراء‬ ‫يتم‬ ‫عندما‬update‫العمود‬ ‫ضمن‬ ‫الحالي‬ ‫الوقت‬ ‫وضع‬ ‫سيتم‬last-modified column
‫استيراد‬ ‫سيتم‬‫طريق‬ ‫عن‬ ‫المحدد‬ ‫التوقيت‬ ‫من‬ ‫أكبر‬ ‫توقيت‬ ‫تحوي‬ ‫التي‬ ‫األسطر‬–last-value
‫إجراء‬ ‫عند‬incremental import‫الـ‬ ‫نحدد‬ ‫أن‬ ‫يجب‬--last-value‫األسطر‬ ‫الستيراد‬ ‫مرجعية‬ ‫كقيمة‬ ‫تستخدم‬ ‫حتى‬
‫لـ‬ ‫الجديدة‬ ‫القيمة‬ ‫على‬ ‫التعديل‬ ‫يتم‬–last-value‫استيراد‬ ‫عملية‬ ‫كل‬ ‫عند‬
‫الـ‬ ‫عملية‬ ‫بتخزين‬ ‫قمنا‬ ‫حال‬ ‫في‬incremental import‫كـ‬saved job‫قيمة‬ ‫تعديل‬ ‫سيتم‬–last-value‫تلقائيا‬
Incremental Imports
Saved Jobs
‫الـ‬ ‫عمليات‬import‫والـ‬export‫غالبا‬ ‫نفذ‬ُ‫ت‬‫من‬ ‫الكثير‬‫المرات‬,‫مرة‬ ‫كل‬ ‫في‬ ‫األمر‬ ‫نفس‬ ‫تنفيذ‬ ‫عاد‬ُ‫ي‬ ‫وبالتالي‬
‫النظام‬ ‫لمدير‬ ‫صعوبة‬ ‫ذلك‬ ‫يمثل‬,‫إجراء‬ ‫عند‬ ‫خاص‬ ‫وبشكل‬incremental update
‫تسمح‬ ‫أكبر‬ ‫بفاعلية‬ ‫للتعامل‬Sqoop‫بتعريف‬saved jobs
‫الـ‬ ‫يقوم‬job‫الـ‬ ‫معلومات‬ ‫بتسجيل‬configuration‫بتنفيذ‬ ‫الخاصة‬‫ما‬ ‫أمر‬‫وقت‬ ‫في‬ ‫تنفيذه‬ ‫ليتم‬‫الحق‬
‫األداة‬ ‫طريق‬ ‫عن‬ ‫ذلك‬ ‫يكون‬:sqoop job
‫الـ‬ ‫كان‬ ‫إذا‬job‫بـ‬ ‫يقوم‬incremental import‫الـ‬ ‫تحديث‬ ‫فسيتم‬state‫ب‬ ‫الخاصة‬‫آخر‬‫تنفيذ‬ ‫أجل‬ ‫من‬ ‫استيرادها‬ ‫تم‬ ‫أسطر‬
‫المرة‬ ‫في‬ ‫الجديدة‬ ‫االستيرادات‬‫القادمة‬
‫تعريف‬saved job:
$ sqoop job --create myjob -- import --connect jdbc:mysql://example.com/db --table
mytable
‫استخدمنا‬–create‫إلنشاء‬job‫باسم‬myjob‫ثم‬‫األمر‬ ‫حددنا‬‫الـ‬ ‫هذا‬ ‫سيقوم‬ ‫الذي‬job‫بتنفيذه‬
‫الـ‬ ‫مراجعة‬configuration‫الخاصة‬‫بـ‬job‫معين‬:
$ sqoop job --show myjob
‫تنفيذ‬job‫معين‬:
$ sqoop job --exec myjob
‫الـ‬ ‫جميع‬ ‫عرض‬saved jobs‫المتاحة‬:
$ sqoop job –list
Saved Jobs
Sqoop metastore
‫األداة‬metastore‫تقوم‬‫بإعداد‬‫للـ‬ ‫مستودع‬metadata‫بـ‬ ‫الخاصة‬Sqoop
‫مشترك‬ ‫المستودع‬ ‫هذا‬ ‫يكون‬‫المستخدمين‬ ‫جميع‬ ‫بين‬.
‫تنفيذ‬ ‫إمكانية‬ ‫للمستخدمين‬ ‫تاح‬ُ‫ي‬saved jobs‫الـ‬ ‫ضمن‬ ‫مسبقا‬ ‫معرفة‬metastore‫تعريف‬ ‫أو‬saved jobs‫جديدة‬
‫الـ‬metastore‫معطيات‬ ‫قاعدة‬ ‫عن‬ ‫عبارة‬ ‫يكون‬HSQLDB
‫األمر‬ ‫تنفيذ‬ ‫عند‬sqoop-metastore‫المعطيات‬ ‫قاعدة‬ ‫من‬ ‫نسخة‬ ‫إطالق‬ ‫يتم‬HSQLDB‫الـ‬ ‫على‬machine‫الحالية‬
‫بالـ‬ ‫االتصال‬metastore‫عن‬ ‫يكون‬‫طريق‬TCP/IP‫المنفذ‬ ‫باستخدام‬16000
‫الـ‬ ‫استضافة‬ ‫يمكن‬metastore‫على‬machine‫الـ‬ ‫ضمن‬Hadoop cluster‫الشبكة‬ ‫ضمن‬ ‫آخر‬ ‫مكان‬ ‫أي‬ ‫على‬ ‫أو‬
‫بالـ‬ ‫االتصال‬metastore‫الـ‬ ‫طريق‬ ‫عن‬ ‫يكون‬argument:--meta-connect‫مثال‬:
--meta-connect jdbc:hsqldb:hsql://metaserver.example.com:16000/sqoop
Sqoop codegen
‫له‬ ‫المعطيات‬ ‫قاعدة‬ ‫في‬ ‫جدول‬ ‫كل‬DAO class‫توابع‬ ‫يحوي‬getters‫و‬setters
‫األداة‬ ‫تقوم‬codegen‫الـ‬ ‫هذا‬ ‫بتوليد‬class‫تلقائي‬ ‫بشكل‬
‫الـ‬ ‫هذا‬ ‫توليد‬class‫الـ‬ ‫عملية‬ ‫من‬ ‫جزء‬ ‫عتبر‬ُ‫ي‬import‫نفسها‬
‫الـ‬ ‫ملف‬ ‫ضياع‬ ‫حال‬ ‫في‬ ‫لكن‬class‫توليده‬ ‫بإعادة‬ ‫نقوم‬ ‫أن‬ ‫نحتاج‬ ‫المثال‬ ‫سبيل‬ ‫على‬
‫مثال‬:
$ sqoop codegen --connect jdbc:mysql://localhost/userdb 
--username root --table emp
‫الـ‬ ‫بتوليد‬ ‫قمنا‬ ‫السابق‬ ‫األمر‬ ‫طريق‬ ‫عن‬java class‫للجدول‬empl‫المعطيات‬ ‫قاعدة‬ ‫ضمن‬userdb
Sqoop eval
‫األداة‬eval‫استعالمات‬ ‫بتنفيذ‬ ‫للمستخدمين‬ ‫تسمح‬SQL‫قاعدة‬ ‫على‬ ‫بسيطة‬‫المعطيات‬
‫يتم‬‫الـ‬ ‫إلى‬ ‫الخرج‬ ‫طباعة‬console
‫تعطي‬‫المستخدمين‬‫فرصة‬‫لمراجعة‬‫التي‬ ‫االستعالمات‬‫ستستخدم‬‫البيانات‬ ‫الستيراد‬‫ي‬ ‫أن‬ ‫قبل‬‫استخدامها‬ ‫تم‬
‫من‬ ‫للتأكد‬ ‫أيضا‬ ‫نستخدمها‬‫قاعدة‬ ‫مع‬ ‫االتصال‬ ‫توافر‬‫المعطيات‬
‫مثال‬:
$ sqoop eval --connect jdbc:mysql://db.example.com/corp --query 
"SELECT * FROM employees LIMIT 10”
‫قاعدة‬ ‫على‬ ‫استعالم‬ ‫بتنفيذ‬ ‫قمنا‬‫المعطيات‬
‫حددنا‬‫الـ‬ ‫طريق‬ ‫عن‬ ‫تنفيذه‬ ‫نريد‬ ‫الذي‬ ‫االستعالم‬argument:--query
Sqoop list-databases & list-tables
‫األداة‬ ‫باستخدام‬list-databases‫الـ‬ ‫جميع‬ ‫بسرد‬ ‫نقوم‬databases‫قواعد‬ ‫مخدم‬ ‫ضمن‬ ‫المتاحة‬‫المعطيات‬
‫ضمن‬ ‫المتاحة‬ ‫المعطيات‬ ‫قواعد‬ ‫جميع‬ ‫بسرد‬ ‫نقوم‬ ‫مثال‬MySQL server:
$ sqoop list-databases --connect jdbc:mysql://database.example.com/
‫األداة‬ ‫باستخدام‬list-tables‫الـ‬ ‫جميع‬ ‫بسرد‬ ‫نقوم‬tables‫ضمن‬ ‫الموجودة‬database‫معينة‬
‫المعطيات‬ ‫قاعدة‬ ‫ضمن‬ ‫الموجودة‬ ‫الجداول‬ ‫جميع‬ ‫بسرد‬ ‫نقوم‬ ‫مثال‬corporation:
$ sqoop list-tables --connect jdbc:mysql://database.example.com/corporation
Databases Connectors
‫تحوي‬Sqoop‫الـ‬ ‫من‬ ‫عدد‬ ‫افتراضي‬ ‫بشكل‬connectors‫المعروفة‬ ‫المعطيات‬ ‫قواعد‬ ‫مع‬ ‫لالتصال‬
‫إنشاء‬ ‫إمكانية‬ ‫تتيح‬connectors‫جديدة‬ ‫معطيات‬ ‫قواعد‬ ‫أنظمة‬ ‫ولدعم‬ ‫النقل‬ ‫أداء‬ ‫لتحسين‬ ‫جديدة‬
‫كل‬connector‫معينة‬ ‫معطيات‬ ‫بقاعدة‬ ‫خاص‬(MySQL connector‫مع‬ ‫يتصل‬ ‫ال‬PostgreSQL)
‫الـ‬ ‫مجال‬ ‫في‬ ‫الشركات‬ ‫من‬ ‫العديد‬IT‫تقدم‬connectors‫بها‬ ‫الخاصة‬ ‫المعطيات‬ ‫قواعد‬ ‫مع‬ ‫للتعامل‬ ‫خصصة‬ُ‫م‬
Microsoft‫تستخدم‬connector‫بين‬ ‫للنقل‬ ‫مخصص‬Microsoft SQL Server‫و‬Hadoop
‫الـ‬JDBC drivers‫مع‬ ‫جاهزة‬ ‫تأتي‬ ‫ال‬Sqoop‫يجب‬ ‫بل‬‫يدوي‬ ‫بشكل‬ ‫إضافتها‬
‫الـ‬Connectors‫والـ‬drivers‫فقط‬ ‫توجد‬‫الـ‬ ‫على‬machine‫بتنفيذ‬ ‫تقوم‬ ‫التي‬Sqoop
•‫جميع‬ ‫على‬ ‫توجد‬ ‫ال‬nodes‫الـ‬ ‫ضمن‬Hadoop cluster
‫المعطيات‬ ‫قاعدة‬ ‫مع‬ ‫االتصال‬ ‫آلية‬:
‫تبحث‬ ‫ما‬ ‫معطيات‬ ‫بقاعدة‬ ‫لالتصال‬Sqoop‫أوال‬‫عن‬connector‫بشكل‬ ‫تحميله‬ ‫تم‬ ‫مناسب‬‫يدوي‬
‫الـ‬ ‫ضمن‬ ‫تبحث‬ ‫تجد‬ ‫لم‬ ‫إذا‬connectors‫طريق‬ ‫عن‬ ‫االفتراضية‬JDBC URL(‫بـ‬ ‫يبدأ‬jdbc:)
‫لم‬ ‫إذا‬‫تجد‬‫الـ‬ ‫استخدام‬ ‫يتم‬connector‫االفتراضي‬Generic JDBC Connector
‫الـ‬ ‫اختيار‬ ‫بعد‬connector‫الـ‬ ‫اختيار‬ ‫يتم‬JDBC driver
‫هناك‬ ‫معطيات‬ ‫قاعدة‬ ‫كل‬ ‫أجل‬ ‫من‬JDBC driver‫استخدامه‬ ‫يتم‬ ‫وحيد‬
•‫مثال‬MySQL connector‫باستخدام‬ ‫سيقوم‬MySQL JDBC Driver(‫يدعى‬ ‫والذي‬Connector/J)
‫الـ‬ ‫نستخدم‬ ‫عندما‬Generic JDBC Connector‫الـ‬ ‫تحديد‬ ‫يجب‬driver‫الـ‬ ‫طريق‬ ‫عن‬parameter:-driver
‫الـ‬ ‫تحديد‬ ‫تم‬ ‫أن‬ ‫بعد‬connector‫والـ‬driver
‫يتم‬‫الـ‬ ‫بين‬ ‫االتصال‬ ‫إنشاء‬Sqoop client‫المعطيات‬ ‫وقاعدة‬.
Databases Connectors
Demo

More Related Content

Similar to [Arabic] Apache sqoop

Www.kutub.info 5727
Www.kutub.info 5727Www.kutub.info 5727
Www.kutub.info 5727Adel Totott
 
تحليل البيانات باستخدام برنامج ( Spss ) المهارات، الأساسيات ‘التطبيقات
تحليل البيانات باستخدام برنامج  (   Spss    )  المهارات، الأساسيات ‘التطبيقاتتحليل البيانات باستخدام برنامج  (   Spss    )  المهارات، الأساسيات ‘التطبيقات
تحليل البيانات باستخدام برنامج ( Spss ) المهارات، الأساسيات ‘التطبيقات
علي داخل الحساني
 
الدليل العلمي لنظام الدي سبيس
الدليل العلمي لنظام الدي سبيسالدليل العلمي لنظام الدي سبيس
الدليل العلمي لنظام الدي سبيس
Aml Sindi
 
منهاج بناء و تصميم مواقع الانترنيت
منهاج بناء و تصميم مواقع الانترنيتمنهاج بناء و تصميم مواقع الانترنيت
منهاج بناء و تصميم مواقع الانترنيت
DrMohammed Qassim
 
What is no sql
What is no sqlWhat is no sql
What is no sql
Garmian
 
Getting Started with Content Registration - Arabic Webinar
Getting Started with Content Registration - Arabic Webinar Getting Started with Content Registration - Arabic Webinar
Getting Started with Content Registration - Arabic Webinar
Crossref
 
مراحل تنصيب نظام ادارة المحتوى دروبال
مراحل تنصيب نظام ادارة المحتوى دروبالمراحل تنصيب نظام ادارة المحتوى دروبال
مراحل تنصيب نظام ادارة المحتوى دروبال
الدكتور طلال ناظم الزهيري
 
امتلاك موقع تفاعلي تفاعلي دون علم بقواعد البرمجة
امتلاك موقع تفاعلي تفاعلي دون علم بقواعد البرمجة امتلاك موقع تفاعلي تفاعلي دون علم بقواعد البرمجة
امتلاك موقع تفاعلي تفاعلي دون علم بقواعد البرمجة elmouhssini1
 
انتاج موقع تفاعلي دون علم بقواعد البرمجة
انتاج موقع تفاعلي دون علم بقواعد البرمجة انتاج موقع تفاعلي دون علم بقواعد البرمجة
انتاج موقع تفاعلي دون علم بقواعد البرمجة
elmouhssini1
 
مقدمة عن قواعد البيانات
مقدمة عن قواعد البياناتمقدمة عن قواعد البيانات
مقدمة عن قواعد البياناتalihassan_siwa
 
Introduction in jsp & servlet
Introduction in jsp & servlet Introduction in jsp & servlet
Introduction in jsp & servlet
Anas Aloklah
 
مقدمة عن قواعد البيانات
مقدمة عن قواعد البياناتمقدمة عن قواعد البيانات
مقدمة عن قواعد البياناتgueste5de3d
 
Network fundamental basem hamed
Network fundamental    basem hamedNetwork fundamental    basem hamed
Network fundamental basem hamed
Basem Hamed
 
تعلم HTML CSS و JavaScript
تعلم HTML CSS و JavaScriptتعلم HTML CSS و JavaScript
تعلم HTML CSS و JavaScript
Molham Al-Maleh
 
جافا سكريبت
جافا سكريبتجافا سكريبت
جافا سكريبت
osman do
 
مقدمة في برمجة الشبكات network programming
مقدمة في برمجة الشبكات network programmingمقدمة في برمجة الشبكات network programming
مقدمة في برمجة الشبكات network programming
Ehab Saad Ahmad
 
الدرس الحادي عشر
الدرس الحادي عشرالدرس الحادي عشر
الدرس الحادي عشر
Anas Aloklah
 
مقدمة في قواعد البيانات
مقدمة في قواعد البياناتمقدمة في قواعد البيانات
مقدمة في قواعد البيانات
DrMohammed Qassim
 
Download pdf-ebooks.org-ku-19276
Download pdf-ebooks.org-ku-19276Download pdf-ebooks.org-ku-19276
Download pdf-ebooks.org-ku-19276
omer Hussein
 

Similar to [Arabic] Apache sqoop (20)

Www.kutub.info 5727
Www.kutub.info 5727Www.kutub.info 5727
Www.kutub.info 5727
 
تحليل البيانات باستخدام برنامج ( Spss ) المهارات، الأساسيات ‘التطبيقات
تحليل البيانات باستخدام برنامج  (   Spss    )  المهارات، الأساسيات ‘التطبيقاتتحليل البيانات باستخدام برنامج  (   Spss    )  المهارات، الأساسيات ‘التطبيقات
تحليل البيانات باستخدام برنامج ( Spss ) المهارات، الأساسيات ‘التطبيقات
 
الدليل العلمي لنظام الدي سبيس
الدليل العلمي لنظام الدي سبيسالدليل العلمي لنظام الدي سبيس
الدليل العلمي لنظام الدي سبيس
 
منهاج بناء و تصميم مواقع الانترنيت
منهاج بناء و تصميم مواقع الانترنيتمنهاج بناء و تصميم مواقع الانترنيت
منهاج بناء و تصميم مواقع الانترنيت
 
What is no sql
What is no sqlWhat is no sql
What is no sql
 
Getting Started with Content Registration - Arabic Webinar
Getting Started with Content Registration - Arabic Webinar Getting Started with Content Registration - Arabic Webinar
Getting Started with Content Registration - Arabic Webinar
 
مراحل تنصيب نظام ادارة المحتوى دروبال
مراحل تنصيب نظام ادارة المحتوى دروبالمراحل تنصيب نظام ادارة المحتوى دروبال
مراحل تنصيب نظام ادارة المحتوى دروبال
 
6 ado.net
6 ado.net6 ado.net
6 ado.net
 
امتلاك موقع تفاعلي تفاعلي دون علم بقواعد البرمجة
امتلاك موقع تفاعلي تفاعلي دون علم بقواعد البرمجة امتلاك موقع تفاعلي تفاعلي دون علم بقواعد البرمجة
امتلاك موقع تفاعلي تفاعلي دون علم بقواعد البرمجة
 
انتاج موقع تفاعلي دون علم بقواعد البرمجة
انتاج موقع تفاعلي دون علم بقواعد البرمجة انتاج موقع تفاعلي دون علم بقواعد البرمجة
انتاج موقع تفاعلي دون علم بقواعد البرمجة
 
مقدمة عن قواعد البيانات
مقدمة عن قواعد البياناتمقدمة عن قواعد البيانات
مقدمة عن قواعد البيانات
 
Introduction in jsp & servlet
Introduction in jsp & servlet Introduction in jsp & servlet
Introduction in jsp & servlet
 
مقدمة عن قواعد البيانات
مقدمة عن قواعد البياناتمقدمة عن قواعد البيانات
مقدمة عن قواعد البيانات
 
Network fundamental basem hamed
Network fundamental    basem hamedNetwork fundamental    basem hamed
Network fundamental basem hamed
 
تعلم HTML CSS و JavaScript
تعلم HTML CSS و JavaScriptتعلم HTML CSS و JavaScript
تعلم HTML CSS و JavaScript
 
جافا سكريبت
جافا سكريبتجافا سكريبت
جافا سكريبت
 
مقدمة في برمجة الشبكات network programming
مقدمة في برمجة الشبكات network programmingمقدمة في برمجة الشبكات network programming
مقدمة في برمجة الشبكات network programming
 
الدرس الحادي عشر
الدرس الحادي عشرالدرس الحادي عشر
الدرس الحادي عشر
 
مقدمة في قواعد البيانات
مقدمة في قواعد البياناتمقدمة في قواعد البيانات
مقدمة في قواعد البيانات
 
Download pdf-ebooks.org-ku-19276
Download pdf-ebooks.org-ku-19276Download pdf-ebooks.org-ku-19276
Download pdf-ebooks.org-ku-19276
 

[Arabic] Apache sqoop

  • 1.
  • 2. ‫لظهور‬ ‫أدت‬ ‫التي‬ ‫المشكلة‬ ‫ما‬Sqoop‫؟‬ ‫الكبير‬ ‫االزدياد‬ ‫مع‬‫في‬ ‫مؤخرا‬‫البيانات‬ ‫حجم‬‫وتنوعها‬‫الـ‬ ‫مفهوم‬ ‫ظهر‬Big Data‫تقنيات‬ ‫تستخدم‬ ‫الشركات‬ ‫وبدأت‬‫بيئة‬ ‫مثل‬ ‫الموزعة‬ ‫والمعالجة‬ ‫التخزين‬Hadoop Hadoop‫الـ‬ ‫وتعالج‬ ‫تخزن‬Big Data‫معالجة‬ ‫بيئات‬ ‫باستخدام‬‫مثل‬:MapReduce ,Hive ,Hbase ,Pig‫وبيئات‬ ‫تخزين‬‫م‬‫ث‬‫ل‬:HDFS‫من‬ ‫لالستفادة‬ ‫وذلك‬‫والتخزين‬ ‫المعالجة‬‫الموزع‬. ‫باستخدام‬ ‫البيانات‬ ‫هذه‬ ‫بتحليل‬ ‫نقوم‬ ‫أن‬ ‫يمكن‬ ‫كيف‬ ‫عالئقية‬ ‫معطيات‬ ‫قاعدة‬ ‫ضمن‬ ‫بيانات‬ ‫لدينا‬ ‫بفرض‬Hadoop‫؟‬ ‫بكتابة‬ ‫يقوموا‬ ‫أن‬ ‫المطورون‬ ‫اعتاد‬scripts‫إلى‬ ‫البيانات‬ ‫لتحمل‬Hadoop‫فعالة‬ ‫غير‬ ‫طريقة‬ ‫لكنها‬ ‫طريق‬ ‫عن‬ ‫معطيات‬ ‫قاعدة‬ ‫ضمن‬ ‫المخزنة‬ ‫للبيانات‬ ‫الوصول‬MapReduce‫للخطأ‬ ‫وعرضة‬ ‫أيضا‬ ‫فعال‬ ‫غير‬ ‫أمر‬ ‫هو‬ ‫قبل‬ ‫من‬ ‫إليها‬ ‫الوصول‬ ‫قبل‬ ‫المعطيات‬ ‫قاعدة‬ ‫ضمن‬ ‫للبيانات‬ ‫مسبق‬ ‫بتحضير‬ ‫القيام‬ ‫يجب‬Hadoop ‫نقل‬ ‫أن‬ ‫نالحظ‬‫و‬ ‫العالئقية‬ ‫المعطيات‬ ‫قواعد‬ ‫بين‬ ‫البيانات‬Hadoop‫التقليدية‬ ‫بالطرق‬‫وتعقيدات‬ ‫صعوبة‬ ‫يحوي‬‫تقنية‬ ‫الحل‬:‫ظهرت‬Apache Sqoop
  • 3. ‫األداة‬ ‫هي‬ ‫ما‬Sqoop‫؟‬ Sqoop‫لـ‬ ‫اختصار‬SQL + Hadoop open source framework‫مقدمة‬‫قبل‬ ‫من‬Apache ‫إلى‬ ‫العالئقية‬ ‫المعطيات‬ ‫قواعد‬ ‫من‬ ‫البيانات‬ ‫لنقل‬ ‫أداة‬Hadoop‫وبالعكس‬. ‫مثل‬ ‫العالئقية‬ ‫المعطيات‬ ‫قواعد‬:Oracle, MySQL, Postgres, Teradata ‫وإلى‬ ‫من‬ ‫البيانات‬ ‫وتصدير‬ ‫استيراد‬ ‫يتم‬Hadoop Distributed File System (HDFS) ‫جانب‬ ‫إلى‬HDFS‫وإلى‬ ‫من‬ ‫البيانات‬ ‫وتصدير‬ ‫استيراد‬ ‫يمكن‬Hadoop eco-systems‫مثل‬Hive‫و‬HBase ‫تستخدم‬MapReduce‫وإلى‬ ‫من‬ ‫البيانات‬ ‫لنقل‬Hadoop‫التوازي‬ ‫على‬ ‫نقل‬ ‫يوفر‬ ‫مما‬(‫الوقت‬ ‫بنفس‬)‫للبيانات‬
  • 4. ‫استخدام‬ ‫حاالت‬Use Cases ‫العالئقية‬ ‫المعطيات‬ ‫قواعد‬ ‫ضمن‬ ‫المرضى‬ ‫معلومات‬ ‫بتخزين‬ ‫تقوم‬ ‫اليوم‬ ‫المستشفيات‬ ‫معظم‬ ‫المعلومات‬ ‫لهذه‬ ‫تحليل‬ ‫إجراء‬ ‫يتم‬ ‫لكي‬,‫إلى‬ ‫البيانات‬ ‫بنقل‬ ‫نقوم‬ ‫أن‬ ‫يجب‬Hadoop Sqoop‫ذلك‬ ‫إلجراء‬ ‫فعال‬ ‫حل‬ ‫تقدم‬ ‫استخدام‬ ‫يتم‬Sqoop‫الـ‬ ‫شركات‬ ‫قبل‬ ‫من‬ ‫كبير‬ ‫بشكل‬Big Data‫المعطيات‬ ‫قواعد‬ ‫بين‬ ‫البيانات‬ ‫لنقل‬ ‫و‬Hadoop ‫اإللكترونية‬ ‫التسويق‬ ‫شركة‬ ‫مثال‬Coupons.com‫تستخدم‬Sqoop‫بين‬ ‫البيانات‬ ‫لنقل‬Hadoop‫وبين‬ ‫البيانات‬ ‫مستودع‬IBM Netezza
  • 5. ‫يميز‬ ‫الذي‬ ‫ما‬Sqoop‫؟‬ ‫االستخدام‬ ‫سهلة‬ ‫المعطيات‬ ‫قواعد‬ ‫مختلف‬ ‫تدعم‬ ‫عالي‬ ‫أمان‬ ‫تقدم‬ ‫مكونات‬ ‫مع‬ ‫جيد‬ ‫بشكل‬ ‫تتكامل‬Hadoop ecosystem‫مثل‬ ‫المختلفة‬:HiveHbase,,Oozie ‫األداء‬ ‫في‬ ‫تحسين‬ ‫يعطي‬ ‫مما‬ ‫التوازي‬ ‫على‬ ‫البيانات‬ ‫تنقل‬ ‫إمكانية‬‫مباشرة‬ ‫االستيراد‬‫إلى‬Hive‫أو‬Hbase ‫تدعم‬Accumulo(key/value Database) ‫تستخدم‬JDBC connectors‫المعطيات‬ ‫بقواعد‬ ‫لالتصال‬,‫الـ‬ ‫هذه‬connectors‫للبيانات‬ ‫فعال‬ ‫نقل‬ ‫تؤمن‬ ‫سالمتها‬ ‫يضمن‬ ‫بشكل‬‫واتساقها‬ ‫بناء‬ ‫سهل‬ ‫بشكل‬ ‫يمكن‬connectors‫مختلفة‬ ‫معطيات‬ ‫قواعد‬ ‫مع‬ ‫لالتصال‬ ‫جديدة‬ ‫جيد‬ ‫بشكل‬ ‫لألخطاء‬ ‫معالجة‬ ‫وتقدم‬ ‫العبء‬ ‫تتحمل‬
  • 6. ‫تؤمن‬Sqoop‫للمستخدم‬Command line interface ‫يتم‬ ‫أمر‬ ‫إدخال‬ ‫عند‬‫إطالق‬Hadoop Map only job ‫مالحظة‬:‫مهمات‬ ‫إطالق‬ ‫يتم‬ ‫ال‬Reduce‫فقط‬ ‫البيانات‬ ‫لتجميع‬ ‫ألنها‬ ‫الـ‬Map job‫يطلق‬‫الـ‬ ‫من‬ ‫عدد‬mappers(‫يحدده‬‫المستخدم‬) ‫كل‬mapper task‫الـ‬ ‫على‬ ‫اعتمادا‬ ‫البيانات‬ ‫من‬ ‫جزء‬ ‫لها‬ ‫إسناد‬ ‫يتم‬ primary key‫الخاص‬‫بالجدول‬ ‫تقوم‬Sqoop‫الـ‬ ‫على‬ ‫البيانات‬ ‫بتوزيع‬mappers‫وذلك‬ ‫بالتساوي‬ ‫عالي‬ ‫أداء‬ ‫على‬ ‫للحصول‬ ‫كل‬mapper‫باستخدام‬ ‫المعطيات‬ ‫لقاعدة‬ ‫اتصال‬ ‫ينشأ‬JDBC‫ويقوم‬ ‫إلى‬ ‫بكتابته‬ ‫ويقوم‬ ‫له‬ ‫المسند‬ ‫البيانات‬ ‫من‬ ‫الجزء‬ ‫بجلب‬HDFS‫أو‬Hive ‫أو‬HBase ‫تعمل‬ ‫كيف‬Sqoop‫؟‬
  • 7. Sqoop Tools Sqoop‫األدوات‬ ‫من‬ ‫مجموعة‬ ‫عن‬ ‫عبارة‬ ‫ما‬ ‫أداة‬ ‫استخدام‬ ‫صيغة‬:sqoop tool-name [tool-arguments] ‫ضمن‬ ‫المتاحة‬ ‫باألدوات‬ ‫قائمة‬ ‫عرض‬Sqoop
  • 8. ‫األداة‬import‫إلى‬ ‫المعطيات‬ ‫قاعدة‬ ‫من‬ ‫جدول‬ ‫باستيراد‬ ‫تقوم‬HDFS ‫كل‬row‫كـ‬ ‫يمثل‬ ‫الجدول‬ ‫ضمن‬record‫ضمن‬HDFS ‫الـ‬ ‫خزن‬ُ‫ت‬records‫كل‬ ‫وضع‬ ‫ويتم‬ ‫آخر‬ ‫بمحرف‬ ‫أو‬ ‫بفاصلة‬ ‫القيم‬ ‫فصل‬ُ‫ت‬ ‫حيث‬ ‫نصية‬ ‫كملفات‬row‫جديد‬ ‫سطر‬ ‫في‬ ‫المعطيات‬ ‫بقاعدة‬ ‫االتصال‬: ‫نحدد‬‫الـ‬argument:--connect(‫تصف‬‫الـ‬server‫باالتصال‬ ‫سنقوم‬ ‫التي‬ ‫المعطيات‬ ‫وقاعدة‬‫بها‬) ‫مثال‬:$ sqoop import --connect jdbc:mysql://database.example.com/employees ‫باالتصال‬ ‫نقوم‬‫بقاعدة‬‫معطيات‬MySQL‫باسم‬employees‫الجهاز‬ ‫على‬database.example.com •‫الجهاز‬ ‫عنوان‬ ‫يكون‬ ‫أن‬ ‫يصح‬ ‫ال‬localhost‫نستخدم‬ ‫كنا‬ ‫إذا‬Sqoop‫على‬Hadoop cluster(‫كل‬ ‫ستتصل‬ ‫وإال‬node‫إلى‬ ‫االتصال‬ ‫يفشل‬ ‫أو‬ ‫مختلفة‬ ‫معطيات‬ ‫قاعدة‬) ‫الـ‬ ‫نحدد‬arguments:‫الـ‬--username‫والـ‬--password ‫الـ‬ ‫نحدد‬argument:--table‫المعطيات‬ ‫قاعدة‬ ‫ضمن‬ ‫الجدول‬ ‫لنحدد‬‫الستيراده‬ ‫الـ‬ ‫نحدد‬argument:--columns‫الستيرادها‬ ‫جدول‬ ‫من‬ ‫محددة‬ ‫عواميد‬ ‫لتحديد‬ ‫الـ‬ ‫عملية‬import
  • 9. ‫متوازي‬ ‫بشكل‬ ‫االستيراد‬ ‫عمل‬ ‫آلية‬: ‫تقوم‬Sqoop‫بشكل‬ ‫البيانات‬ ‫باستيراد‬‫متوازي‬ ‫نحدد‬‫الـ‬ ‫عدد‬map tasks‫الـ‬ ‫طريق‬ ‫عن‬ ‫االستيراد‬ ‫بعمليات‬ ‫ستقوم‬ ‫التي‬argument:--num-mappers ‫استخدام‬ ‫يتم‬ ‫افتراضي‬ ‫بشكل‬4‫مهمات‬.‫العمل‬ ‫بيئة‬ ‫إعدادات‬ ‫على‬ ‫يعتمد‬ ‫القيمة‬ ‫هذه‬ ‫زيادة‬.‫إلى‬ ‫القيمة‬ ‫هذه‬ ‫زيادة‬ ‫يؤدي‬ ‫قد‬ ‫األداء‬ ‫في‬ ‫ضعف‬ ‫وبالتالي‬ ‫المعطيات‬ ‫قاعدة‬ ‫على‬ ‫الحمل‬ ‫زيادة‬ ‫لتوزيع‬‫بين‬ ‫البيانات‬‫الـ‬map tasks‫تقوم‬Sqoop‫التقسيم‬ ‫إلجراء‬ ‫المعطيات‬ ‫قاعدة‬ ‫ضمن‬ ‫األعمدة‬ ‫أحد‬ ‫باستخدام‬(‫غالب‬‫ا‬ ‫الـ‬ ‫عمود‬primary key) ‫اختيار‬ ‫يمكن‬‫الـ‬ ‫باستخدام‬ ‫آخر‬ ‫عمود‬argument:--split-by ‫تقوم‬Sqoop‫الـ‬ ‫على‬ ‫متساوي‬ ‫بشكل‬ ‫البيانات‬ ‫بتوزيع‬map tasks ‫مثال‬:‫الـ‬ ‫عمود‬ ‫فيه‬ ‫جدول‬ ‫من‬ ‫االستيراد‬ ‫أردنا‬ ‫أننا‬ ‫بفرض‬primary key‫من‬ ‫القيم‬ ‫يأخذ‬0‫إلى‬1000.‫ستقوم‬Sqoop ‫أربعة‬ ‫بإنشاء‬map tasks‫منها‬ ‫لكل‬ ‫بإسناد‬ ‫وتقوم‬250 rows ‫الـ‬ ‫عملية‬import
  • 10. ‫األداة‬ ‫استخدام‬ ‫على‬ ‫مثال‬import $ sqoop import --connect jdbc:mysql://db.foo.com/corp --table EMPLOYEES ‫سيتم‬‫الجدول‬ ‫استيراد‬EMPLOYEES‫المعطيات‬ ‫قاعدة‬ ‫ضمن‬corp ‫إلى‬ ‫للبيانات‬ ‫استيراد‬ ‫إجراء‬ ‫على‬ ‫مثال‬Hive: $ sqoop import --connect jdbc:mysql://db.foo.com/corp --table EMPLOYEES --hive-import ‫طريق‬ ‫عن‬–hive-import‫نخبر‬Sqoop‫إلى‬ ‫االستيراد‬ ‫نريد‬ ‫أننا‬Hive ‫الـ‬ ‫عملية‬import
  • 11. ‫الـ‬ ‫عملية‬import ‫عملية‬ ‫إلجراء‬ ‫المتبعة‬ ‫اآللية‬import: ‫تقوم‬Sqoop‫بجمع‬metadata‫الخاصة‬ ‫المعطيات‬ ‫قاعدة‬ ‫من‬ ‫ستقوم‬ ‫التي‬ ‫بالبيانات‬‫باستيرادها‬ ‫الـ‬ ‫على‬ ‫اعتمادا‬metadata‫توليد‬ ‫سيتم‬java classes‫خاصة‬ ‫معه‬ ‫بالتعامل‬ ‫نقوم‬ ‫الذي‬ ‫بالجدول‬ ‫إطالق‬ ‫يتم‬Hadoop map only job‫لنقل‬‫البيانات‬ ‫الـ‬ ‫على‬ ‫اعتمادا‬ ‫الجدول‬ ‫تقسيم‬ ‫يتم‬primary key ‫الـ‬map job‫بإطالق‬ ‫يقوم‬‫الـ‬ ‫من‬ ‫عدد‬map tasks‫إسناد‬ ‫ويتم‬ ‫سيتم‬ ‫التي‬ ‫الملفات‬ ‫من‬ ‫أجزاء‬ ‫إليها‬‫استيرادها‬ ‫الـ‬map tasks‫التوازي‬ ‫على‬ ‫تعمل‬,‫وكل‬‫يقوم‬ ‫منها‬‫عدد‬ ‫بإجراء‬ ‫الـ‬ ‫من‬transactions‫لضمان‬‫البيانات‬ ‫في‬ ‫ضياع‬ ‫حدوث‬ ‫عدم‬ ‫استهالك‬ ‫من‬ ‫والتقليل‬‫الموارد‬ ‫الـ‬ ‫عملية‬ ‫أن‬ ‫بما‬import‫التوازي‬ ‫على‬ ‫تنفذ‬,‫ضم‬ ‫الخرج‬ ‫سيكون‬‫ن‬ ‫عدة‬‫ملفات‬
  • 12. ‫بعد‬‫معالجة‬‫الـ‬records‫تم‬ ‫التي‬‫إلى‬ ‫استيرادها‬HDFS(‫طريق‬ ‫عن‬MapReduce‫أو‬Hive‫مثال‬)‫في‬ ‫نرغب‬ ‫بيانات‬ ‫لدينا‬ ‫ينتج‬ ‫المعطيات‬ ‫قاعدة‬ ‫إلى‬ ‫أخرى‬ ‫مرة‬ ‫تصديرها‬ ‫األداة‬export‫من‬ ‫الملفات‬ ‫من‬ ‫مجموعة‬ ‫لتصدير‬ ‫استخدامها‬ ‫يتم‬HDFS‫المعطيات‬ ‫قاعدة‬ ‫إلى‬ ‫المعطيات‬ ‫قاعدة‬ ‫ضمن‬ ‫إليه‬ ‫النقل‬ ‫سيتم‬ ‫الذي‬ ‫الجدول‬ ‫يتواجد‬ ‫أن‬ ‫يجب‬ ‫قراءة‬ ‫سيتم‬‫على‬ ‫الملفات‬HDFS‫الـ‬ ‫من‬ ‫مجموعة‬ ‫إلى‬ ‫وتحويلها‬records‫لـ‬ ‫وفقا‬delimiters(‫المستخدم‬ ‫قبل‬ ‫من‬ ‫تحديدها‬ ‫يتم‬) ‫المعطيات‬ ‫قاعدة‬ ‫ضمن‬ ‫البيانات‬ ‫إدراج‬ ‫طريقة‬: ‫الـ‬ ‫نقل‬ ‫يتم‬ ‫افتراضي‬ ‫بشكل‬records‫طريق‬ ‫عن‬ ‫المعطيات‬ ‫قاعدة‬ ‫إلى‬INSERT statements ‫عن‬‫الـ‬ ‫طريق‬UPDATE mode‫يتم‬‫استخدام‬UPDATE statements •‫الـ‬argument:--update-key‫الـ‬ ‫لتحديد‬ ‫ستستخدم‬ ‫التي‬ ‫األعمدة‬ ‫يحدد‬rows‫تعديلها‬ ‫سيتم‬ ‫التي‬ ‫طريق‬ ‫عن‬call mode‫استدعاء‬ ‫سيتم‬stored procedure‫كل‬ ‫أجل‬ ‫من‬record‫نقله‬ ‫يتم‬ ‫الجدول‬ ‫ضمن‬ ‫األعمدة‬ ‫كل‬ ‫تصدير‬ ‫سيتم‬ ‫افتراضي‬ ‫بشكل‬,‫الـ‬ ‫طريق‬ ‫عن‬ ‫لتصديرها‬ ‫أعمدة‬ ‫تحديد‬ ‫يمكن‬arguement:--columns ‫الـ‬ ‫عملية‬export
  • 13. Arguments‫األداة‬ ‫استخدام‬ ‫عند‬ ‫إلزامية‬export: --export-dir:‫الـ‬ ‫يحدد‬directory‫ضمن‬HDFS‫نريد‬ ‫التي‬ ‫البيانات‬ ‫ملفات‬ ‫يحوي‬ ‫الذي‬‫تصديرها‬ --table:‫الـ‬ ‫اسم‬ ‫يحدد‬table‫البيانات‬ ‫نقل‬ ‫سيتم‬ ‫الذي‬‫له‬ ‫أو‬–call:‫الـ‬ ‫اسم‬ ‫يحدد‬stored procedure‫استدعائها‬ ‫سيتم‬ ‫التي‬ ‫الـ‬ ‫عملية‬ ‫أداء‬export‫على‬ ‫النقل‬ ‫يكون‬ ‫درجة‬ ‫أي‬ ‫إلى‬ ‫على‬ ‫يعتمد‬‫التوازي‬ ‫تستخدم‬Sqoop‫أربعة‬tasks‫الـ‬ ‫عملية‬ ‫إلجراء‬ ‫التوازي‬ ‫على‬export ‫البيئة‬ ‫إعدادت‬ ‫حسب‬,‫للـ‬ ‫يمكن‬tasks‫األداء‬ ‫في‬ ‫انخفاض‬ ‫إلى‬ ‫تؤدي‬ ‫أن‬ ‫يمكن‬ ‫أو‬ ‫التزامن‬ ‫من‬ ‫تحسن‬ ‫أن‬ ‫اإلضافية‬ ‫الـ‬ ‫عدد‬ ‫تحديد‬ ‫يمكن‬map tasks‫الـ‬ ‫طريق‬ ‫عن‬argument:--num-mappers ‫توليد‬ ‫تلقائيا‬ ‫يتم‬code‫يستخدم‬‫البيانات‬ ‫تحوي‬ ‫التي‬ ‫الملفات‬ ‫لمعالجة‬‫تصديرها‬ ‫نريد‬ ‫التي‬‫المعطيات‬ ‫قاعدة‬ ‫إلى‬ •‫يمكن‬‫إعادة‬ ‫الحاالت‬ ‫بعض‬ ‫في‬‫الـ‬ ‫استخدام‬code‫لعملية‬ ‫كنتيجة‬ ‫توليده‬ ‫تم‬ ‫الذي‬import‫سابقة‬ ‫الـ‬ ‫عملية‬ ‫كانت‬ ‫إذا‬insert‫الـ‬ ‫سيفشل‬ ‫المعطيات‬ ‫قاعدة‬ ‫على‬ ‫الموجودة‬ ‫القيود‬ ‫توافق‬ ‫ال‬export job (‫مثال‬‫الـ‬primary key‫الجدول‬ ‫ضمن‬ ‫مسبقا‬ ‫موجود‬) ‫الـ‬ ‫عملية‬export
  • 14. ‫الـ‬ ‫عملية‬export ‫استخدام‬staging table‫المعطيات‬ ‫قاعدة‬ ‫إلى‬ ‫البيانات‬ ‫تصدير‬ ‫عند‬: ‫فشل‬‫الـ‬ ‫أحد‬export jobs‫قاعدة‬ ‫إلى‬ ‫للبيانات‬ ‫جزئي‬ ‫لنقل‬ ‫يؤدي‬ ‫قد‬‫المعطيات‬ ‫تحديد‬ ‫طريق‬ ‫عن‬ ‫المشكلة‬ ‫هذه‬ ‫عالج‬ ‫يمكن‬staging table‫الـ‬ ‫باستخدام‬option:--staging-table ‫الـ‬ ‫ستقوم‬map tasks‫الـ‬ ‫ضمن‬ ‫البيانات‬ ‫بتعبئة‬staging table ‫الـ‬ ‫إلى‬ ‫نقلها‬ ‫سيتم‬ ‫كاملة‬ ‫البيانات‬ ‫وصول‬ ‫بعد‬table‫طريق‬ ‫عن‬ ‫المعطيات‬ ‫قاعدة‬ ‫في‬transaction‫وحيدة‬ ‫الـ‬ ‫استخدام‬ ‫يؤدي‬ ‫الفشل‬ ‫حال‬ ‫في‬staging table‫البيانات‬ ‫سالمة‬ ‫حفظ‬ ‫إلى‬‫واتساقها‬ ‫الـ‬ ‫إنشاء‬ ‫يجب‬staging table‫الـ‬ ‫تنفيذ‬ ‫قبل‬export job ‫األساسي‬ ‫الجدول‬ ‫لبنية‬ ‫مطابقة‬ ‫تكون‬ ‫أن‬ ‫يجب‬ ‫الجدول‬ ‫هذا‬ ‫بنية‬ ‫الـ‬ ‫يكون‬ ‫أن‬ ‫يجب‬staging table‫الـ‬ ‫استخدام‬ ‫يتم‬ ‫أو‬ ‫فارغ‬option:--clear-staging-table
  • 15. ‫األداة‬ ‫استخدام‬ ‫على‬ ‫مثال‬export $ sqoop export --connect jdbc:mysql://db.example.com/foo --table bar --export-dir /results/bar_data ‫سيتم‬‫محتوى‬ ‫تصدير‬‫ضمن‬ ‫الموجودة‬ ‫الملفات‬/results/bar_data‫الجدول‬ ‫إلى‬bar‫المعطيات‬ ‫قاعدة‬ ‫ضمن‬foo ‫الـ‬ ‫عملية‬export
  • 16. ‫عملية‬ ‫إلجراء‬ ‫المتبعة‬ ‫اآللية‬export: ‫تقوم‬Sqoop‫بجمع‬metadata‫الخاصة‬ ‫المعطيات‬ ‫قاعدة‬ ‫من‬ ‫بتصديرها‬ ‫ستقوم‬ ‫التي‬ ‫بالبيانات‬ ‫الـ‬ ‫على‬ ‫اعتمادا‬metadata‫توليد‬ ‫سيتم‬java classes‫خاصة‬ ‫بالتعامل‬ ‫نقوم‬ ‫الذي‬ ‫بالجدول‬‫معه‬ ‫يتم‬‫إطالق‬Hadoop map only job‫البيانات‬ ‫لنقل‬ ‫الـ‬map job‫يقوم‬‫من‬ ‫عدد‬ ‫بإطالق‬‫الـ‬map tasks‫إسناد‬ ‫ويتم‬ ‫تصديرها‬ ‫سيتم‬ ‫التي‬ ‫الملفات‬ ‫من‬ ‫أجزاء‬ ‫إليها‬ ‫الـ‬map tasks‫التوازي‬ ‫على‬ ‫تعمل‬,‫يستخدم‬ ‫منها‬ ‫وكل‬ connection‫ا‬ ‫من‬ ‫عدد‬ ‫بإجراء‬ ‫ويقوم‬ ‫المعطيات‬ ‫لقاعدة‬ ‫منفصل‬‫لـ‬ transactions‫والتقل‬ ‫البيانات‬ ‫في‬ ‫ضياع‬ ‫حدوث‬ ‫عدم‬ ‫لضمان‬‫يل‬ ‫الموارد‬ ‫استهالك‬ ‫من‬ ‫الـ‬ ‫عملية‬export
  • 17. Incremental Imports ‫غالبا‬‫ل‬ ‫بحاجة‬ ‫نكون‬ ‫ال‬‫نقل‬‫كاملة‬ ‫جداول‬,‫بل‬‫تعديل‬ ‫عليها‬ ‫جرى‬ ‫أسطر‬ ‫عدة‬ ‫لنقل‬‫أو‬‫تمت‬‫إضافتها‬ ‫تقدم‬ ‫ذلك‬ ‫لتحقيق‬Sqoop‫إجراء‬ ‫إمكانية‬:incremental imports ‫األسطر‬ ‫بإحضار‬ ‫الميزة‬ ‫هذه‬ ‫تقوم‬‫إحضارها‬ ‫تم‬ ‫التي‬ ‫األسطر‬ ‫عن‬ ‫تختلف‬ ‫التي‬‫سابقا‬‫الجدول‬ ‫من‬‫المطلوب‬ arguments:--check-column‫إحضارها‬ ‫سيتم‬ ‫التي‬ ‫األسطر‬ ‫لتحديد‬ ‫سيستخدم‬ ‫الذي‬ ‫العمود‬ ‫تحدد‬ --last-value‫ضمن‬ ‫القيمة‬ ‫تحدد‬check column‫سابقا‬ ‫إحضاره‬ ‫تم‬ ‫سطر‬ ‫آلخر‬ ‫الـ‬ ‫من‬ ‫نوعان‬ ‫هناك‬incremental imports: append:‫إحضارها‬ ‫ونريد‬ ‫المطلوب‬ ‫للجدول‬ ‫إضافتها‬ ‫تمت‬ ‫قد‬ ‫جديدة‬ ‫أسطر‬ ‫هناك‬ ‫تكون‬ ‫عندما‬ ‫سطر‬ ‫لكل‬ ‫يكون‬ ‫الجدول‬ ‫ضمن‬id,‫بالـ‬ ‫الخاص‬ ‫العمود‬ ‫نحدد‬ids‫طريق‬ ‫عن‬–check-column ‫قيمة‬ ‫لها‬ ‫التي‬ ‫األسطر‬ ‫استيراد‬ ‫يتم‬‫الـ‬ ‫ضمن‬check column‫القيمة‬ ‫من‬ ‫أكبر‬–last-value ‫مثال‬:--chech column id --last-value 100 ‫لها‬ ‫التي‬ ‫المعطيات‬ ‫قاعدة‬ ‫من‬ ‫األسطر‬ ‫استيراد‬ ‫سيتم‬id‫من‬ ‫أكبر‬100‫حصرا‬
  • 18. lastmodified:‫إحضارها‬ ‫ونريد‬ ‫المطلوب‬ ‫الجدول‬ ‫ضمن‬ ‫تعديلها‬ ‫تم‬ ‫قد‬ ‫أسطر‬ ‫هناك‬ ‫يكون‬ ‫عندما‬ ‫يستخدم‬ ‫إجراء‬ ‫يتم‬ ‫عندما‬update‫العمود‬ ‫ضمن‬ ‫الحالي‬ ‫الوقت‬ ‫وضع‬ ‫سيتم‬last-modified column ‫استيراد‬ ‫سيتم‬‫طريق‬ ‫عن‬ ‫المحدد‬ ‫التوقيت‬ ‫من‬ ‫أكبر‬ ‫توقيت‬ ‫تحوي‬ ‫التي‬ ‫األسطر‬–last-value ‫إجراء‬ ‫عند‬incremental import‫الـ‬ ‫نحدد‬ ‫أن‬ ‫يجب‬--last-value‫األسطر‬ ‫الستيراد‬ ‫مرجعية‬ ‫كقيمة‬ ‫تستخدم‬ ‫حتى‬ ‫لـ‬ ‫الجديدة‬ ‫القيمة‬ ‫على‬ ‫التعديل‬ ‫يتم‬–last-value‫استيراد‬ ‫عملية‬ ‫كل‬ ‫عند‬ ‫الـ‬ ‫عملية‬ ‫بتخزين‬ ‫قمنا‬ ‫حال‬ ‫في‬incremental import‫كـ‬saved job‫قيمة‬ ‫تعديل‬ ‫سيتم‬–last-value‫تلقائيا‬ Incremental Imports
  • 19. Saved Jobs ‫الـ‬ ‫عمليات‬import‫والـ‬export‫غالبا‬ ‫نفذ‬ُ‫ت‬‫من‬ ‫الكثير‬‫المرات‬,‫مرة‬ ‫كل‬ ‫في‬ ‫األمر‬ ‫نفس‬ ‫تنفيذ‬ ‫عاد‬ُ‫ي‬ ‫وبالتالي‬ ‫النظام‬ ‫لمدير‬ ‫صعوبة‬ ‫ذلك‬ ‫يمثل‬,‫إجراء‬ ‫عند‬ ‫خاص‬ ‫وبشكل‬incremental update ‫تسمح‬ ‫أكبر‬ ‫بفاعلية‬ ‫للتعامل‬Sqoop‫بتعريف‬saved jobs ‫الـ‬ ‫يقوم‬job‫الـ‬ ‫معلومات‬ ‫بتسجيل‬configuration‫بتنفيذ‬ ‫الخاصة‬‫ما‬ ‫أمر‬‫وقت‬ ‫في‬ ‫تنفيذه‬ ‫ليتم‬‫الحق‬ ‫األداة‬ ‫طريق‬ ‫عن‬ ‫ذلك‬ ‫يكون‬:sqoop job ‫الـ‬ ‫كان‬ ‫إذا‬job‫بـ‬ ‫يقوم‬incremental import‫الـ‬ ‫تحديث‬ ‫فسيتم‬state‫ب‬ ‫الخاصة‬‫آخر‬‫تنفيذ‬ ‫أجل‬ ‫من‬ ‫استيرادها‬ ‫تم‬ ‫أسطر‬ ‫المرة‬ ‫في‬ ‫الجديدة‬ ‫االستيرادات‬‫القادمة‬ ‫تعريف‬saved job: $ sqoop job --create myjob -- import --connect jdbc:mysql://example.com/db --table mytable ‫استخدمنا‬–create‫إلنشاء‬job‫باسم‬myjob‫ثم‬‫األمر‬ ‫حددنا‬‫الـ‬ ‫هذا‬ ‫سيقوم‬ ‫الذي‬job‫بتنفيذه‬
  • 20. ‫الـ‬ ‫مراجعة‬configuration‫الخاصة‬‫بـ‬job‫معين‬: $ sqoop job --show myjob ‫تنفيذ‬job‫معين‬: $ sqoop job --exec myjob ‫الـ‬ ‫جميع‬ ‫عرض‬saved jobs‫المتاحة‬: $ sqoop job –list Saved Jobs
  • 21. Sqoop metastore ‫األداة‬metastore‫تقوم‬‫بإعداد‬‫للـ‬ ‫مستودع‬metadata‫بـ‬ ‫الخاصة‬Sqoop ‫مشترك‬ ‫المستودع‬ ‫هذا‬ ‫يكون‬‫المستخدمين‬ ‫جميع‬ ‫بين‬. ‫تنفيذ‬ ‫إمكانية‬ ‫للمستخدمين‬ ‫تاح‬ُ‫ي‬saved jobs‫الـ‬ ‫ضمن‬ ‫مسبقا‬ ‫معرفة‬metastore‫تعريف‬ ‫أو‬saved jobs‫جديدة‬ ‫الـ‬metastore‫معطيات‬ ‫قاعدة‬ ‫عن‬ ‫عبارة‬ ‫يكون‬HSQLDB ‫األمر‬ ‫تنفيذ‬ ‫عند‬sqoop-metastore‫المعطيات‬ ‫قاعدة‬ ‫من‬ ‫نسخة‬ ‫إطالق‬ ‫يتم‬HSQLDB‫الـ‬ ‫على‬machine‫الحالية‬ ‫بالـ‬ ‫االتصال‬metastore‫عن‬ ‫يكون‬‫طريق‬TCP/IP‫المنفذ‬ ‫باستخدام‬16000 ‫الـ‬ ‫استضافة‬ ‫يمكن‬metastore‫على‬machine‫الـ‬ ‫ضمن‬Hadoop cluster‫الشبكة‬ ‫ضمن‬ ‫آخر‬ ‫مكان‬ ‫أي‬ ‫على‬ ‫أو‬ ‫بالـ‬ ‫االتصال‬metastore‫الـ‬ ‫طريق‬ ‫عن‬ ‫يكون‬argument:--meta-connect‫مثال‬: --meta-connect jdbc:hsqldb:hsql://metaserver.example.com:16000/sqoop
  • 22. Sqoop codegen ‫له‬ ‫المعطيات‬ ‫قاعدة‬ ‫في‬ ‫جدول‬ ‫كل‬DAO class‫توابع‬ ‫يحوي‬getters‫و‬setters ‫األداة‬ ‫تقوم‬codegen‫الـ‬ ‫هذا‬ ‫بتوليد‬class‫تلقائي‬ ‫بشكل‬ ‫الـ‬ ‫هذا‬ ‫توليد‬class‫الـ‬ ‫عملية‬ ‫من‬ ‫جزء‬ ‫عتبر‬ُ‫ي‬import‫نفسها‬ ‫الـ‬ ‫ملف‬ ‫ضياع‬ ‫حال‬ ‫في‬ ‫لكن‬class‫توليده‬ ‫بإعادة‬ ‫نقوم‬ ‫أن‬ ‫نحتاج‬ ‫المثال‬ ‫سبيل‬ ‫على‬ ‫مثال‬: $ sqoop codegen --connect jdbc:mysql://localhost/userdb --username root --table emp ‫الـ‬ ‫بتوليد‬ ‫قمنا‬ ‫السابق‬ ‫األمر‬ ‫طريق‬ ‫عن‬java class‫للجدول‬empl‫المعطيات‬ ‫قاعدة‬ ‫ضمن‬userdb
  • 23. Sqoop eval ‫األداة‬eval‫استعالمات‬ ‫بتنفيذ‬ ‫للمستخدمين‬ ‫تسمح‬SQL‫قاعدة‬ ‫على‬ ‫بسيطة‬‫المعطيات‬ ‫يتم‬‫الـ‬ ‫إلى‬ ‫الخرج‬ ‫طباعة‬console ‫تعطي‬‫المستخدمين‬‫فرصة‬‫لمراجعة‬‫التي‬ ‫االستعالمات‬‫ستستخدم‬‫البيانات‬ ‫الستيراد‬‫ي‬ ‫أن‬ ‫قبل‬‫استخدامها‬ ‫تم‬ ‫من‬ ‫للتأكد‬ ‫أيضا‬ ‫نستخدمها‬‫قاعدة‬ ‫مع‬ ‫االتصال‬ ‫توافر‬‫المعطيات‬ ‫مثال‬: $ sqoop eval --connect jdbc:mysql://db.example.com/corp --query "SELECT * FROM employees LIMIT 10” ‫قاعدة‬ ‫على‬ ‫استعالم‬ ‫بتنفيذ‬ ‫قمنا‬‫المعطيات‬ ‫حددنا‬‫الـ‬ ‫طريق‬ ‫عن‬ ‫تنفيذه‬ ‫نريد‬ ‫الذي‬ ‫االستعالم‬argument:--query
  • 24. Sqoop list-databases & list-tables ‫األداة‬ ‫باستخدام‬list-databases‫الـ‬ ‫جميع‬ ‫بسرد‬ ‫نقوم‬databases‫قواعد‬ ‫مخدم‬ ‫ضمن‬ ‫المتاحة‬‫المعطيات‬ ‫ضمن‬ ‫المتاحة‬ ‫المعطيات‬ ‫قواعد‬ ‫جميع‬ ‫بسرد‬ ‫نقوم‬ ‫مثال‬MySQL server: $ sqoop list-databases --connect jdbc:mysql://database.example.com/ ‫األداة‬ ‫باستخدام‬list-tables‫الـ‬ ‫جميع‬ ‫بسرد‬ ‫نقوم‬tables‫ضمن‬ ‫الموجودة‬database‫معينة‬ ‫المعطيات‬ ‫قاعدة‬ ‫ضمن‬ ‫الموجودة‬ ‫الجداول‬ ‫جميع‬ ‫بسرد‬ ‫نقوم‬ ‫مثال‬corporation: $ sqoop list-tables --connect jdbc:mysql://database.example.com/corporation
  • 25. Databases Connectors ‫تحوي‬Sqoop‫الـ‬ ‫من‬ ‫عدد‬ ‫افتراضي‬ ‫بشكل‬connectors‫المعروفة‬ ‫المعطيات‬ ‫قواعد‬ ‫مع‬ ‫لالتصال‬ ‫إنشاء‬ ‫إمكانية‬ ‫تتيح‬connectors‫جديدة‬ ‫معطيات‬ ‫قواعد‬ ‫أنظمة‬ ‫ولدعم‬ ‫النقل‬ ‫أداء‬ ‫لتحسين‬ ‫جديدة‬ ‫كل‬connector‫معينة‬ ‫معطيات‬ ‫بقاعدة‬ ‫خاص‬(MySQL connector‫مع‬ ‫يتصل‬ ‫ال‬PostgreSQL) ‫الـ‬ ‫مجال‬ ‫في‬ ‫الشركات‬ ‫من‬ ‫العديد‬IT‫تقدم‬connectors‫بها‬ ‫الخاصة‬ ‫المعطيات‬ ‫قواعد‬ ‫مع‬ ‫للتعامل‬ ‫خصصة‬ُ‫م‬ Microsoft‫تستخدم‬connector‫بين‬ ‫للنقل‬ ‫مخصص‬Microsoft SQL Server‫و‬Hadoop ‫الـ‬JDBC drivers‫مع‬ ‫جاهزة‬ ‫تأتي‬ ‫ال‬Sqoop‫يجب‬ ‫بل‬‫يدوي‬ ‫بشكل‬ ‫إضافتها‬ ‫الـ‬Connectors‫والـ‬drivers‫فقط‬ ‫توجد‬‫الـ‬ ‫على‬machine‫بتنفيذ‬ ‫تقوم‬ ‫التي‬Sqoop •‫جميع‬ ‫على‬ ‫توجد‬ ‫ال‬nodes‫الـ‬ ‫ضمن‬Hadoop cluster
  • 26. ‫المعطيات‬ ‫قاعدة‬ ‫مع‬ ‫االتصال‬ ‫آلية‬: ‫تبحث‬ ‫ما‬ ‫معطيات‬ ‫بقاعدة‬ ‫لالتصال‬Sqoop‫أوال‬‫عن‬connector‫بشكل‬ ‫تحميله‬ ‫تم‬ ‫مناسب‬‫يدوي‬ ‫الـ‬ ‫ضمن‬ ‫تبحث‬ ‫تجد‬ ‫لم‬ ‫إذا‬connectors‫طريق‬ ‫عن‬ ‫االفتراضية‬JDBC URL(‫بـ‬ ‫يبدأ‬jdbc:) ‫لم‬ ‫إذا‬‫تجد‬‫الـ‬ ‫استخدام‬ ‫يتم‬connector‫االفتراضي‬Generic JDBC Connector ‫الـ‬ ‫اختيار‬ ‫بعد‬connector‫الـ‬ ‫اختيار‬ ‫يتم‬JDBC driver ‫هناك‬ ‫معطيات‬ ‫قاعدة‬ ‫كل‬ ‫أجل‬ ‫من‬JDBC driver‫استخدامه‬ ‫يتم‬ ‫وحيد‬ •‫مثال‬MySQL connector‫باستخدام‬ ‫سيقوم‬MySQL JDBC Driver(‫يدعى‬ ‫والذي‬Connector/J) ‫الـ‬ ‫نستخدم‬ ‫عندما‬Generic JDBC Connector‫الـ‬ ‫تحديد‬ ‫يجب‬driver‫الـ‬ ‫طريق‬ ‫عن‬parameter:-driver ‫الـ‬ ‫تحديد‬ ‫تم‬ ‫أن‬ ‫بعد‬connector‫والـ‬driver ‫يتم‬‫الـ‬ ‫بين‬ ‫االتصال‬ ‫إنشاء‬Sqoop client‫المعطيات‬ ‫وقاعدة‬. Databases Connectors
  • 27. Demo

Editor's Notes

  1. قواعد المعطيات التقليدية كانت منذ زمن هي الخيار الأمثل الذي تستخدمه الشركات لتقوم بتخزين بياناتها. لكن مع الازدياد الكبير في حجم البيانات وتنوع هذه البيانات ظهر مفهوم الـ big data وبدأت الشركات تستخدم تقنيات مثل Hadoop Hadoop تخزن وتعالج الـ Big Data باستخدام بيئات معالجة processing مثل: MapReduce ,Hive ,Hbase ,Pig وبيئات تخزين مقل: HDFS وذلك للاستفادة من المعالجة والتخزين الموزع. نقل البيانات بين قواعد المعطيات العلائقية وHadoop يحوي صعوبة وتعقيدات تقنية يجب القيام بتحضير مسبق للبيانات الموجودة ضمن قاعدة المعطيات قبل أن تستطيع Hadoop أن تصل إلى هذه البيانات
  2. يتم استخدام Sqoop من قبل الكثير من الشركات لنقل البيانات بين قواعد المعطيات وHadoop مثلا شركة التسويق الإلكترونية Coupons.com تستخدم Sqoop لنقل البيانات بين Hadoop وبين مستودع البيانات IBM Netezza
  3. ميزات Sqoop: سهلة الاستخدام تدعم الكثير من قواعد البيانات تقدم أمان security عالي تتكامل بشكل جيد مع مكونات Hadoop ecosystem الأخرى تنقل البيانات على التوازي مما يعطي تحسين في الأداء تستخدم JDBC connectors للاتصال بقواعد المعطيات ,هذه الـ connectors تؤمن نقل فعال للبيانات بشكل يضمن سلامتها واتساقها consistency. يمكن بشكل سهل بناء connectors جديدة للاتصال مع قواعد معطيات مختلفة تتحمل العبء وتقدم معالجة للأخطاء بشكل جيد
  4. كيف تعمل Sqoop؟ تؤمن Sqoop للمستخدم Command line interface عندما يقوم المستخدم بإدخال command يتم معالجته من قبل Sqoop وإطلاق Hadoop Map only job لاستيراد وتصدير البيانات ملاحظة: لا يتم إطلاق مهمات Reduce لأنها تستخدم لإجراء تجميع للبيانات وSqoop تقوم بنقل للبيانات فقط ولا تحتاج لمهمات Reduce الـ Map job يقوم بإطلاق عدد من الـ mappers (العدد يمكن أن يحدده المستخدم) كل mapper task يتم إسناد لها جزء من البيانات اعتمادا على الـ primary key الخاص بالجدول تقوم Sqoop بتوزيع البيانات على الـ mappers بالتساوي وذلك للحصول على أداء عالي الآن كل mapper ينشأ اتصال لقاعدة المعطيات باستخدام JDBC ويقوم بجلب الجزء من البيانات المسند له ويقوم بكتابته إلى HDFS أو Hive أو HBase
  5. Sqoop تعتبر مجموعة من الـtools . لاستخدام sqoop نحدد الـ tool التي نريد استخدامها ونحدد الـ arguments التي تتحكم بهذه الأداة صيغة استخدام الأداة: sqoop tool-name [tool-arguments] لعرض قائمة بجميع الأدوات المتاحة نستخدم help tool التي تأتي مع sqoop كالتالي حيث نكتب: sqoop help
  6. sqoop-import import tool تقوم بعملimport لجدول من قاعدة المعطيات إلى HDFS كل row ضمن الجدول يمثل كـ record ضمن HDFS تُخزن الـ records كملفات نصية حيث تُفصل القيم بفاصلة أو بمحرف آخر ويتم وضع كل row في سطر جديد للاتصال بقاعدة المعطيات نقوم بتحديد الـ argument: --connect تصف هذه الـ argument الـ server وقاعدة المعطيات التي سنقوم بالاتصال بها مثلا: $ sqoop import --connect jdbc:mysql://database.example.com/employees سيتم الاتصال بقاعدة المعطيات MySQL موجودة باسم employees على الجهاز database.example.com لا يصح أن يكون عنوان الجهاز localhost إذا كنا نستخدم Sqoop على Hadoop cluster حيث كل الـ TaskTracker nodes ستتصل إلى قاعدة المعطيات المحددة عن طريق –connect ,وفي حال كان العنوان localhost ستتصل كل node لقاعدة معطيات مختلفة أو يفشل الاتصال بدلا من ذلك نحدد العنوان الخاص بالجهاز الذي يحوي قاعدة المعطيات وبالتالي يمكن لجميع الـ nodes الوصول له عند الاتصال بقاعدة المعطيات نحدد الـ --username والـ --password نستخدم الـ argument: --table لنحدد الجدول ضمن قاعدة المعطيات لاستيراده نستخدم الـ argument: --columns لتحديد عواميد محددة من جدول لاستيرادها
  7. آلية عمل الاستيراد بشكل متوازي: تقوم Sqoop باستيراد البيانات بشكل متوازي ,يمكن أن نقوم بتحديد عدد الـ map tasks التي ستقوم بعمليات الاستيراد عن طريق الـ argument: --num-mappers بشكل افتراضي يتم استخدام 4 مهمات. زيادة هذه القيمة يعتمد على إعدادات بيئة العمل. قد يؤدي زيادة هذه القيمة إلى زيادة الحمل على قاعدة المعطيات وبالتالي ضعف في الأداء لتوزيع البيانات بين الـ map tasks تقوم Sqoop باستخدام أحد الأعمدة ضمن قاعدة المعطيات لإجراء التقسيم (غالبا عمود الـ primary key) يمكن اختيار عمود باستخدام --split-by تقوم Sqoop بتوزيع البيانات بشكل متساوي على الـ map tasks مثلا: بفرض أننا أردنا الاستيراد من جدول فيه عمود الـ primary key يأخذ القيم من 0 إلى 1000. ستقوم Sqoop بإنشاء أربعة map tasks وتقوم بإسناد لكل منها 250 rows.
  8. الآلية المتبعة لإجراء عملية import: تقوم sqoop بإرسال طلب إلى قاعدة المعطيات للحصول على metadate information تستجيب قاعدة المعطيات على الطلب بإعادة الـ metadata information المطلوبة اعتمادا على هذه الـ metadata information تقوم sqoop بتوليد java classes يتم إجراء تقسيم للـ table اعتمادا على الـ primary key الخاص بالـ table يتم إنشاء عدد منmappers كل منها يكون باستيراد جزء معين من الجدول على التوازي (بنفس الوقت) بما أن عملية الـ import تنفذ على التوازي ,سيكون الخرج ضمن عدة ملفات كل mapper يقوم بنقل البيانات باستخدام عدد من الـ transactions لضمان عدم حدوث ضياع في البيانات ولتقليل استهلاك الموارد
  9. بعد أن يتم معالجة الـ records التي تم استيرادها إلى HDFS (عن طريق MapReduce أو Hive مثلا) ينتج لدينا بيانات نرغب في تصديرها مرة أخرى إلى قاعدة المعطيات الأداة export يتم استخدامها لتصدير مجموعة من الملفات من HDFS إلى قاعدة المعطيات يجب أن يتواجد الجدول الذي سيتم النقل إليه ضمن قاعدة المعطيات سيتم قراءة الملفات وتحويلها إلى مجموعة من الـ records وفقا لـ delimiters (يتم تحديدها من قبل المستخدم) طريقة النقل: بشكل افتراضي يتم نقل الـ records إلى قاعدة المعطيات عن طريق INSERT statements عن طريق الـ UPDATE mode سيتم استخدام UPDATE statements لتحديث الـ records الموجودة في قاعدة المعطيات باستخدام الـ argument: --update-key نحدد أسماء الأعمدة التي سيتم استخدامها ضمن الـ UPDATE statements لتحديد الـ rows التي سيتم تعديلها عن طريق call mode سيتم استدعاء stored procedure من أجل كل record يتم نقله بشكل افتراضي سيتم تصدير كل الأعمدة ضمن الجدول ,يمكن تحديد أعمدة لتصديرها عن طريق الـ arguement: --columns
  10. Arguments إلزامية عند استخدام الأداة export: --export-dir : يحدد الـ directory ضمن HDFS الذي يحوي ملفات البيانات التي نريد تصديرها --table : يحدد اسم الـ table الذي سيتم نقل البيانات له أو –call : يحدد اسم الـ stored procedure التي سيتم استدعائها أداء عملية الـ export يعتمد على إلى أي درجة يكون النقل على التوازي. Sqoop تستخدم أربعة tasks على التوازي لإجراء عملية الـ export هذا قد لا يكون أمثلي. يختلف عدد الـ tasks المناسب حسب إعدادات كل بيئة ,يمكن لـ tasks إضافية أن تحسن من التزامن ,لكن في حالات عندما تكون قاعدة المعطيات تحوي نقطة ضعف في استخدام الـ indices على سبيل المثال سيؤدي الـ load الإضافي إلى حدوث انخفاض في الأداء يمكن تحديد عدد الـ map tasks عن طريق الـ argument: --num-mappers تقوم Sqoop بشكل تلقائي بتوليد code الذي سيستخدم لمعالجة الملفات التي تحوي البيانات التي سنقوم بتصديرها إلى قاعدة المعطيات يمكن إعادة استخدام الـ code الذي تم توليده كنتيجة لعملية import سابقة إذا كانت عملية الـ export تقوم بمحاولة إجراء insert لأسطر ضمن قاعدة البيانات بشكل لا يتوافق مع القيود المعرفة على قاعدة المعطيات (مثلا الـ primary key موجود مسبقا ضمن الجدول) ,سيتم فشل عملية الـ export
  11. بما أن Sqoop تقوم بتقسيم عملية الـ export إلى عدة transactions ,فإن فشل أحد الـ export jobs قد يؤدي لنقل جزئي للبيانات إلى قاعدة المعطيات. هذا سيؤدي بالتالي إلى فشل مزيد من الـ jobs بسبب حصول عدم تناسق بين البيانات أو بسبب حدوث تكرار لها. يمكن علاج هذه المشكلة عن طريق تحديد staging table عن طريق الـ option: --staging-table حيث ستقوم الـ map tasks بتعبئة البيانات ضمن الـ staging table بعد وصول البيانات كاملة سيتم نقلها إلى الـ table في قاعدة المعطيات عن طريق transaction وحيدة في حال الفشل يؤدي استخدام الـ staging table إلى حفظ سلامة البيانات واتساقها. يجب إنشاء الـ staging table قبل تنفيذ الـ export job بنية هذا الجدول يجب أن تكون مطابقة لبنية الجدول الأساسي يجب أن يكون الـ staging table فارغ أو يتم استخدام الـ option: --clear-staging-table
  12. مثال: $ sqoop export --connect jdbc:mysql://db.example.com/foo --table bar --export-dir /results/bar_data سيتم تصدير محتوى الملفات الموجودة ضمن  /results/bar_data إلى الجدول bar ضمن قاعدة المعطيات foo
  13. يتم تنفيذ تصدير البيانات عن طريق عدد من الـ writers تعمل على التوازي. كل writer يستخدم connection منفصل لقاعدة المعطيات ويقوم بإجراء عدد من الـ transactions. يتم استخدام عدد من الـ transactions لنقل البيانات لضمان عدم حدوث ضياع في البيانات والتقليل من استهلاك الموارد
  14. في أغلب الأحيان لا نكون بحاجة إلى نقل جداول كاملة بين Hadoop وقاعدة المعطيات ,بل نكون بحاجة لنقل عدة أسطر جرى عليها تعديل مثلا أو تمت إضافتها وهنا تأتي فائدة الميزة التي تدعمها sqoop وهي: incremental imports تقوم هذه الميزة بإحضار الأسطر الجديدة من الجدول المطلوب أي الأسطر التي تختلف عن الأسطر التي تم إحضارها سابقا --check-column  عن طريق هذه الـ argument نحدد العمود ضمن الجدول الذي سنستخدمه كمرجع لتحديد الأسطر التي سنحضرها --last-value  عن طريق هذه الـ arguement نحدد آخر قيمة ضمن الـ check-column من الأسطر التي تم إحضارها سابقا ,سنستخدم هذه القيمة عند إحضار الأسطر الجديدة Sqoop تدعم نوعين من الـ incremental imports: append وlastmodified نستخدم append عندما نكون نستورد جدول من قاعدة المعطيات يتم بالعادة إضافة جديدة له ويكون لكل سطر Id جديد ,نحدد العمود الذي يحوي قيم الـ Ids عن طريق --check-column تقوم sqoop باستيراد الأسطر من قاعدة المعطيات التي لها قيمة ضمن الـ check column أكبر من القيمة –last-value مثلا: إذا كان لـ check column هو العمود id وكانت –last-value 100 ,عندئذ سيتم استيراد الأسطر فقط من قاعدة المعطيات لها id أكبر من 100.
  15. نستخدم lastmodified عندما يكون الجدول الذي نقوم باستيراده يتم إجراء update لسطوره بالعادة. عندما يتم إجراء update يتم تحديث قيمة عمود يدعى last-modified column للوقت الحالي. الآن الأسطر التي تحوي توقيت أكبر من التوقيت المحدد عن طريق –last-value سيتم استيرادها عندما نريد إجراء incremental import جديد يجب أن نحدد الـ --last-value حتى نتأكد أن الاستيراد سيكون بالضبط للأسطر في قاعدة المعطيات التي تمت إضافتها أو التعديل عليها. يفضل أن إنشاء الـ incremental imports كـ saved jobs في هذه الحالة يتم التعديل على قيمة –last-value بشكل تلقائي
  16. عمليات الـ import والـ export بين قاعدة المعطيات وHadoop من الممكن أن نحتاج لتنفيذها الكثير من المرات وبالتالي يتم تنفيذ نفس الـ commands في كل مرة. هذا الأمر يشكل مشكلة وبشكل خاص عندما نكون نقوم بـ incremental import للتعامل مع هذا الأمر فإن Sqoop تقدم إمكانية تعريف saved jobs. الـ saved job تقوم بتسجيل معلومات الـ configuration الخاصة بتنفيذ command ما ليتم تنفيذه في وقت لاحق. يتم ذلك عن طريق الأداة: sqoop job إذا كان الـ job يقوم بـ incremental import فسيتم تحديث الـ state الخاصة آخر أسطر تم استيرادها من أجل تنفيذ الاستيرادات الجديدة في المرة القادمة. تعريف saved job $ sqoop job --create myjob -- import --connect jdbc:mysql://example.com/db --table mytable نلاحظ أننا استخدمنا –create لإنشاء job باسم myjob ثم كتبنا الأمر الذي سيقوم هذا الـ job بتنفيذه
  17. يمكن أن نراجع الـ configuration الخاصة بjob معين عن طريق: $ sqoop job --show myjob يمكن تنفيذ الـ job عن طريق: $ sqoop job --exec myjob يمكن عرض جميع الـ saved jobs المتاحة عن طريق: $ sqoop job –list
  18. تحوي sqoop أداة تدعى metastore تقوم هذه الأداة بإعداد مستدوع repository للـ metadata مشترك بين جميع المستخدمين. عن طريق هذا المستودع يمكن للعديد من المستخدمين المحليين أو المتصلين عن بعد أن يقوموا بتعريف saved jobs أو تنفيذ saved jobs معرفة مسبقا ضمن الـ metastore. من الاستخدامات الأساسية للـ metastore هو أن نعرف saved jobs ونجعلها متاحة ضمن الـ metastore وبالتالي يمكن لجميع المستخدمين أن يستخدموا هذه الـ jobs. عن طريق تنفيذ sqoop-metastore نقوم بإطلاق قاعدة معطيات HSQLDB على الـ machine الحالية. تكون قاعدة المعطيات هذه مشتركة بين جميع المستخدمين. الآن يمكن للـ clients الاتصال بقاعدة المعطيات هذه وتعريف jobs التي سيتم تشاركها بين المستخدمين. يتم الاتصال بالـ metastore عن طريق TCP/IP باستخدام المنفذ 16000. الـ metastore يمكن أن تتم استضافتها على machine ضمن الـ Hadoop cluster أو على أي مكان آخر ضمن الشبكة. يتم الاتصال بالـ metastore عن طريق الـ argument: --meta-connect . على سبيل المثال: --meta-connect jdbc:hsqldb:hsql://metaserver.example.com:16000/sqoop
  19. الأداة eval تسمح للمستخدمين بتنفيذ استعلامات SQL بسيطة على قاعدة المعطيات. سيتم طباعة الخرج إلى الـ console. تفيد بأنها تعطي للمستخدمين فرصة أن يراجعوا الاستعلامات التي سيقومون باستخدامها لاستيراد البيانات إلى Hadoop قبل أن يقوموا بذلك فعليا. تفيد أيضا بالتأكد من توافر الاتصال مع قاعدة المعطيات. $ sqoop eval --connect jdbc:mysql://db.example.com/corp \ --query "SELECT * FROM employees LIMIT 10” مثلا عن طريق الأمر السابق قمنا بتنفيذ استعلام على قاعدة المعطيات حيث حددنا الاستعلام الذي نريد تنفيذه عن طريق الـ argument: --query
  20. يمكن أن نقوم بسرد جميع الـ databases المتاحة ضمن مخدم قواعد المعطيات عن طريق الأداة list-databases مثلا نقوم بسرد جميع قواعد المعطيات المتاحة ضمن MySQL server: $ sqoop list-databases --connect jdbc:mysql://database.example.com/ يمكن أن نقوم بسرد جميع الـ tables الموجودة ضمن database معينة مثلا نقوم بسرد جميع الجداول الموجودة ضمن قاعدة المعطيات corporation: $ sqoop list-tables --connect jdbc:mysql://database.example.com/corporation
  21. باستخدام sqoop يمكن أن نقوم بإجراء import أو export للبيانات من وإلى قواعد البيانات التي تدعم JDBC interface تسمح sqoop ببناء connectors إضافية يمكن أن يتم ذلك لتحسين أداء النقل من أجل بعض أنظمة قواعد المعطيات الـ connector تكون مصممة من أجل database vendor معينة ,مثلا MySQL Connector لن يعمل مع قاعدة المعطيات PostgreSQL العديد من الشركات في مجال الـ IT تقدم connectors خاصة بها للتعامل مع قواعد المعطيات الخاصة بها مثلا Microsoft تستخدم Sqoop-based connector لنقل البيانات من قواعد المعطيات الخاصة بـ Microsoft SQL Server إلى Hadoop الـ JDBC drivers لا تأتي جاهزة مع برمجية Sqoop بل يجب أن نقوم بتحميلها وإضافتها لـ sqoop بشكل يدوي الـ Connectors والـ drivers يتم تنزيلهم فقط على الـ machine التي تقوم بتنفيذ Sqoop وليس على كل الـ nodes ضمن الـ Hadoop cluster
  22. عند الاتصال مع قاعدة المعطيات تقوم sqoop بالبحث ضمن الـ connectors المحملة بشكل يدوي وتبحث إن كان هناك connector يوافق قاعدة المعطيات التي نحاول أن نتصل بها. إذا لم تجد تقوم sqoop بالبحث ضمن JDBC URL (يبدأ بـ jdbc:) لتفحص إن كانت قاعدة المعطيات التي نحاول أن نتصل بها تملك connector موجود بشكل افتراضي built-in ضمن sqoop. إذا لم تجد أي connectors تقوم باستخدام الـ connector الافتراضي: Generic JDBC Connector بعد أن يتم اختيار الـ connector يتم اختيار الـ JDBC driver. من أجل أغلب قواعد المعطيات هناك JDBC driver وحيد يتم استخدامه. مثلا MySQL connector سيقوم باستخدام MySQL JDBC Driver (والذي يدعى Connector/J) الاستثناء لذلك هو عندما نستخدم الـ connector الافتراضي Generic JDBC Connector ,هذا الـ connector غير مرتبط بقاعدة معطيات محددة ,في هذه الحالة يجب أن نحدد اسم الـ driver عن طريق الـ parameter:  –driver الآن بعد أن تم تحديد الـ connector والـ driver يتم إنشاء الاتصال بين الـ Sqoop client وقاعدة المعطيات.