نسخ البيانات بين Data Lake Storage Gen1 وقاعدة بيانات Azure SQL باستخدام Sqoop
تعرف على كيفية استخدام Apache Sqoop لاستيراد البيانات وتصديرها بين قاعدة بيانات Azure SQL و Azure Data Lake Storage Gen1.
ما هو سكوب؟
تعد تطبيقات البيانات الضخمة خيارا طبيعيا لمعالجة البيانات غير المهيكلة وشبه المنظمة، مثل السجلات والملفات. ومع ذلك، قد تحتاج أيضا إلى معالجة البيانات المنظمة المخزنة في قواعد البيانات العلائقية.
Apache Sqoop هي أداة مصممة لنقل البيانات بين قواعد البيانات العلائقية ومستودع البيانات الضخمة ، مثل Data Lake Storage Gen1. يمكنك استخدامه لاستيراد البيانات من نظام إدارة قواعد البيانات العلائقية (RDBMS) مثل قاعدة بيانات Azure SQL إلى Data Lake Storage Gen1. يمكنك بعد ذلك تحويل البيانات وتحليلها باستخدام أحمال عمل البيانات الكبيرة، ثم تصدير البيانات مرة أخرى إلى RDBMS. في هذه المقالة، يمكنك استخدام قاعدة بيانات في قاعدة بيانات Azure SQL كقاعدة بيانات ارتباطية للاستيراد/التصدير منها.
المتطلبات الأساسية
قبل أن تبدأ، يجب أن يكون لديك ما يلي:
- اشتراك Azure. راجع الحصول على الإصدار التجريبي المجاني من Azure .
- حساب Gen1 Azure Data Lake Storage. للحصول على إرشادات حول كيفية إنشاء الحساب، راجع بدء استخدام Azure Data Lake Storage Gen1
- Azure HDInsight cluster with access to a Data Lake Storage Gen1 account. راجع إنشاء مجموعة HDInsight مع Data Lake Storage Gen1. تفترض هذه المقالة أن لديك مجموعة HDInsight Linux مع وصول Data Lake Storage Gen1.
- قاعدة بيانات Azure SQL. للحصول على إرشادات حول كيفية إنشاء قاعدة بيانات في قاعدة بيانات Azure SQL، راجع إنشاء قاعدة بيانات في قاعدة بيانات Azure SQL
إنشاء نماذج من الجداول في قاعدة البيانات
للبدء، قم بإنشاء جدولين نموذجيين في قاعدة البيانات. استخدم SQL Server Management Studio أو Visual Studio للاتصال بقاعدة البيانات ثم قم بتشغيل الاستعلامات التالية.
إنشاء جدول1
CREATE TABLE [dbo].[Table1]( [ID] [int] NOT NULL, [FName] [nvarchar](50) NOT NULL, [LName] [nvarchar](50) NOT NULL, CONSTRAINT [PK_Table_1] PRIMARY KEY CLUSTERED ( [ID] ASC ) ) ON [PRIMARY] GOإنشاء جدول2
CREATE TABLE [dbo].[Table2]( [ID] [int] NOT NULL, [FName] [nvarchar](50) NOT NULL, [LName] [nvarchar](50) NOT NULL, CONSTRAINT [PK_Table_2] PRIMARY KEY CLUSTERED ( [ID] ASC ) ) ON [PRIMARY] GOقم بتشغيل الأمر التالي لإضافة بعض نماذج البيانات إلى Table1. اترك الجدول2 فارغا. في وقت لاحق، ستقوم باستيراد البيانات من Table1 إلى Data Lake Storage Gen1. بعد ذلك، ستقوم بتصدير البيانات من Data Lake Storage Gen1 إلى Table2.
INSERT INTO [dbo].[Table1] VALUES (1,'Neal','Kell'), (2,'Lila','Fulton'), (3, 'Erna','Myers'), (4,'Annette','Simpson');
استخدم Sqoop من مجموعة HDInsight مع إمكانية الوصول إلى Data Lake Storage Gen1
تحتوي مجموعة HDInsight بالفعل على حزم Sqoop المتاحة. إذا قمت بتكوين مجموعة HDInsight لاستخدام Data Lake Storage Gen1 كمساحة تخزين إضافية، فيمكنك استخدام Sqoop (بدون أي تغييرات في التكوين) لاستيراد/تصدير البيانات بين قاعدة بيانات علائقية مثل قاعدة بيانات Azure SQL وحساب Data Lake Storage Gen1.
بالنسبة لهذه المقالة ، نفترض أنك قمت بإنشاء مجموعة Linux لذلك يجب عليك استخدام SSH للاتصال بالمجموعة. راجع الاتصال إلى مجموعة HDInsight المستندة إلى Linux.
تحقق مما إذا كان يمكنك الوصول إلى حساب Data Lake Storage Gen1 من المجموعة. قم بتشغيل الأمر التالي من موجه SSH:
hdfs dfs -ls adl://<data_lake_storage_gen1_account>.azuredatalakestore.net/يوفر هذا الأمر قائمة بالملفات/المجلدات في حساب Data Lake Storage Gen1.
استيراد البيانات من قاعدة بيانات Azure SQL إلى Data Lake Storage Gen1
انتقل إلى الدليل حيث تتوفر حزم Sqoop. عادة ما يكون هذا الموقع هو
/usr/hdp/<version>/sqoop/bin.استيراد البيانات من Table1 إلى حساب Data Lake Storage Gen1. استخدم الصيغة التالية:
sqoop-import --connect "jdbc:sqlserver://<sql-database-server-name>.database.windows.net:1433;username=<username>@<sql-database-server-name>;password=<password>;database=<sql-database-name>" --table Table1 --target-dir adl://<data-lake-storage-gen1-name>.azuredatalakestore.net/Sqoop/SqoopImportTable1يمثل العنصر النائب sql-database-server-name اسم الخادم حيث يتم تشغيل قاعدة البيانات. يمثل العنصر النائب لاسم قاعدة بيانات sql اسم قاعدة البيانات الفعلي.
على سبيل المثال،
sqoop-import --connect "jdbc:sqlserver://mysqoopserver.database.windows.net:1433;username=user1@mysqoopserver;password=<password>;database=mysqoopdatabase" --table Table1 --target-dir adl://myadlsg1store.azuredatalakestore.net/Sqoop/SqoopImportTable1تحقق من نقل البيانات إلى حساب Data Lake Storage Gen1. شغِّل الأمر التالي:
hdfs dfs -ls adl://hdiadlsg1store.azuredatalakestore.net/Sqoop/SqoopImportTable1/يجب أن تشاهد الإخراج التالي.
-rwxrwxrwx 0 sshuser hdfs 0 2016-02-26 21:09 adl://hdiadlsg1store.azuredatalakestore.net/Sqoop/SqoopImportTable1/_SUCCESS -rwxrwxrwx 0 sshuser hdfs 12 2016-02-26 21:09 adl://hdiadlsg1store.azuredatalakestore.net/Sqoop/SqoopImportTable1/part-m-00000 -rwxrwxrwx 0 sshuser hdfs 14 2016-02-26 21:09 adl://hdiadlsg1store.azuredatalakestore.net/Sqoop/SqoopImportTable1/part-m-00001 -rwxrwxrwx 0 sshuser hdfs 13 2016-02-26 21:09 adl://hdiadlsg1store.azuredatalakestore.net/Sqoop/SqoopImportTable1/part-m-00002 -rwxrwxrwx 0 sshuser hdfs 18 2016-02-26 21:09 adl://hdiadlsg1store.azuredatalakestore.net/Sqoop/SqoopImportTable1/part-m-00003يتوافق كل ملف جزء m-* مع صف في الجدول المصدر، الجدول1. يمكنك عرض محتويات ملفات part-m-* للتحقق منها.
تصدير البيانات من Data Lake Storage Gen1 إلى قاعدة بيانات Azure SQL
تصدير البيانات من حساب Data Lake Storage Gen1 إلى الجدول الفارغ، Table2، في قاعدة بيانات Azure SQL. استخدم بناء الجملة التالي.
sqoop-export --connect "jdbc:sqlserver://<sql-database-server-name>.database.windows.net:1433;username=<username>@<sql-database-server-name>;password=<password>;database=<sql-database-name>" --table Table2 --export-dir adl://<data-lake-storage-gen1-name>.azuredatalakestore.net/Sqoop/SqoopImportTable1 --input-fields-terminated-by ","على سبيل المثال،
sqoop-export --connect "jdbc:sqlserver://mysqoopserver.database.windows.net:1433;username=user1@mysqoopserver;password=<password>;database=mysqoopdatabase" --table Table2 --export-dir adl://myadlsg1store.azuredatalakestore.net/Sqoop/SqoopImportTable1 --input-fields-terminated-by ","تحقق من تحميل البيانات إلى جدول قاعدة بيانات SQL. استخدم SQL Server Management Studio أو Visual Studio للاتصال بقاعدة بيانات Azure SQL ثم قم بتشغيل الاستعلام التالي.
SELECT * FROM TABLE2يجب أن يحتوي هذا الأمر على الإخراج التالي.
ID FName LName ------------------- 1 Neal Kell 2 Lila Fulton 3 Erna Myers 4 Annette Simpson
اعتبارات الأداء أثناء استخدام Sqoop
للحصول على معلومات حول ضبط الأداء لمهمة Sqoop لنسخ البيانات إلى Data Lake Storage Gen1، راجع منشور مدونة أداء Sqoop.