spark-submit:传递java属性文件给出FileNotFoundException

时间:2019-01-26 04:38:52

标签: java apache-spark

我有一个火花作业,我正在yarn cluster模式下运行。我需要传递我的应用程序特定的Java属性文件。 我正在执行此Java FileInputStream
但是我面对/home/aiman/config/my-file.properties

FileNotFoundException

我的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());
        ...
        ..

}

请提出问题所在。我是否以错误的方式读取属性文件,即找不到文件?

2 个答案:

答案 0 :(得分:0)

--deploy-mode client中运行此命令可以解决此问题。驱动程序将在存在属性文件的位置启动。因此,文件正在读取且没有任何异常。

答案 1 :(得分:0)

您应该通过“ --file /home/aiman/config/my-file.properties” spark-submit的参数传递本地文件,该参数会将文件分发到YARN启动的容器中,该容器将找到“ my -file.properties”在其JVM的类路径中。然后,您应该能够将其作为JVM的本地资源读取。