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


Запуск заданий 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.

Предварительные требования

Отправка заданий Sqoop с помощью cURL

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

Примечание

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

При использовании команд, описанных в этом разделе, замените USERNAME на имя пользователя для выполнения проверки подлинности в кластере, а PASSWORD — на пароль учетной записи пользователя. Замените CLUSTERNAME именем кластера.

REST API защищен с помощью обычной проверки подлинности. Чтобы обеспечить безопасную отправку учетных данных на сервер, все запросы следует отправлять с помощью протокола 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 — пользователь, выполняющий команду.

      • command — выполняемая команда 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
    

    Если задание завершено, у него будет состояние SUCCEEDED(Успешно).

    Примечание

    Этот запрос Curl возвращает документ нотации объектов JavaScript с информацией о задании. При этом jq используется только для получения значения состояния.

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

    Портал Azure можно использовать для доступа к большим двоичным объектам stderr и stdout.

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