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

生产环境部署Spark项目时如何读取db.properties等配置文件?

生产环境Spark读取配置文件的正确方式

问题根源

你碰到的FileNotFoundException,核心问题是调用SparkFiles.get()时传入了完整HDFS路径——通过--files参数分发到节点的配置文件,在本地临时目录里只保留文件名,不需要带路径。另外你同时使用sparkContext.addFile()和--files参数,两者功能重复,反而容易造成路径混淆。

修正方案

1. 调整spark-submit脚本

保留--files参数,确保HDFS路径格式正确(默认集群环境可简写为/user/db.properties,完整格式为hdfs://namenode_host:port/user/db.properties):

spark-submit \
  --class your.main.class \
  --files hdfs:///user/db.properties \
  your-application.jar

2. 修改Scala代码

删除多余的sparkContext.addFile(),直接用文件名调用SparkFiles.get()——--files会自动将文件分发到每个Executor节点的本地临时目录:

import org.apache.spark.SparkFiles
import java.util.Properties
import java.io.FileInputStream

// 仅传入文件名,无需完整HDFS路径
val propertiesFile = SparkFiles.get("db.properties")
val properties = new Properties()
properties.load(new FileInputStream(propertiesFile))

3. 本地与生产环境统一处理

  • 本地开发:将db.properties放在项目根目录,运行时通过--files db.properties传入,SparkFiles.get()可直接读取本地文件。
  • 生产环境:若配置文件在提交节点本地,可改用本地路径file:///path-home/user/spark/db.properties传入--files;若在HDFS,确保运行Spark的用户拥有该文件的读权限。

额外提醒

如果配置文件包含数据库密码等敏感信息,不要明文存储,建议使用Spark安全配置管理(如Hadoop Credential Provider)或集群密钥服务加密处理。

内容的提问来源于stack exchange,提问作者Harsh Agrawal

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 01:17:11