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

Use existing SparkSession in POST/batches request

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


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


我参考了以下示例,但它们仅演示了为 Livy 中的 Spark 作业提供 (python) code POST请求

How can I make use of the SparkSession that I created using POST/sessions request for submitting my Spark job using POST/batches request?

  • 在这个阶段,我几乎可以肯定现在不可能
  • @Luqman Ghani's comment 给出了一个很好的提示,即 batch-mode 适用于与 session-mode / LivyClient
  • 不同的用例

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

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

还有更完整的图片

  • 实际上POST/sessions允许你传递一个JAR
  • 但是与 session 的进一步交互(显然)不能占用 JARs
  • 它们(进一步的交互)只能是可以加载到 session(而不是 JAR 中的简单脚本(如 PySpark:简单的 python 文件) s)

可能的解决方法

  • 所有Spark-应用程序写在Scala/Java的人,必须捆绑在JAR, 会遇到这个困难; Python (PySpark) 用户在这里很幸运
  • 作为一种可能的解决方法,您可以试试这个(我看不出它为什么不起作用)
    • 通过 POST/sessions 请求
    • 使用您的 JAR 启动 session
    • 然后通过python(提交POST /sessions/{sessionId}/statements)从您的JAR调用入口点-class你想要的(可能不同的参数)。虽然这不会直截了当,但听起来很有可能

最后,我找到了 Livy 的更多替代品,用于 远程 spark-submit