我正在使用Typesafe Config https://github.com/typesafehub/config来使用配置文件参数化以纱线群集模式运行的Spark作业。 Typesafe Config的默认行为是在类路径中搜索名称与正则表达式匹配的资源,并使用ConfigFactory.load()
自动将它们加载到配置类中(出于我们的目的,假设它所查找的文件称为{{1} })。
我可以使用application.conf
将配置文件加载到驱动程序中,但使用--driver-class-path <directory containing configuration file>
并不会将资源放在所有执行程序的类路径上。执行程序报告他们找不到我尝试添加到其类路径的配置文件中存在的密钥的某个配置设置。
使用Spark将文件添加到所有执行程序JVM的类路径的正确方法是什么?
答案 0 :(得分:19)
看起来spark.executor.extraClassPath
属性的值相对于执行者的应用程序的工作目录。
因此,要正确使用此属性,应使用--files <configuration file>
首先指示Spark将文件复制到所有执行程序的工作目录,然后使用spark.executor.extraClassPath=./
添加执行程序&#39; s工作目录到其类路径。这种组合使执行程序能够从配置文件中读取值。
答案 1 :(得分:3)
我使用SparkContext addFile方法
val sc: SparkContext = {
val sparkConf = new SparkConf()
.set("spark.storage.memoryFraction", "0.3")
.set("spark.driver.maxResultSize", "10g")
.set("spark.default.parallelism", "1024")
.setAppName("myproject")
sparkConf.setMaster(getMaster)
val sc = new SparkContext(sparkConf)
sc.addFile("application.conf")
sc
}