1

我正在尝试使用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这个


  • 我知道我可以使用request 提供spark-submit上述命令中的所有各种选项。Livy POST/batches

  • 但由于我必须spark-submit远程制作超过 250 秒,我想利用Livy会话管理功能;即,我想Livy创建SparkSession一次,然后将其用于我的所有spark-submit请求。

  • POST/sessions请求允许我指定很多用于SparkSession远程实例化的选项。但是,我在request中没有看到任何session论点POST/batches

如何利用SparkSession我使用请求创建的内容来使用POST/sessions请求提交我的Spark工作POST/batches


我参考了以下示例,但它们仅演示了在的请求中为作业提供 ( python)代码SparkLivyPOST

4

1 回答 1

1

如何利用SparkSession我使用请求创建的内容来使用 POST/sessions请求提交我的Spark工作 POST/batches

  • 在这个阶段,我几乎可以肯定现在这是不可能的
  • @Luqman Ghani的评论给出了一个很好的暗示,即batch-mode 用于不同的用例而不是session-mode /LivyClient

我确定这不可能的原因是(如果我错了/不完整,请纠正我)如下

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

这是一张更完整的图片

  • 实际上POST/sessions允许你通过一个JAR
  • 但随后与(显然)的进一步交互session不能采取JARs
  • 它们(进一步的交互)只能是可以加载到(而不是s)中的简单脚本(例如PySpark:简单文件)pythonsessionJAR

可能的解决方法

  • 所有那些将他们的Spark应用程序写在Scala/Java中,必须捆绑在 a 中的人JAR都会面临这个困难Python( PySpark) 用户在这里很幸运
  • 作为一种可能的解决方法,您可以试试这个(我看不出它为什么不起作用)
    • session使用您的JARviaPOST/sessions请求启动
    • 然后调用入口点-class从您的JARvia python(submit POST /sessions/{sessionId}/statements) 多次调用(可能使用不同的参数)。虽然这不是直截了当的,但听起来很有可能

最后我找到了一些远程Livy的替代方案;看到这个spark-submit

于 2019-01-23T21:48:09.797 回答