我有一个火花作业,我正在yarn
cluster
模式下运行。我需要传递我的应用程序特定的Java属性文件。
我正在执行此Java FileInputStream
。
但是我面对/home/aiman/config/my-file.properties
我的java属性文件是:/home/aiman/config/my-file.properties
mongo_server=my.mongo.server
mongo_port=1530
mongo_user=mongoadmin
mongo_password=readONLYpass
mongo_db=testdb
我的spark-submit
如下:
spark-submit --master yarn --deploy-mode cluster --class mongo.MongoRead --jars /home/aiman/ojdbc-7.jar /home/aiman/app/jars/MongoRead-0.1-jar-with-dependencies.jar /home/aiman/config/my-file.properties
代码段:
public static void main(final String[] args) throws Exception
{
if(args.length<1){
System.out.println("Please provide properties file path");
System.exit(1);
}
System.out.println("Mongo Import Begins...");
Properties prop = new Properties();
InputStream in = null;
try{
in = new FileInputStream(args[0]);
prop.load(in);
}
catch(Exception e){
e.printStackTrace();
System.exit(1);
}
/*Reading the properties*/
String mongoServer = prop.getProperty("mongo_server");
String mongoPort = prop.getProperty("mongo_port");
String mongoUser = prop.getProperty("mongo_user");
....
...
String mongoAddress = "mongodb://"+mongoUser+":"+mongoPassword+"@"+mongoServer+":"+mongoPort+"/"+mongoDb+"."+tableNm;
SparkSession spark = SparkSession.builder()
.appName("MongoSparkRecordReader")
.config("spark.mongodb.input.uri", mongoAddress)
.config("spark.mongodb.output.uri", mongoAddress)
.getOrCreate();
JavaSparkContext jsc = new JavaSparkContext(spark.sparkContext());
...
..
}
请提出问题所在。我是否以错误的方式读取属性文件,即找不到文件?
答案 0 :(得分:0)
在--deploy-mode client
中运行此命令可以解决此问题。驱动程序将在存在属性文件的位置启动。因此,文件正在读取且没有任何异常。
答案 1 :(得分:0)
您应该通过“ --file /home/aiman/config/my-file.properties” spark-submit的参数传递本地文件,该参数会将文件分发到YARN启动的容器中,该容器将找到“ my -file.properties”在其JVM的类路径中。然后,您应该能够将其作为JVM的本地资源读取。