Использование Apache Sqoop для импорта и экспорта данных между Apache Hadoop в HDInsight и Базой данных SQL Azure
Узнайте, как использовать Apache Sqoop для импорта и экспорта между кластером Apache Hadoop в Azure HDInsight и Базой данных SQL Azure или Microsoft SQL Server. В этом руководстве используется команда sqoop
непосредственно из головного узла кластера Hadoop. В этом документе вы подключитесь к головному узлу, используя SSH, и выполните команды. Эта статья является продолжением статьи Использование Apache Sqoop с Hadoop в HDInsight.
Необходимые компоненты
Должна быть выполнена настройка тестовой среды, описанная в разделе Использование Apache Sqoop с Hadoop в HDInsight.
Клиент SSH. Дополнительные сведения см. в руководстве по подключению к HDInsight (Apache Hadoop) с помощью SSH.
Опыт работы со Sqoop. Дополнительные сведения см. в руководстве пользователя по Sqoop.
Настройка
С помощью команды ssh command подключитесь к кластеру. Измените приведенную ниже команду, заменив CLUSTERNAME именем своего кластера, а затем введите команду:
ssh sshuser@CLUSTERNAME-ssh.azurehdinsight.net
Для удобства использования задайте переменные. Замените
PASSWORD
,MYSQLSERVER
иMYDATABASE
соответствующими значениями, а затем введите указанные ниже команды.export PASSWORD='PASSWORD' export SQL_SERVER="MYSQLSERVER" export DATABASE="MYDATABASE" export SERVER_CONNECT="jdbc:sqlserver://$SQL_SERVER.database.windows.net:1433;user=sqluser;password=$PASSWORD" export SERVER_DB_CONNECT="jdbc:sqlserver://$SQL_SERVER.database.windows.net:1433;user=sqluser;password=$PASSWORD;database=$DATABASE"
Экспорт Sqoop
Из Hive в SQL.
Чтобы убедиться, что Sqoop имеет доступ к базе данных, введите приведенную ниже команду в открытом SSH-подключении. Эта команда возвращает список баз данных.
sqoop list-databases --connect $SERVER_CONNECT
Введите следующую команду, чтобы получить список таблиц для указанной базы данных:
sqoop list-tables --connect $SERVER_DB_CONNECT
Чтобы экспортировать данные из таблицы Hive
hivesampletable
в таблицуmobiledata
базы данных, введите приведенную ниже команду в открытом SSH-подключении:sqoop export --connect $SERVER_DB_CONNECT \ -table mobiledata \ --hcatalog-table hivesampletable
Вы можете убедиться, что данные экспортированы, выполнив следующий запрос в SSH-подключении:
sqoop eval --connect $SERVER_DB_CONNECT \ --query "SELECT COUNT(*) from dbo.mobiledata WITH (NOLOCK)" sqoop eval --connect $SERVER_DB_CONNECT \ --query "SELECT TOP(10) * from dbo.mobiledata WITH (NOLOCK)"
Импорт Sqoop
Из SQL в хранилище Azure.
Введите приведенную ниже команду в открытом SSH-подключении, чтобы импортировать данные из таблицы SQL
mobiledata
, в каталог HDInsightwasbs:///tutorials/usesqoop/importeddata
. Поля в данных разделены знаками табуляции, а строки завершаются символом новой строки.sqoop import --connect $SERVER_DB_CONNECT \ --table mobiledata \ --target-dir 'wasb:///tutorials/usesqoop/importeddata' \ --fields-terminated-by '\t' \ --lines-terminated-by '\n' -m 1
Вместо этого можно указать таблицу Hive:
sqoop import --connect $SERVER_DB_CONNECT \ --table mobiledata \ --target-dir 'wasb:///tutorials/usesqoop/importeddata2' \ --fields-terminated-by '\t' \ --lines-terminated-by '\n' \ --create-hive-table \ --hive-table mobiledata_imported2 \ --hive-import -m 1
Когда импорт завершится, введите следующую команду в открытом SSH-подключении, чтобы получить список данных в новом каталоге:
hadoop fs -tail /tutorials/usesqoop/importeddata/part-m-00000
Используйте beeline для проверки того, что таблица была создана в Hive.
Connect
beeline -u 'jdbc:hive2://headnodehost:10001/;transportMode=http'
Поочередно выполните каждый из представленных ниже запросов и изучите выходные данные:
show tables; describe mobiledata_imported2; SELECT COUNT(*) FROM mobiledata_imported2; SELECT * FROM mobiledata_imported2 LIMIT 10;
Выйдите из beeline с помощью
!exit
.
Ограничения
Массовый экспорт. При работе с HDInsight под управлением Linux соединитель Sqoop, используемый для экспорта данных в SQL, не поддерживает массовую вставку данных.
Пакетная обработка: при использовании HDInsight на основе Linux, когда для выполнения вставок применяется параметр
-batch
, Sqoop выполняет несколько вставок вместо пакетной обработки операций вставки.
Важные замечания
HDInsight и SQL Server должны находиться в одной виртуальной сети Azure.
Пример см. в статье "Подключение HDInsight к локальному сетевому документу".
Дополнительные сведения об использовании HDInsight с виртуальная сеть Azure см. в статье о расширении HDInsight с помощью документа azure виртуальная сеть. Дополнительные сведения см. в статье Виртуальная сеть Azure.
Также SQL Server должен разрешать аутентификацию SQL. Дополнительные сведения см. в документе Выбор режима проверки подлинности.
Необходимо настроить SQL Server для удаленных соединений.
Следующие шаги
Теперь вы узнали, как использовать Sqoop. Дополнительные сведения см. на следующих ресурсах:
- Используйте Apache Oozie с HDInsight: используйте действие Sqoop в рабочем процессе Oozie.
- Анализ данных о задержке рейсов с помощью HDInsight. Примените Interactive Query для анализа данных о задержке рейсов, а затем экспортируйте эти данные с помощью Sqoop в базу данных, размещенную в Azure.
- Отправка данных для заданий Hadoop в HDInsight: узнайте о других способах отправки данных в HDInsight или хранилище BLOB-объектов Azure.