从纱线群集

时间:2016-06-14 09:34:16

标签: yarn apache-commons-config apache-samza

我有一个samza工作,我试图使用

在纱线群集上运行
  

./仓/ run-job.sh   --config-工厂= org.apache.samza.config.factories.PropertiesConfigFactory   --config路径=文件:///home/anshu/samzaJob.properties

使用此配置可​​以触发并运行该作业。

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

  

CONFIGURATION_FILE_PATH = System.getProperty(" user.dir")+   " /配置/的AppConfig&#34 ;;

这在我的本地方框上运行正常,但是当它在纱线群集上运行时,这将解析为

  

的/ var / lib中/ Hadoop的纱线/数据/ samza纱/ usercache /安舒/应用程序缓存/ application_1462311090906_0973 / container_e19_1462311090906_0973_01_000003 /配置/ AppConfig的

这是不正确的。

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

1 个答案:

答案 0 :(得分:0)

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

它正在本地框上工作,因为给定的属性文件的路径是正确的,文件实际上驻留在那里。但是当试图在纱线群集上运行时,这种给出属性的绝对路径的方法不起作用,因为System.getProperty(“user.dir”)将总是给出samza容器的路径,如果属性文件不在那里位置,它会失败。

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

加载类时它们将始终存在。
  

ClassLoader loader = Thread.currentThread()。getContextClassLoader();   InputStream resourceStream =   loader.getResourceAsStream(propertiesFilePath)); FileConfiguration   configuration = new PropertiesConfiguration();   configuration.load(resourceStream);