Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Узнайте, как использовать Apache Livy, REST API Apache Spark, который используется для отправки удаленных заданий в кластер Azure HDInsight Spark. Подробные сведения см. в Apache Livy.
Вы можете использовать Livy для выполнения интерактивных оболочек Spark или отправки пакетных заданий для выполнения на Spark. В этой статье рассказывается об использовании Livy для отправки пакетных заданий. Фрагменты кода в этой статье используют cURL для вызова REST API к конечной точке Livy Spark.
Предпосылки
Кластер Apache Spark в HDInsight. Для получения инструкций см. Создание кластеров Apache Spark в Azure HDInsight.
Отправка пакетного задания Apache Livy Spark
Перед отправкой пакетного задания необходимо отправить jar-файл приложения в хранилище кластера, связанном с кластером. Для этого можно использовать AzCopy, служебную программу командной строки. Существуют различные другие клиенты, которые можно использовать для отправки данных. Дополнительные сведения см. в разделе "Отправка данных для заданий Apache Hadoop" в HDInsight.
curl -k --user "admin:password" -v -H "Content-Type: application/json" -X POST -d '{ "file":"<path to application jar>", "className":"<classname in jar>" }' 'https://<spark_cluster_name>.azurehdinsight.net/livy/batches' -H "X-Requested-By: admin"
Примеры
Если JAR-файл находится в хранилище кластера (WASBS)
curl -k --user "admin:mypassword1!" -v -H "Content-Type: application/json" -X POST -d '{ "file":"wasbs://[email protected]/data/SparkSimpleTest.jar", "className":"com.microsoft.spark.test.SimpleFile" }' "https://mysparkcluster.azurehdinsight.net/livy/batches" -H "X-Requested-By: admin"
Если вы хотите передать jar-файл и имя класса в составе входного файла (в этом примере input.txt)
curl -k --user "admin:mypassword1!" -v -H "Content-Type: application/json" -X POST --data @C:\Temp\input.txt "https://mysparkcluster.azurehdinsight.net/livy/batches" -H "X-Requested-By: admin"
Получение сведений о пакетах Livy Spark, выполняемых в кластере
Синтаксис:
curl -k --user "admin:password" -v -X GET "https://<spark_cluster_name>.azurehdinsight.net/livy/batches"
Примеры
Если вы хотите получить все пакеты Livy Spark, выполняемые в кластере, выполните следующие действия:
curl -k --user "admin:mypassword1!" -v -X GET "https://mysparkcluster.azurehdinsight.net/livy/batches"
Если вы хотите получить определенный пакет с заданным идентификатором пакета
curl -k --user "admin:mypassword1!" -v -X GET "https://mysparkcluster.azurehdinsight.net/livy/batches/{batchId}"
Удалить пакетное задание Livy Spark
curl -k --user "admin:mypassword1!" -v -X DELETE "https://<spark_cluster_name>.azurehdinsight.net/livy/batches/{batchId}"
Пример
Удаление пакетного задания с идентификатором 5
.
curl -k --user "admin:mypassword1!" -v -X DELETE "https://mysparkcluster.azurehdinsight.net/livy/batches/5"
Livy Spark и высокий уровень доступности
Livy обеспечивает высокий уровень доступности для заданий Spark, выполняемых в кластере. Вот несколько примеров.
- Если служба Livy выходит из строя после удаленной отправки задания в кластер Spark, задание продолжает выполняться в фоновом режиме. Когда Livy снова заработает, она восстановит статус задания и сообщит о нём обратно.
- Записные книжки Jupyter для HDInsight поддерживаются Livy в серверной части. Если записная книжка выполняет задание Spark и служба Livy перезапускается, записная книжка продолжает запускать ячейки кода.
Показать мне пример
В этом разделе мы рассмотрим примеры использования Livy Spark для отправки пакетного задания, отслеживания хода выполнения задания и удаления. Приложение, которое мы используем в этом примере, — это приложение, разработанное в статье "Создание автономного приложения Scala" и запуск в кластере HDInsight Spark. В следующих шагах предполагается:
- Вы уже скопировали jar-файл приложения в учетную запись хранения, связанную с кластером.
- Вы установили CuRL на компьютере, где вы пытаетесь выполнить эти действия.
Выполните следующие действия.
Чтобы упростить использование, задайте переменные среды. Этот пример основан на среде Windows, изменяя переменные по мере необходимости для вашей среды. Замените
CLUSTERNAME
иPASSWORD
соответствующими значениями.set clustername=CLUSTERNAME set password=PASSWORD
Убедитесь, что Livy Spark работает в кластере. Это можно сделать, получив список запущенных пакетов. Если вы выполняете задание с помощью Livy в первый раз, выходные данные должны возвращать ноль.
curl -k --user "admin:%password%" -v -X GET "https://%clustername%.azurehdinsight.net/livy/batches"
Вы должны получить выходные данные, аналогичные следующему фрагменту кода:
< HTTP/1.1 200 OK < Content-Type: application/json; charset=UTF-8 < Server: Microsoft-IIS/8.5 < X-Powered-By: ARR/2.5 < X-Powered-By: ASP.NET < Date: Fri, 20 Nov 2015 23:47:53 GMT < Content-Length: 34 < {"from":0,"total":0,"sessions":[]}* Connection #0 to host mysparkcluster.azurehdinsight.net left intact
Обратите внимание, как последняя строка в выходных данных говорит всего:0, что предполагает отсутствие запущенных пакетов.
Давайте теперь отправим пакетное задание. В следующем фрагменте кода используется входной файл (input.txt) для передачи имени jar-файла и имени класса в качестве параметров. Если вы выполняете эти действия с компьютера Windows, рекомендуется использовать входной файл.
curl -k --user "admin:%password%" -v -H "Content-Type: application/json" -X POST --data @C:\Temp\input.txt "https://%clustername%.azurehdinsight.net/livy/batches" -H "X-Requested-By: admin"
Параметры в файлеinput.txt определяются следующим образом:
{ "file":"wasbs:///example/jars/SparkSimpleApp.jar", "className":"com.microsoft.spark.example.WasbIOTest" }
Вы должны увидеть выходные данные, аналогичные следующему фрагменту кода:
< HTTP/1.1 201 Created < Content-Type: application/json; charset=UTF-8 < Location: /0 < Server: Microsoft-IIS/8.5 < X-Powered-By: ARR/2.5 < X-Powered-By: ASP.NET < Date: Fri, 20 Nov 2015 23:51:30 GMT < Content-Length: 36 < {"id":0,"state":"starting","log":[]}* Connection #0 to host mysparkcluster.azurehdinsight.net left intact
Обратите внимание, как последняя строка выходных данных говорит state:starting. Он также говорит: id:0. Здесь 0 — это идентификатор пакета.
Теперь можно получить состояние конкретного пакета с помощью идентификатора пакета.
curl -k --user "admin:%password%" -v -X GET "https://%clustername%.azurehdinsight.net/livy/batches/0"
Вы должны увидеть выходные данные, аналогичные следующему фрагменту кода:
< HTTP/1.1 200 OK < Content-Type: application/json; charset=UTF-8 < Server: Microsoft-IIS/8.5 < X-Powered-By: ARR/2.5 < X-Powered-By: ASP.NET < Date: Fri, 20 Nov 2015 23:54:42 GMT < Content-Length: 509 < {"id":0,"state":"success","log":["\t diagnostics: N/A","\t ApplicationMaster host: 10.0.0.4","\t ApplicationMaster RPC port: 0","\t queue: default","\t start time: 1448063505350","\t final status: SUCCEEDED","\t tracking URL: http://myspar.lpel.jx.internal.cloudapp.net:8088/proxy/application_1447984474852_0002/","\t user: root","15/11/20 23:52:47 INFO Utils: Shutdown hook called","15/11/20 23:52:47 INFO Utils: Deleting directory /tmp/spark-b72cd2bf-280b-4c57-8ceb-9e3e69ac7d0c"]}* Connection #0 to host mysparkcluster.azurehdinsight.net left intact
Выходные данные теперь показывают состояние:успешность выполнения задания.
Если вы хотите, теперь можно удалить пакет.
curl -k --user "admin:%password%" -v -X DELETE "https://%clustername%.azurehdinsight.net/livy/batches/0"
Вы должны увидеть выходные данные, аналогичные следующему фрагменту кода:
< HTTP/1.1 200 OK < Content-Type: application/json; charset=UTF-8 < Server: Microsoft-IIS/8.5 < X-Powered-By: ARR/2.5 < X-Powered-By: ASP.NET < Date: Sat, 21 Nov 2015 18:51:54 GMT < Content-Length: 17 < {"msg":"deleted"}* Connection #0 to host mysparkcluster.azurehdinsight.net left intact
Последняя строка выходных данных показывает, что пакет успешно удален. Удаление задания во время его выполнения также убивает задание. Если вы удалите задание, которое завершилось успешно или нет, это полностью удалит сведения о задании.
Обновления конфигурации Livy, начиная с версии HDInsight 3.5
Кластеры HDInsight 3.5 и более поздние версии по умолчанию отключают использование локальных путей к образцовым данным или jar-файлам. Мы рекомендуем использовать wasbs://
путь вместо доступа к JAR-файлам или примерам файлов данных из кластера.
Отправка заданий Livy для кластера в виртуальной сети Azure
При подключении к кластеру HDInsight Spark из виртуальной сети Azure можно напрямую подключиться к Livy в кластере. В таком случае будет следующий URL-адрес конечной точки Livy: http://<IP address of the headnode>:8998/batches
. Здесь 8998 — это порт, на котором выполняется Livy в головном узле кластера. Дополнительные сведения о доступе к службам в недоступных портах см. в статье "Порты, используемые службами Apache Hadoop в HDInsight".