提交

时间:2015-12-15 02:45:33

标签: java apache-storm

我导入的项目在代码中有两个文件oov和config.properties文件,两者都是真正的路径,但是当我开始提交拓扑时,我得到了这个例外:

提交拓扑时终端中的这个

java.io.FileNotFoundException: config.properties (No such file or 
directory)

并在日志文件中

2015-12-15 04:21:50 STDIO [INFO] java.io.FileNotFoundException: oov.txt   
(No such file or directory)

代码

FileInputStream finputstream = new FileInputStream(
                "/home/user/workspace/imported-project/config.properties");

这是编码员为oov写的

conf.put("PATH_TO_OOV_FILE", prop.getProperty("PATH_TO_OOV_FILE"));

我把它改成了

conf.put("/home/user/workspace/imported-project/oov.txt", prop.getProperty("/home/user/workspace/imported-project/oov.txt"));

但它不起作用。

但是,当我提交config.propertied的拓扑内容时,我发现了!它如何读取它并在同一时间抛出异常?

这个项目有一个名为config.properties的文件包含那样的

PATH_TO_QUERY_FILE=tweets.txt
PATH_TO_OOV_FILE=oov.txt

PATH_TO_OUTPUT_FILE=results.txt 

,,,,,我应该用我拥有的真实路径替换这条路径还是让它们

2 个答案:

答案 0 :(得分:1)

您尝试加载客户端本地属性文件。因此,指定FileInputStream的绝对路径应该有效!

对于oov.txt的路径,您需要在群集中工作计算机(而非客户端本地路径)上指定路径,即指定PATH_TO_OOV_FILE=/use/woker/node/path/oov.txt in您的config.properties文件。然后,conf.put("PATH_TO_OOV_FILE", prop.getProperty("PATH_TO_OOV_FILE"));应该正常工作。

当然,您需要确保执行拓扑的群集中的工作节点上存在/use/woker/node/path/oov.txt

作为替代方案,您也可以将其指定为conf.put("PATH_TO_OOV_FILE", "/user/worker/node/path/oov.txt");第一个参数是,不应该更改 - 只有值。

此外,使用

conf.put("/home/user/workspace/imported-project/oov.txt", prop.getProperty("/home/user/workspace/imported-project/oov.txt"));

也没有意义。您需要指定conf.put(<key>,<value>)的密钥和prop.getProperty(<key>)的密钥。您在config.properties中使用的密钥是PATH_TO_OOV_FILE,因此您需要将其用于prop.getProperty("PATH_TO_OOV_FILE")

答案 1 :(得分:-1)

您的部署中不会出现目录/home/user/workspace/imported-project/。应用程序使用的文件应全部包含在分发的应用程序中。