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

2024-01-31

我正在尝试使用Livy远程提交多个Spark jobs。假设我想执行以下操作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 https://github.com/scopt/scopt为了这


  • 我知道我可以提供上面的所有各种选项spark-submit命令使用Livy POST/batches request https://livy.incubator.apache.org/docs/latest/rest-api.html#post-batches.

  • 但因为我必须赚超过250spark-submit是远程的,我想利用Livy's 会话管理功能;即,我想要Livy创建一个SparkSession一次然后将其用于我所有的spark-submit要求。

  • The POST/sessions request https://livy.incubator.apache.org/docs/latest/rest-api.html#post-sessions允许我指定很多选项来实例化SparkSession远程。然而我看不到session争论 in POST/batches request https://livy.incubator.apache.org/docs/latest/rest-api.html#post-batches.

我怎样才能利用SparkSession我使用创建的POST/sessions请求提交我的Spark工作使用POST/batches要求?


我参考了以下示例,但它们仅演示了提供(python) code for Spark工作范围内Livy's POST request

  • pi_app https://github.com/apache/incubator-livy/blob/master/examples/src/main/python/pi_app.py
  • rssanders3/airflow-spark-operator-plugin https://github.com/rssanders3/airflow-spark-operator-plugin/blob/master/example_dags/livy_spark_operator_python_example.py
  • livy/examples https://livy.incubator.apache.org/examples/

我怎样才能利用SparkSession我使用创建的POST/sessions请求提交我的Spark工作使用POST/batches要求?

  • 在这个阶段,我几乎可以肯定这不可能现在
  • @卢克曼·加尼的评论 https://groups.google.com/a/cloudera.org/forum/#!msg/livy-user/TFLc7wIaQ8Y/EydZM-4HBAAJ给出了一个相当好的暗示batch-mode 适用于不同的用例session-mode / LivyClient

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

  • POST/batches请求接受JAR
  • This inhibits SparkSession (or spark-shell) from being re-used (without restarting the SparkSession) because
    • 你会如何删除JAR从以前的POST/batches要求?
    • 你会如何添加JAR从当前POST/batches要求?

这是更完整的图片

  • 实际上POST/sessions https://livy.incubator.apache.org/docs/latest/rest-api.html#post-sessions允许您通过JAR
  • 但随后与之进一步互动session(显然)不能采取JARs
  • 它们(进一步的交互)只能是简单的脚本(例如PySpark: 简单的python文件)可以加载到session(并不是JARs)

可能的解决方法

  • 所有那些拥有他们的Spark-应用程序写在Scala / Java,必须捆绑在JAR, 将会面临这个困难; Python (PySpark)用户在这里很幸运
  • As a possible workaround, you can try this (i see no reason why it wouldn't work)
    • 启动一个session和你的JAR via POST/sessions request
    • 然后调用入口点-class从你的JAR via python(提交POST /sessions/{sessionId}/statements)任意多次(与possibly不同的参数)。虽然这不会是直截了当,听起来很有可能

最后我找到了更多替代方案Livy for remote spark-submit; see this https://stackoverflow.com/a/54092691/3679900

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 POST/batches 请求中使用现有的 SparkSession 的相关文章

随机推荐