在 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
我知道我可以使用 Livy
POST/batches
request.
[=83 在上面的 spark-submit
命令中提供所有不同的选项=]
但由于我必须远程制作 250 多个 spark-submit
s,我想利用 Livy
的 会话管理功能;即,我希望 Livy
创建一个 SparkSession
一次,然后将其用于我所有的 spark-submit
请求。
POST/sessions
请求 允许我指定相当多的选项来远程实例化 SparkSession
。但是,我在 POST/batches
request.
中看不到 session
参数
如何使用我使用 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
的进一步交互(显然)不能占用 JAR
s
- 它们(进一步的交互)只能是可以加载到
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
;
我正在尝试使用 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
我知道我可以使用
[=83 在上面的Livy
POST/batches
request.spark-submit
命令中提供所有不同的选项=]但由于我必须远程制作 250 多个
spark-submit
s,我想利用Livy
的 会话管理功能;即,我希望Livy
创建一个SparkSession
一次,然后将其用于我所有的spark-submit
请求。POST/sessions
请求 允许我指定相当多的选项来远程实例化SparkSession
。但是,我在POST/batches
request. 中看不到
session
参数
如何使用我使用 POST/sessions
请求创建的 SparkSession
来提交我使用 POST/batches
请求的 Spark
工作?
我参考了以下示例,但它们仅演示了为 Livy
中的 Spark
作业提供 (python
) code POST
请求
How can I make use of the
SparkSession
that I created usingPOST/sessions
request for submitting mySpark
job usingPOST/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
的进一步交互(显然)不能占用JAR
s - 它们(进一步的交互)只能是可以加载到
session
(而不是JAR
中的简单脚本(如PySpark
:简单的python
文件) s)
可能的解决方法
- 所有
Spark
-应用程序写在Scala
/Java
的人,必须捆绑在JAR
, 会遇到这个困难;Python
(PySpark
) 用户在这里很幸运 - 作为一种可能的解决方法,您可以试试这个(我看不出它为什么不起作用)
- 通过
POST/sessions
请求 使用您的 - 然后通过
python
(提交POST /sessions/{sessionId}/statements
)从您的JAR
调用入口点-class
你想要的(可能不同的参数)。虽然这不会直截了当,但听起来很有可能
JAR
启动session
- 通过
最后,我找到了 Livy
的更多替代品,用于 远程 spark-submit
;