نسخ البيانات بين 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 كقاعدة بيانات ارتباطية للاستيراد/التصدير منها.

المتطلبات الأساسية

قبل أن تبدأ، يجب أن يكون لديك ما يلي:

إنشاء نماذج من الجداول في قاعدة البيانات

  1. للبدء، قم بإنشاء جدولين نموذجيين في قاعدة البيانات. استخدم 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
    
  2. قم بتشغيل الأمر التالي لإضافة بعض نماذج البيانات إلى 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.

  1. بالنسبة لهذه المقالة ، نفترض أنك قمت بإنشاء مجموعة Linux لذلك يجب عليك استخدام SSH للاتصال بالمجموعة. راجع الاتصال إلى مجموعة HDInsight المستندة إلى Linux.

  2. تحقق مما إذا كان يمكنك الوصول إلى حساب 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

  1. انتقل إلى الدليل حيث تتوفر حزم Sqoop. عادة ما يكون هذا الموقع هو /usr/hdp/<version>/sqoop/bin.

  2. استيراد البيانات من 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
    
  3. تحقق من نقل البيانات إلى حساب 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

  1. تصدير البيانات من حساب 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 ","
    
  2. تحقق من تحميل البيانات إلى جدول قاعدة بيانات 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.

الخطوات التالية