提交时java.io.FileNotFoundException
我导入的项目在代码中有两个文件oov和config.properties文件,这两个文件都是真实路径,但当我开始提交拓扑时,出现了以下异常: 提交拓扑时,终端中的这一个提交时java.io.FileNotFoundException,java,apache-storm,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
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/不会出现在您的部署中。应用程序使用的文件应全部包含在分发的应用程序中。部署中将不存在目录
/home/user/workspace/imported project/
。应用程序使用的文件应全部包含在应用程序中作为分布式文件。您尝试加载客户端本地属性文件。因此,为FileInputStream
指定绝对路径应该是可行的
对于oov.txt
的路径,您需要指定集群中工作计算机上的路径(不是客户端本地路径),即在config.properties
文件中指定path\u to\u oov\u FILE=/use/woker/node/path/oov.txt
。然后,conf.put(“路径到路径文件”),prop.getProperty(“路径到路径文件”)代码>应能正常工作
当然,您需要确保执行拓扑的集群中的工作节点上存在/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(,)
指定一个键,并为prop.getProperty()
指定一个键。在config.properties
中使用的键是PATH\u TO\u OOV\u FILE
,因此您需要将其用于prop.getProperty(“PATH\u TO\u OOV\u FILE”)
尝试加载客户端本地属性文件。因此,为FileInputStream
指定绝对路径应该是可行的
对于oov.txt
的路径,您需要指定集群中工作计算机上的路径(不是客户端本地路径),即在config.properties
文件中指定path\u to\u oov\u FILE=/use/woker/node/path/oov.txt
。然后,conf.put(“路径到路径文件”),prop.getProperty(“路径到路径文件”)代码>应能正常工作
当然,您需要确保执行拓扑的集群中的工作节点上存在/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(,)
指定一个键,并为prop.getProperty()
指定一个键。您在config.properties
中使用的键是PATH\u TO\u OOV\u FILE
,因此您需要将其用于prop.getProperty(“PATH\u TO\u OOV\u FILE”)
我不明白您的最后一个问题。。。你能重新措辞吗?如果您尝试读取一个文件,则执行代码的工作进程将尝试本地读取。我假设您正在集群中运行;因此,您需要确保该文件在集群中的所有节点上都可用(因为您不知道Storm将把代码调度到哪个节点)。是的,这是对的,我正在集群上运行,但如何检查我是否将从aal节点读取?我还有一个问题可能会有帮助,但我想确定。我将用其他信息编辑这篇文章,我的意思是最后一个问题,当我提交拓扑时,它在config.proprites中获得了数据,如阈值和如何接收mant tweets等,但同时它抛出了Exception,所以它如何在同一时间生成两个案例?你无法控制(以简单的方式)将在哪个节点上执行.operator。因此,您应该使用分布式文件系统(可能是HDFS)并从中读取。对于测试目的和小文件,将文件复制到所有节点也可以。不确定是否存在异常问题。你能分享你的代码吗?当然,我现在会用代码编辑这篇文章。我刚刚研究了一下——之前我这边有一些误解。见下面的答案。我不明白你的最后一个问题。。。你能重新措辞吗?如果您尝试读取一个文件,则执行代码的工作进程将尝试本地读取。我假设您正在集群中运行;因此,您需要确保该文件在集群中的所有节点上都可用(因为您不知道Storm将把代码调度到哪个节点)。是的,这是对的,我正在集群上运行,但如何检查我是否将从aal节点读取?我还有一个问题可能会有帮助,但我想确定。我将用其他信息编辑这篇文章,我的意思是最后一个问题,当我提交拓扑时,它在config.proprites中获得了数据,如阈值和如何接收mant tweets等,但同时它抛出了Exception,所以它如何在同一时间生成两个案例?你无法控制(以简单的方式)将在哪个节点上执行.operator。因此,您应该使用分布式文件系统(可能是HDFS)并从中读取。对于测试目的和小文件,将文件复制到所有节点也可以。不确定是否存在异常问题。你能分享你的代码吗?当然,我现在会用代码编辑这篇文章。我刚刚研究了一下——之前我这边有一些误解。看见