我有一个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的
这是不正确的。
如何找到加载文件的正确路径?或者还有其他方法可以做到吗?
答案 0 :(得分:0)
嗯,看起来我尝试这样做的方式不正确。
它正在本地框上工作,因为给定的属性文件的路径是正确的,文件实际上驻留在那里。但是当试图在纱线群集上运行时,这种给出属性的绝对路径的方法不起作用,因为System.getProperty(“user.dir”)将总是给出samza容器的路径,如果属性文件不在那里位置,它会失败。
理想的方法是将文件放在类路径中加载的某个位置,以确保在您尝试加载类并使用
加载类时它们将始终存在。ClassLoader loader = Thread.currentThread()。getContextClassLoader(); InputStream resourceStream = loader.getResourceAsStream(propertiesFilePath)); FileConfiguration configuration = new PropertiesConfiguration(); configuration.load(resourceStream);