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


Выполнение заданий 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 с помощью Curl

Используйте Curl для экспорта данных с помощью заданий Apache Sqoop из хранилища Azure в SQL Server.

Примечание.

При использовании Curl или любого другого взаимодействия REST с WebHCat необходимо пройти проверку подлинности запросов, указав имя пользователя и пароль администратора кластера HDInsight. Кроме того, необходимо использовать имя кластера в составе универсального идентификатора ресурса (URI), используемого для отправки запросов на сервер.

Для команд в этом разделе замените USERNAME на имя пользователя для аутентификации в кластере, а PASSWORD на пароль учетной записи пользователя. Замените CLUSTERNAME именем кластера.

REST API защищен с помощью обычной проверки подлинности. Всегда следует выполнять запросы с помощью безопасного HTTP (HTTPS), чтобы обеспечить безопасное отправку учетных данных на сервер.

  1. Чтобы упростить использование, задайте указанные ниже переменные. Этот пример основан на среде Windows, изменив ее в соответствии с потребностями в вашей среде.

    set CLUSTERNAME=
    set USERNAME=admin
    set PASSWORD=
    set SQLDATABASESERVERNAME=
    set SQLDATABASENAME=
    set SQLPASSWORD=
    set SQLUSER=sqluser
    
  2. В командной строке выполните следующую команду, чтобы убедиться, что вы можете подключиться к кластеру HDInsight:

    curl -u %USERNAME%:%PASSWORD% -G https://%CLUSTERNAME%.azurehdinsight.net/templeton/v1/status
    

    Вы должны получить ответ, аналогичный следующему:

    {"status":"ok","version":"v1"}
    
  3. Чтобы отправить задание в 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"}
      
  4. Чтобы проверить состояние задания, используйте следующую команду. Замените 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 используется для получения только значения состояния.

  5. После изменения состояния задания на SUCCEEDED результаты задания можно получить из хранилища больших двоичных объектов Azure. Параметр statusdir, передаваемый с помощью запроса, содержит расположение выходного файла. В данном случае это wasb:///example/data/sqoop/curl. Этот адрес сохраняет выходные данные задания в каталоге example/data/sqoop/curl в контейнере хранилища по умолчанию, используемом кластером HDInsight.

    Вы можете использовать портал Azure для доступа к stderr и stdout blob-объектам.

  6. Чтобы проверить экспорт данных, используйте следующие запросы из клиента 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: