You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Apache Livy在Spark中创建缓存上下文?

Apache Livy 缓存Spark上下文操作方案

Livy的持久化交互式会话本身就对应一个常驻的Spark上下文,只要会话不被销毁,所有提交到该会话的作业都会复用同一个Spark上下文,不需要每次重新初始化,完美匹配减少资源开销、提升提交效率的需求。

1. 创建可复用的缓存会话

通过POST接口创建交互式会话,配置足够长的超时时间避免自动回收,示例请求:

curl -X POST -H "Content-Type: application/json" http://<livy-server-host>:<port>/sessions -d '{
  "kind": "pyspark",
  "name": "persistent-spark-ctx",
  "timeout": 86400,
  "conf": {
    "spark.executor.instances": 2,
    "spark.executor.memory": "4g",
    "spark.driver.memory": "2g"
  }
}'

请求返回的id字段就是该会话的唯一标识,后续提交作业都使用这个ID即可。

2. 复用已有会话提交作业

不需要每次调用/sessions接口新建会话,直接向已有会话的/statements接口提交作业代码即可,示例:

curl -X POST -H "Content-Type: application/json" http://<livy-server-host>:<port>/sessions/<会话ID>/statements -d '{
  "code": "df = spark.read.parquet(\"/path/to/data\")\ndf.show()"
}'

3. 验证上下文复用效果

可以通过连续提交两段代码验证上下文是否共享:

  1. 第一次提交代码:a = 100
  2. 第二次提交代码:print(a)
    如果第二次能正常输出100,说明两次作业复用了同一个Spark上下文,缓存生效。

注意事项

  • 按需配置会话超时时间:如果需要会话长期常驻,可以修改Livy服务端的livy.server.session.timeout配置,或者创建会话时指定更大的timeout参数,单位为秒
  • 避免资源泄漏:常驻会话会持续占用分配的Spark资源,业务下线或者长时间不需要使用时,调用DELETE /sessions/<会话ID>接口主动销毁会话释放资源
  • 状态校验:提交作业前可调用GET /sessions/<会话ID>接口查询会话状态,仅当状态为idle或running时可正常提交作业
  • 业务隔离:不同业务线、不同权限的作业不要共用同一个会话,避免变量污染、权限越界问题

内容的提问来源于stack exchange,提问作者Abhisek Ray

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 11:06:03