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


Выполнение заданий MapReduce с помощью Apache Hadoop в HDInsight с помощью REST

Узнайте, как использовать REST API Apache Hive WebHCat для выполнения заданий MapReduce в кластере Apache Hadoop в HDInsight. Curl используется для демонстрации возможности взаимодействия с HDInsight с помощью необработанных HTTP-запросов для выполнения заданий MapReduce.

Примечание.

Если вы уже знакомы с использованием серверов Hadoop под управлением Linux, но вы не знакомы с HDInsight, ознакомьтесь с разделом "Что нужно знать о Apache Hadoop на основе Linux в документе HDInsight ".

Предпосылки

Любое из следующих:

  • Windows PowerShell или
  • Curl с jq

Выполнение задания MapReduce

Примечание.

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

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

Curl

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

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

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

    Ниже приведены параметры, используемые в этой команде:

    • -u: указывает имя пользователя и пароль, используемые для проверки подлинности запроса.
    • -G: указывает, что эта операция является запросом GET

    Начало URI https://CLUSTERNAME.azurehdinsight.net/templeton/v1совпадает со всеми запросами.

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

    {"version":"v1","status":"ok"}
    
  3. Чтобы отправить задание MapReduce, используйте следующую команду. При необходимости измените путь к jq .

    curl -u admin:%PASSWORD% -d user.name=admin ^
    -d jar=/example/jars/hadoop-mapreduce-examples.jar ^
    -d class=wordcount -d arg=/example/data/gutenberg/davinci.txt -d arg=/example/data/output ^
    https://%CLUSTERNAME%.azurehdinsight.net/templeton/v1/mapreduce/jar | ^
    C:\HDI\jq-win64.exe .id
    

    Конец URI (/mapreduce/jar) сообщает WebHCat, что этот запрос запускает задание MapReduce из класса в JAR-файле. Ниже приведены параметры, используемые в этой команде:

    • -d: -G не используется, поэтому по умолчанию используется метод POST для запроса. -d указывает значения данных, отправляемые запросом.
      • user.name: пользователь, выполняющий команду
      • jar: расположение JAR-файла, содержащего класс, который должен быть запущен
      • класс: класс, содержащий логику MapReduce
      • arg: аргументы, передаваемые в задание MapReduce. В этом случае входной текстовый файл и каталог, используемые для выходных данных

    Эта команда должна возвращать идентификатор задания, который можно использовать для проверки состояния задания: job_1415651640909_0026

  4. Чтобы проверить состояние задания, используйте следующую команду. Замените значение фактическим значениемJOBID, возвращаемым на предыдущем шаге. При необходимости изменяйте расположение jq .

    set JOBID=job_1415651640909_0026
    
    curl -G -u admin:%PASSWORD% -d user.name=admin https://%CLUSTERNAME%.azurehdinsight.net/templeton/v1/jobs/%JOBID% | ^
    C:\HDI\jq-win64.exe .status.state
    

PowerShell

  1. Чтобы упростить использование, задайте указанные ниже переменные. Замените CLUSTERNAME фактическим именем кластера. Выполните команду и введите пароль для входа в кластер при появлении запроса.

    $clusterName="CLUSTERNAME"
    $creds = Get-Credential -UserName admin -Message "Enter the cluster login password"
    
  2. Используйте следующую команду, чтобы убедиться, что вы можете подключиться к кластеру HDInsight:

    $resp = Invoke-WebRequest -Uri "https://$clustername.azurehdinsight.net/templeton/v1/status" `
        -Credential $creds `
        -UseBasicParsing
    $resp.Content
    

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

    {"version":"v1","status":"ok"}
    
  3. Чтобы отправить задание MapReduce, используйте следующую команду:

    $reqParams = @{}
    $reqParams."user.name" = "admin"
    $reqParams.jar = "/example/jars/hadoop-mapreduce-examples.jar"
    $reqParams.class = "wordcount"
    $reqParams.arg = @()
    $reqParams.arg += "/example/data/gutenberg/davinci.txt"
    $reqparams.arg += "/example/data/output"
    $resp = Invoke-WebRequest -Uri "https://$clusterName.azurehdinsight.net/templeton/v1/mapreduce/jar" `
       -Credential $creds `
       -Body $reqParams `
       -Method POST `
       -UseBasicParsing
    $jobID = (ConvertFrom-Json $resp.Content).id
    $jobID
    

    Конец URI (/mapreduce/jar) сообщает WebHCat, что этот запрос запускает задание MapReduce из класса в JAR-файле. Ниже приведены параметры, используемые в этой команде:

    • user.name: пользователь, выполняющий команду
    • jar: расположение JAR-файла, содержащего класс, который должен быть запущен
    • класс: класс, содержащий логику MapReduce
    • arg: аргументы, передаваемые в задание MapReduce. В этом случае входной текстовый файл и каталог, используемые для выходных данных

    Эта команда должна возвращать идентификатор задания, который можно использовать для проверки состояния задания: job_1415651640909_0026

  4. Чтобы проверить состояние задания, используйте следующую команду.

    $reqParams=@{"user.name"="admin"}
    $resp = Invoke-WebRequest -Uri "https://$clusterName.azurehdinsight.net/templeton/v1/jobs/$jobID" `
       -Credential $creds `
       -Body $reqParams `
       -UseBasicParsing
    
    # ConvertFrom-JSON can't handle duplicate names with different case
    # So change one to prevent the error
    $fixDup=$resp.Content.Replace("jobID","job_ID")
    (ConvertFrom-Json $fixDup).status.state
    

Оба метода

  1. Если задание завершено, возвращаемое состояние — это SUCCEEDED.

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

Вы можете вывести список этих файлов и скачать их с помощью интерфейса командной строки Azure. Дополнительные сведения об использовании Azure CLI для работы с хранилищем Blob-объектов Azure см. в кратком руководстве: создание, скачивание и перечисление Blob-объектов с помощью Azure CLI.

Дальнейшие действия

Дополнительная информация о других способах работы с Hadoop в HDInsight:

Дополнительные сведения об интерфейсе REST, используемом в этой статье, см. в справочнике по WebHCat.