Запуск заданий Apache Sqoop в HDInsight с помощью Curl
Узнайте, как использовать Curl для запуска заданий Apache Sqoop в кластере Apache Hadoop в HDInsight. В этой статье показано, как экспортировать данные из службы хранилища Azure и импортировать их в базу данных SQL Server с помощью Curl. Эта статья является продолжением статьи Использование Apache Sqoop с Hadoop в HDInsight.
Curl используется для демонстрации возможностей взаимодействия с HDInsight с помощью необработанных HTTP-запросов для выполнения и мониторинга заданий Sqoop, а также получения их результатов. Для этого используется REST API для WebHCat (прежнее название — Templeton), предоставляемый кластером HDInsight.
Предварительные требования
Должна быть выполнена настройка тестовой среды, описанная в разделе Использование Apache Sqoop с Hadoop в HDInsight.
Клиент для отправки запроса к Базе данных SQL Azure. Рекомендуем использовать SQL Server Management Studio или Visual Studio Code.
Curl. Curl — это средство для передачи данных в кластер HDInsight или из него.
jq. Служебная программа jq используется для обработки данных JSON, возвращаемых запросами REST.
Опыт работы со Sqoop. Дополнительные сведения см. в руководстве пользователя по Sqoop.
Отправка заданий Sqoop с помощью cURL
Используйте Curl для экспорта данных с помощью заданий Apache Sqoop из службы хранилища Azure в SQL Server.
Примечание
При использовании Curl или любых других средств связи REST с WebHCat нужно выполнять аутентификацию запросов с помощью пароля и имени пользователя администратора кластера HDInsight. Имя кластера необходимо также использовать в составе универсального кода ресурса (URI), используемого для отправки запросов на сервер.
При использовании команд, описанных в этом разделе, замените USERNAME
на имя пользователя для выполнения проверки подлинности в кластере, а PASSWORD
— на пароль учетной записи пользователя. Замените CLUSTERNAME
именем кластера.
REST API защищен с помощью обычной проверки подлинности. Чтобы обеспечить безопасную отправку учетных данных на сервер, все запросы следует отправлять с помощью протокола HTTPS.
Для удобства использования задайте указанные ниже переменные. Этот пример предназначен для среды Windows. Измените его в соответствии с требованиями используемой среды.
set CLUSTERNAME= set USERNAME=admin set PASSWORD= set SQLDATABASESERVERNAME= set SQLDATABASENAME= set SQLPASSWORD= set SQLUSER=sqluser
Используйте следующую команду в командной строке, чтобы проверить возможность подключения к кластеру HDInsight:
curl -u %USERNAME%:%PASSWORD% -G https://%CLUSTERNAME%.azurehdinsight.net/templeton/v1/status
Вы должны получить ответ, аналогичный показанному ниже:
{"status":"ok","version":"v1"}
Чтобы отправить задание Sqoop, воспользуйтесь следующей командой:
curl -u %USERNAME%:%PASSWORD% -d user.name=%USERNAME% -d command="export --connect jdbc:sqlserver://%SQLDATABASESERVERNAME%.database.windows.net;user=%SQLUSER%@%SQLDATABASESERVERNAME%;password=%PASSWORD%;database=%SQLDATABASENAME% --table log4jlogs --export-dir /example/data/sample.log --input-fields-terminated-by \0x20 -m 1" -d statusdir="wasb:///example/data/sqoop/curl" https://%CLUSTERNAME%.azurehdinsight.net/templeton/v1/sqoop
Ниже приведены параметры, используемые в этой команде:
-d — так как
-G
не используется, в запросе по умолчанию используется метод POST.-d
задает значения данных, отправляемые в запросе.user.name — пользователь, выполняющий команду.
command — выполняемая команда Sqoop.
statusdir — каталог, в который будет записано состояние этого задания.
Эта команда возвращает идентификатор задания, который можно использовать для проверки состояния задания.
{"id":"job_1415651640909_0026"}
Чтобы проверить состояние задания, используйте следующую команду. Замените
JOBID
значением, возвращенным на предыдущем шаге. Например, если возвращено значение{"id":"job_1415651640909_0026"}
, то значениеJOBID
равноjob_1415651640909_0026
. При необходимости измените расположениеjq
.set JOBID=job_1415651640909_0026 curl -G -u %USERNAME%:%PASSWORD% -d user.name=%USERNAME% https://%CLUSTERNAME%.azurehdinsight.net/templeton/v1/jobs/%JOBID% | C:\HDI\jq-win64.exe .status.state
Если задание завершено, у него будет состояние SUCCEEDED(Успешно).
Примечание
Этот запрос Curl возвращает документ нотации объектов JavaScript с информацией о задании. При этом jq используется только для получения значения состояния.
После изменения состояния задания на SUCCEEDED результаты задания можно получить из хранилища больших двоичных объектов Azure. Параметр
statusdir
, передаваемый с помощью запроса, содержит расположение выходного файла. В данном случае этоwasb:///example/data/sqoop/curl
. При использовании этого адреса выходные данные задания сохраняются в каталогеexample/data/sqoop/curl
в контейнере хранилища, используемом по умолчанию кластером HDInsight.Портал Azure можно использовать для доступа к большим двоичным объектам stderr и stdout.
Чтобы убедиться, что данные экспортированы, выполните следующие запросы из клиента SQL для просмотра экспортированных данных:
SELECT COUNT(*) FROM [dbo].[log4jlogs] WITH (NOLOCK); SELECT TOP(25) * FROM [dbo].[log4jlogs] WITH (NOLOCK);
Ограничения
- Массовый экспорт: при использовании HDInsight на основе Linux соединитель Sqoop, применяемый для экспорта данных в Microsoft SQL Server или Базу данных SQL Azure, пока не поддерживает операции массовой вставки.
- Пакетная обработка: при использовании HDInsight на основе Linux, когда для выполнения вставок применяется переключатель
-batch
, Sqoop выполняет несколько вставок вместо пакетной обработки операций вставки.
Сводка
Как показано в этом документе, для запуска, мониторинга и просмотра результатов выполнения заданий Sqoop в кластере HDInsight можно использовать необработанные HTTP-запросы.
Дополнительную информацию об интерфейсе REST, используемом в этой статье, см. в справочнике по REST API Sqoop.
Дальнейшие действия
Использование Apache Sqoop с Hadoop в HDInsight
Другие статьи об HDInsight, в которых используется curl: