0

我有一个 samza 作业,我正在尝试使用它在纱线集群上运行

./bin/run-job.sh --config-factory=org.apache.samza.config.factories.PropertiesConfigFactory --config-path=file:///home/anshu/samzaJob.properties

使用此配置,作业触发并运行良好。

现在工作开始后,我有一些特定于应用程序的配置(以单独的属性文件的形式),我正在尝试使用 apache commons 配置库加载这些配置。为此,我创建了一个 appconfig 文件夹并尝试读取该文件夹中的所有文件

CONFIGURATION_FILE_PATH = System.getProperty("user.dir") + "/config/appconfig";

这在我的本地机器上工作正常,但是当它在纱线集群上运行时,这解决了

/var/lib/hadoop-yarn/data/samza-yarn/usercache/anshu/appcache/application_1462311090906_0973/container_e19_1462311090906_0973_01_000003/config/appconfig

这是不正确的。

我应该如何找到加载文件的正确路径?或者有没有其他方法可以做到这一点?

4

1 回答 1

0

好吧,看起来我尝试这样做的方式不正确。

它在本地盒子上工作,因为给定的属性文件的路径是正确的,并且文件实际上驻留在那里。但是当尝试在纱线集群上运行时,这种提供属性绝对路径的方法不起作用,因为 System.getProperty("user.dir") 将始终提供 samza 容器的路径,如果属性文件不在那个位置位置,它将失败。

理想的方法是将文件放在类路径中加载的某个位置,以确保当您尝试加载类并使用加载它们时它们始终存在

ClassLoader loader = Thread.currentThread().getContextClassLoader(); InputStream 资源流 = loader.getResourceAsStream(propertiesFilePath)); FileConfiguration 配置 = new PropertiesConfiguration(); 配置.load(resourceStream);

于 2016-06-16T07:34:25.897 回答