从纱簇上运行的samza作业加载属性文件时出现问题



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

/bin/run-job.sh--配置工厂=org.apache.samza.config.factories.PropertiesConfigFactory--配置路径=file:///home/anshu/samzaJob.properties

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

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

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

这在我的本地盒子上运行良好,但当它在纱线集群上运行时,它会解析为

/var/lib/hoop yarn/data/samza yarn/usercache/anshu/appcache/application_1462311090906_0973/container_e19_1462311909906_0973_01_000003/config/appconfig

这是不正确的。

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

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

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

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

ClassLoader loader=Thread.currentThread().getContextClassLoader();InputStream资源流=loader.getResourceAsStream(属性文件路径));文件配置configuration=新属性configuration();configuration.load(resourceStream);

最新更新