Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Узнайте, как использовать 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 — это средство для передачи данных из или в кластер HDInsight.
jq. Программа jq используется для обработки данных JSON, возвращаемых из запросов REST.
Опыт работы со Sqoop. Дополнительные сведения см. в руководстве пользователя по Sqoop.
Отправка заданий Apache Sqoop с помощью Curl
Используйте Curl для экспорта данных с помощью заданий Apache Sqoop из хранилища Azure в SQL Server.
Примечание.
При использовании Curl или любого другого взаимодействия REST с WebHCat необходимо пройти проверку подлинности запросов, указав имя пользователя и пароль администратора кластера HDInsight. Кроме того, необходимо использовать имя кластера в составе универсального идентификатора ресурса (URI), используемого для отправки запросов на сервер.
Для команд в этом разделе замените USERNAME
на имя пользователя для аутентификации в кластере, а PASSWORD
на пароль учетной записи пользователя. Замените CLUSTERNAME
именем кластера.
REST API защищен с помощью обычной проверки подлинности. Всегда следует выполнять запросы с помощью безопасного HTTP (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 — пользователь, выполняющий команду.
команда — команда 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
Если задание завершено, состояние будет УСПЕШНО.
Примечание.
Этот запрос Curl возвращает документ нотации объектов JavaScript (JSON) со сведениями о задании; jq используется для получения только значения состояния.
После изменения состояния задания на SUCCEEDED результаты задания можно получить из хранилища больших двоичных объектов Azure. Параметр
statusdir
, передаваемый с помощью запроса, содержит расположение выходного файла. В данном случае этоwasb:///example/data/sqoop/curl
. Этот адрес сохраняет выходные данные задания в каталогеexample/data/sqoop/curl
в контейнере хранилища по умолчанию, используемом кластером HDInsight.Вы можете использовать портал Azure для доступа к stderr и stdout blob-объектам.
Чтобы проверить экспорт данных, используйте следующие запросы из клиента SQL для просмотра экспортированных данных:
SELECT COUNT(*) FROM [dbo].[log4jlogs] WITH (NOLOCK); SELECT TOP(25) * FROM [dbo].[log4jlogs] WITH (NOLOCK);
Ограничения
- Массовый экспорт - В Linux-версии HDInsight соединитель Sqoop, используемый для экспорта данных в Microsoft SQL Server или Azure SQL Database, в настоящее время не поддерживает массовые вставки.
- Пакетная обработка — с HDInsight на базе Linux при использовании
-batch
опции при выполнении вставок Sqoop будет выполнять несколько вставок вместо объединения операций вставки.
Сводка
Как показано в этом документе, можно использовать необработанный HTTP-запрос для выполнения, мониторинга и просмотра результатов заданий Sqoop в кластере HDInsight.
Дополнительные сведения об интерфейсе REST, используемом в этой статье, см. в руководстве по REST API Apache Sqoop.
Дальнейшие действия
Использование Apache Sqoop с Apache Hadoop в HDInsight
Для других статей HDInsight, связанных с curl: