Использовать существующий SparkSession в POST/ пакетном запросе

Я пытаюсь использовать Livy удаленно отправить несколько Spark рабочие места. Допустим, я хочу выполнить следующее spark-submit задание удаленно (со всеми опциями как таковыми)

spark-submit \
--class com.company.drivers.JumboBatchPipelineDriver \
--conf spark.driver.cores=1 \
--conf spark.driver.memory=1g \
--conf spark.dynamicAllocation.enabled=true \
--conf spark.serializer='org.apache.spark.serializer.KryoSerializer' \
--conf "spark.executor.extraJavaOptions= -XX:+UseG1GC" \
--master yarn \
--deploy-mode cluster \
/home/hadoop/y2k-shubham/jars/jumbo-batch.jar \
\
--start=2012-12-21 \
--end=2012-12-21 \
--pipeline=db-importer \
--run-spiders

ПРИМЕЧАНИЕ. Параметры после JAR ( --start , --end и т. д.) являются специфичными для моего Spark приложение. я использую scopt за это


  • Я знаю, что могу предоставить все различные варианты выше spark-submit использование команды LivyPOST/batches запрос.

  • Но так как я должен сделать более 250 spark-submit удаленно, я хотел бы использовать Livy возможности управления сессиями; т.е. я хочу Livy создать SparkSession один раз, а затем использовать его для всех моих spark-submit Запросы.

  • POST/sessions Запрос позволяет мне указать довольно много вариантов создания SparkSession удаленно. Тем не менее, я не вижу session аргумент в POST/batches запрос.

Как я могу использовать SparkSession что я создал с помощью POST/sessions запрос на отправку моего Spark использование работы POST/batches запрос?


Я ссылался на следующие примеры, но они только демонстрируют python) код для Spark работа в Livy "s POST запрос

  • pi_app
  • rssanders3/airflow-spark-operator-plugin
  • livy/examples

0 ответов

Как я могу использовать SparkSession что я создал с помощью POST/sessions запрос на отправку моего Spark использование работы POST/batches запрос?

  • На данном этапе я почти уверен, что это сейчас невозможно
  • Комментарий @Luqman Ghani дает довольно хороший намек на то, что batch-режим предназначен для другого варианта использования, чем session-Режим / LivyClient

Причина, по которой я определил, почему это невозможно, (пожалуйста, исправьте меня, если я ошибаюсь / не укомплектована) следующим образом

  • POST/batches запрос принимает JAR
  • Это тормозит SparkSession (или же spark-shell) от повторного использования (без перезапускаSparkSession) так как
    • Как бы вы удалили JAR от предыдущего POST/batches запрос?
    • Как бы вы добавили JAR от текущего POST/batches запрос?

А вот более полная картина

  • На самом деле POST/sessionsпозволяет вам пройтиJAR
  • но затем дальнейшие взаимодействия с этимsession(очевидно) не может взятьJARs
  • они (дальнейшее взаимодействие) могут быть только простыми сценариями (например,PySpark: простоpythonфайлы), которые могут быть загружены в session(и не JAR s)

Возможное решение

  • Все те, у кого естьSpark-приложение написано вScala/Java, который должен быть в комплекте JAR, столкнется с этой трудностью; Python (PySpark) пользователям здесь везет
  • В качестве возможного обходного пути, вы можете попробовать это (я не вижу причин, почему это не сработает)
    • запустить session с вашим JAR с помощью POST/sessions запрос
    • затем вызвать точку входа-class от твоего JAR с помощью python (Отправить POST /sessions/{sessionId}/statements) столько раз, сколько вы хотите (возможно, с другими параметрами). Хотя это не так просто, звучит очень возможно

Наконец я нашел еще несколько альтернатив Livy для удаленногоspark-submit; видеть это

Другие вопросы по тегам