Поделиться через


Копирование данных между Data Lake Storage 1-го поколения и базой данных SQL Azure с помощью Sqoop

Узнайте, как с помощью Apache Sqoop импортировать и экспортировать данные между Базой данных SQL Azure и Azure Data Lake Storage 1-го поколения.

Что такое Sqoop?

Приложения для работы с большими объемами данных являются естественным выбором для обработки неструктурированных и частично структурированных данных, таких как журналы и файлы. Но у вас может возникнуть необходимость обработки структурированных данных, хранимых в реляционных базах данных.

Apache Sqoop — это средство, предназначенное для передачи данных между реляционными базами данных и репозиторием больших данных, например Data Lake Storage 1-го поколения. Его можно использовать для импорта данных из системы управления реляционными базами данных (RDBMS), такой как База данных SQL Azure, в Azure Data Lake Storage 1-го поколения. Затем данные можно преобразовать и проанализировать с помощью рабочих нагрузок больших данных, а после этого экспортировать обратно в RDBMS. В этой статье в качестве реляционной базы данных для импорта и экспорта используется база данных службы "База данных SQL Azure".

Предварительные требования

Перед началом работы убедитесь, что у вас есть такие компоненты.

Создание примеров таблиц в базе данных

  1. Сначала создайте в базе данных две тестовые таблицы. С помощью SQL Server Management Studio или Visual Studio подключитесь к базе данных и выполните приведенные ниже запросы.

    Создание Table1

    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
    

    Создание Table2

    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. Оставьте таблицу Table2 пустой. Позднее вы импортируете данные из таблицы Table1 в Data Lake Storage 1-го поколения. Затем вы экспортируете данные из Data Lake Storage 1-го поколения в таблицу Table2.

    INSERT INTO [dbo].[Table1] VALUES (1,'Neal','Kell'), (2,'Lila','Fulton'), (3, 'Erna','Myers'), (4,'Annette','Simpson');
    

Использование Sqoop из кластера Azure HDInsight с доступом в Data Lake Storage 1-го поколения

В кластере HDInsight уже имеются доступные пакеты Sqoop. Если для кластера HDInsight настроено использование Data Lake Storage 1-го поколения в качестве дополнительного хранилища, можно применить Sqoop (без изменения конфигурации) для импорта и экспорта данных между реляционной базой данных (например, Базой данных SQL Azure) и учетной записью Data Lake Storage 1-го поколения.

  1. В этой статье предполагается, что вы создали кластер Linux, поэтому для подключения к нему следует использовать SSH. См. раздел Подключение к кластеру HDInsight на основе Linux.

  2. Проверьте, доступна ли учетная запись хранилища Data Lake Storage 1-го поколения из кластера. Выполните следующую команду из командной строки SSH:

    hdfs dfs -ls adl://<data_lake_storage_gen1_account>.azuredatalakestore.net/
    

    Эта команда возвратит список файлов и папок в учетной записи хранилища Data Lake Storage 1-го поколения.

Импорт данных из Базы данных SQL Azure в Data Lake Storage 1-го поколения

  1. Перейдите в каталог, где доступны пакеты Sqoop. Как правило, это расположение /usr/hdp/<version>/sqoop/bin.

  2. Импортируйте данные из таблицы Table1 в учетную запись Data Lake Storage 1-го поколения. Используйте следующий синтаксис:

    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-database-name представляет реальное имя базы данных.

    Например,

    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 1-го поколения. Выполните следующую команду:

    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
    

    Каждый файл part-m-* соответствует строке в исходной таблице Table1. Чтобы проверить это, просмотрите содержимое файлов part-m-*.

Экспорт данных из Data Lake Storage 1-го поколения в Базу данных SQL Azure

  1. Экспортируйте данные из учетной записи Data Lake Storage 1-го поколения в пустую таблицу Table2 в базе данных SQL Azure. Используйте приведенный ниже синтаксис.

    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 подключитесь к базе данных SQL Azure, а затем выполните следующий запрос.

    SELECT * FROM TABLE2
    

    Должны отобразиться указанные ниже выходные данные команды.

     ID  FName    LName
    -------------------
    1    Neal     Kell
    2    Lila     Fulton
    3    Erna     Myers
    4    Annette  Simpson
    

Рекомендации по производительности при использовании Sqoop

Сведения о настройке производительности задания Sqoop, копирующего данные в Data Lake Storage 1-го поколения, собраны в записи блога о производительности Sqoop.

Дальнейшие действия