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