我正在尝试使用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
) 代码请求
答案 0 :(得分:1)
如何使用我使用创建的
SparkSession
POST/sessions
要求使用以下方式提交我的Spark
工作POST/batches
个请求?
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
中,将面临这个困难; Python
(PySpark
)用户在这里很幸运session
请求与您的JAR
启动POST/sessions
class
(提交JAR
)从您的python
调用入口点-POST /sessions/{sessionId}/statements
(使用< em>可能不同的参数)。虽然这不是直接,但这听起来很有可能最后,我发现了{strong>远程Livy
的spark-submit
替代品; see this