java.io.FileNotFoundException 正在提交

java.io.FileNotFoundException while submitting

我导入的项目有两个文件 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 

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

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

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

对于oov.txt的路径你需要在集群worker机器上指定路径(不是客户端本地路径),即指定PATH_TO_OOV_FILE=/use/woker/node/path/oov.txt 在你的 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"); 第一个参数是 key,不应更改 -- 仅更改值。

此外,使用

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")