在POST /批次请求中使用现有的SparkSession

时间:2018-08-08 12:04:35

标签: livy

我正在尝试使用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 POST/batches request提供上述Livy命令中的所有各种选项。

  • 但是由于我必须远程制作250多个spark-submit,因此我想利用Livy会话管理功能;也就是说,我希望Livy创建一次SparkSession,然后将其用于我的所有spark-submit请求。

  • POST/sessions request允许我指定很多选项来远程实例化SparkSession。但是,我在POST/batches request中看不到 session参数

如何使用通过SparkSession请求创建的POST/sessions来通过Spark请求提交我的POST/batches作业?


我已经参考了以下示例,但它们仅展示了在python的{​​{1}}中为Spark作业提供(Livy 代码请求

1 个答案:

答案 0 :(得分:1)

  

如何使用我使用创建的SparkSession   POST/sessions要求使用以下方式提交我的Spark工作   POST/batches个请求?

  • 在这个阶段,我几乎可以肯定这不可能
  • @Luqman Ghani's comment很好地暗示了batch模式旨在用于与session模式/ LivyClient模式不同的用例。

我确定无法做到这一点的原因如下(如果我错了/不完整,请纠正我)

  • POST/batches请求接受JAR
  • 这会阻止SparkSession(或spark-shell)被重新使用(无需重新启动SparkSession ),因为
    • 如何从先前的JAR请求中删除POST/batches
    • 您如何从当前JAR请求中添加POST/batches

这是更完整的图片

  • 实际上 POST/sessions允许您传递JAR
  • 但是与该session的进一步交互(显然)不能花费JAR s
  • 它们(进一步的交互)只能是简单的脚本(例如PySpark:简单的python文件),这些脚本可以加载到session(而不是JAR s)中

可能的解决方法

  • 所有使用Spark / Scala 编写其 Java-应用程序的人,这些应用程序必须捆绑在JAR中,将面临这个困难PythonPySpark)用户在这里很幸运
  • 作为一种可能的解决方法,您可以尝试执行此操作(我认为没有任何理由不起作用)
    • 通过session请求与您的JAR启动POST/sessions
    • 然后根据需要通过class(提交JAR)从您的python调用入口点-POST /sessions/{sessionId}/statements(使用< em>可能不同的参数)。虽然这不是直接,但这听起来很有可能

最后,我发现了{strong>远程Livy spark-submit替代品; see this