Копирование данных между 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 в качестве реляционной базы данных для импорта и экспорта.
Предпосылки
Перед началом убедитесь, что у вас есть следующие элементы.
- подписка Azure. Посмотрите Получение бесплатной пробной версии Azure.
- Учетная запись Azure Data Lake Storage 1-го поколения. Инструкции по созданию учетной записи см. в статье Начало работы с Azure Data Lake Storage 1-го поколения
- кластер Azure HDInsight с доступом к учетной записи Data Lake Storage Gen1. См. создание кластера HDInsight с Data Lake Storage Gen1. В этой статье предполагается, что у вас есть кластер HDInsight Linux с доступом Data Lake Storage 1-го поколения.
- База данных SQL Azure. Инструкции по созданию базы данных в базе данных SQL Azure см. в статье Создание базы данных в базе данных SQL Azure
Создание примеров таблиц в базе данных
Чтобы начать, создайте две примеры таблиц в базе данных. Используйте 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. Оставьте 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-го поколения.
В этой статье предполагается, что вы создали кластер Linux, поэтому для подключения к кластеру следует использовать SSH. См. Подключение к кластеру HDInsight под управлением Linux.
Проверьте, можно ли получить доступ к учетной записи 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-го поколения
Перейдите в каталог, в котором доступны пакеты 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-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
Убедитесь, что данные были переданы в учетную запись 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
Экспортируйте данные из учетной записи 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 ","
Убедитесь, что данные были отправлены в таблицу базы данных 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 .