spring—如何在hadoop中加载外部属性文件

aij0ehis  于 2021-06-03  发布在  Hadoop
关注(0)|答案(2)|浏览(328)

我有一个hadoop的工作,其中包括一些springbean。另外,在spring上下文文件中,还有一个名为app.properties的propertyplaceholderconfigurer。
这个app.properties在jar文件中,我们的想法是从jar文件中删除它,以便在不重新编译的情况下更改某些属性。
我试过了 -file 选项,即 -jarlibs 但两者都不起作用。
有什么想法吗?

bvjxkvbb

bvjxkvbb1#

我所做的是:
为PropertyPlaceHolderConfigure创建子类
重写loadproperties方法
如果有自定义system.getproperty(“hdfs\u path”)

try {
        Path pt = new Path(hdfsLocationPath);
        FileSystem fs = FileSystem.get(new Configuration());
        BufferedReader br = new BufferedReader(new InputStreamReader(fs.open(pt)));
        props.load(br);
    } catch (Exception e) {
        LOG.error(e);
    }

很有魅力。。。

5gfr0r5j

5gfr0r5j2#

可以将此属性文件添加到分布式缓存,如下所示:

...
String s3PropertiesFilePath = args[0];
DistributedCache.addCacheFile(new URI(s3PropertiesFilePath), conf);
...

稍后,在mapper/reducer的configure()中,可以执行以下操作:

...
Path s3PropertiesFilePath;
Properties prop = new Properties();
@Override
public void configure(JobConf job) {
    s3PropertiesFilePath = DistributedCache.getLocalCacheFiles(job)[0];
    //load the properties file
    prop.load(new FileInputStream(s3PropertiesFilePath.toString()));
...
}

ps:如果您没有在AmazonEMR上运行它,那么您可以将这个属性文件保存在hdfs中,并提供该路径。

相关问题