我导入的项目在代码中有两个文件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
,,,,,我应该用我拥有的真实路径替换这条路径还是让它们
答案 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/
。应用程序使用的文件应全部包含在分发的应用程序中。