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


Копирование данных между 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 в Data Lake Storage 1-го поколения. Затем можно преобразовать и проанализировать данные с помощью рабочих нагрузок больших данных, а затем экспортировать данные обратно в RDBMS. В этой статье вы используете базу данных в Базе данных SQL Azure в качестве реляционной базы данных для импорта и экспорта.

Предпосылки

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

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

  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. Оставьте 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 из кластера 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 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-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 .

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