Запуск заданий MapReduce в среде Apache Hadoop, размещенной в HDInsight, с помощью REST
Узнайте, как с помощью REST API WebHCat для Apache Hive запускать задания MapReduce в среде Apache Hadoop, размещенной в кластере HDInsight. Curl используется для демонстрации возможностей взаимодействия с HDInsight с помощью необработанных HTTP-запросов для выполнения заданий MapReduce, их мониторинга и получения их результатов.
Примечание
Если вы уже знакомы с использованием серверов Hadoop на платформе Linux, но не знакомы с HDInsight, ознакомьтесь с документом Сведения об использовании HDInsight в Linux.
Предварительные требования
- Кластер Apache Hadoop в HDInsight. См. Создание кластеров под управлением Linux в HDInsight с помощью портала Azure.
Любое из следующих:
Выполнение задания MapReduce
Примечание
При использовании Curl или любых других средств связи REST с WebHCat нужно проводить аутентификацию запросов с помощью пароля и имени пользователя администратора кластера HDInsight. Имя кластера необходимо использовать в составе универсального кода ресурса (URI), используемого для отправки запросов на сервер.
API-интерфейс REST защищается с помощью обычной проверки подлинности доступа. Чтобы обеспечить безопасную отправку учетных данных на сервер, все запросы следует отправлять с помощью протокола HTTPS.
Curl
Для удобства работы задайте указанные ниже переменные. Этот пример предназначен для среды Windows. Измените его в соответствии с требованиями используемой среды.
set CLUSTERNAME= set PASSWORD=
Используйте следующую команду в командной строке, чтобы проверить возможность подключения к кластеру 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"}
Чтобы отправить задание 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
Конец универсального кода ресурса (/mapreduce/jar) сообщает WebHCat, что этот запрос запускает задание MapReduce из класса в JAR-файле. Ниже приведены параметры, используемые в этой команде:
-
-d:
-G
не используется, поэтому в запросе по умолчанию используется метод POST.-d
задает значения данных, отправляемые в запросе.- user.name— пользователь, выполняющий команду.
- jar: расположение JAR-файла, содержащего класс для запуска.
- class: класс, содержащий логику MapReduce.
- arg: аргументы, передаваемые в задание MapReduce. В данном случае это входной текстовый файл и каталог, который используется для вывода.
Эта команда должна вернуть идентификатор задания, который можно использовать для проверки состояния задания:
job_1415651640909_0026
.-
-d:
Чтобы проверить состояние задания, используйте следующую команду. Замените значение
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
Для удобства работы задайте указанные ниже переменные. Вместо
CLUSTERNAME
укажите реальное имя кластера. Выполните команду и введите пароль для входа в кластер, когда появится соответствующий запрос.$clusterName="CLUSTERNAME" $creds = Get-Credential -UserName admin -Message "Enter the cluster login password"
Используйте следующую команду, чтобы проверить возможность подключения к кластеру HDInsight:
$resp = Invoke-WebRequest -Uri "https://$clustername.azurehdinsight.net/templeton/v1/status" ` -Credential $creds ` -UseBasicParsing $resp.Content
Вы должны получить ответ, аналогичный показанному ниже коду JSON.
{"version":"v1","status":"ok"}
Чтобы отправить задание 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
Конец универсального кода ресурса (/mapreduce/jar) сообщает WebHCat, что этот запрос запускает задание MapReduce из класса в JAR-файле. Ниже приведены параметры, используемые в этой команде:
- user.name— пользователь, выполняющий команду.
- jar: расположение JAR-файла, содержащего класс для запуска.
- class: класс, содержащий логику MapReduce.
- arg: аргументы, передаваемые в задание MapReduce. В данном случае это входной текстовый файл и каталог, который используется для вывода.
Эта команда должна вернуть идентификатор задания, который можно использовать для проверки состояния задания:
job_1415651640909_0026
.Чтобы проверить состояние задания, используйте следующую команду.
$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
Оба метода
Если задание завершено, то возвращается состояние
SUCCEEDED
.После изменения состояния задания на
SUCCEEDED
результаты задания можно получить из хранилища BLOB-объектов Azure. Параметрstatusdir
, передаваемый в запросе, содержит расположение выходного файла. В данном случае это/example/curl
. Этот адрес задает каталог/example/curl
для сохранения выходных данных задания, который размещен в хранилище по умолчанию для кластера.
Вы можете вывести список этих файлов и скачать их с помощью интерфейса командной строки Azure. Дополнительные сведения о работе с хранилищем BLOB-объектов см. в статье Краткое руководство. Создание, скачивание и составление списка больших двоичных объектов с помощью Azure CLI.
Дальнейшие действия
Дополнительная информация о других способах работы с Hadoop в HDInsight:
- Использование MapReduce в Apache Hadoop в HDInsight
- Использование Apache Hive с Apache Hadoop в HDInsight
Дополнительные сведения об интерфейсе REST, используемом в этой статье, см. в справочнике по WebHCat.