2

私はいくつかの春の豆を含むHadoopの仕事をしています。また、Springコンテキストファイルには、app.propertiesという名前のPropertyPlaceholderConfigurerがあります。

このapp.propertiesはjarファイル内にあります。再コンパイルせずに一部のプロパティを変更するには、jarファイルからこのapp.propertiesを削除することをお勧めします。

-fileオプション、オプションを試しました-jarlibsが、どちらも機能しませんでした。

何か案は?

4

2 に答える 2

3

私がしたことは:

  • PropertyPlaceholderConfigurerをサブクラス化する
  • loadPropertiesメソッドをオーバーライドします
  • カスタムSystem.getProperty( "hdfs_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);
        }
    

チャームのように機能します...

于 2012-12-19T21:27:11.990 に答える
1

このプロパティファイルは、次のように分散キャッシュに追加できます。

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

後で、マッパー/リデューサーの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: Amazon EMRで実行していない場合は、このプロパティファイルをhdfsに保持し、代わりにそのパスを指定できます。

于 2012-12-18T14:50:00.003 に答える