我在纱线群集模式下使用spark-submit运行火花作业。要在运行时提交输入和输出文件路径,我尝试加载包含输入和输出路径的属性文件。
属性文件:input.properties
spark.myapp.input /input/path spark.myapp.output /output/path
我正在使用以下命令运行我的应用程序。
`spark-submit --class Property --master yarn-cluster prop.jar --properties-file input.properties`
Scala代码:
import org.apache.spark.SparkConf import org.apache.spark.SparkContext import java.io.FileInputStream import collection.JavaConversions._ import java.util.Properties; object Property { def main(args: Array[String]) { val conf = new SparkConf().setAppName("myApp"); val sparkContext = new SparkContext(conf); val input=sparkContext.getConf.get("spark.myapp.input") println(input) sparkContext.stop; } }
当我以本地和纱线客户端模式运行程序时,我能够访问这些属性。但是在火花提交模式下,我会超越异常。
ERROR yarn.ApplicationMaster: User class threw exception: java.util.NoSuchElementException: spark.myapp.input
答案 0 :(得分:2)
如果您使用纱线,请使用--files input.properties
。我有同样的问题,它解决了我的问题。
答案 1 :(得分:0)
我使用--files
和--driver-class-path
参数来读取在移除纱线群集上执行的驱动程序中的属性。
spark-submit \
--class com.acme.Main \
--master yarn \
--deploy-mode cluster \
--driver-memory 2g \
--executor-memory 1g \
--driver-class-path "./conf" \
--files "./conf/app.properties,./conf/log4j.properties" \
./lib/my-app-uber.jar \
"$@"
请注意,可以使用逗号分隔的字符串指定多个属性文件(不要忘记引号)
然后,您的驱动程序代码可以将这些属性文件作为类路径资源加载,就像它在本地运行一样。