Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/342.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 无法读取风暴喷口中的输入文件_Java_Apache Storm - Fatal编程技术网

Java 无法读取风暴喷口中的输入文件

Java 无法读取风暴喷口中的输入文件,java,apache-storm,Java,Apache Storm,我有一个可以从日志文件中读取的风暴喷口。因此,当我在本地测试代码时,它工作得很好,因为我在运行作业时传递运行时参数 但是当我在集群中部署代码时,它会给出一个FileNotFoundException 所以我的问题是如何在集群系统中将输入传递到喷口 我使用ResourceLocation将一些查找表传递给Bolt,但如果以相同的方式传递给Spout,则会产生相同的错误 我还尝试将参数传递给conf.put(“logfile”,args[0])和喷口应该在其open()方法中读取conf对象。这也是

我有一个可以从日志文件中读取的风暴喷口。因此,当我在本地测试代码时,它工作得很好,因为我在运行作业时传递运行时参数

但是当我在集群中部署代码时,它会给出一个
FileNotFoundException

所以我的问题是如何在集群系统中将输入传递到喷口

我使用ResourceLocation将一些查找表传递给Bolt,但如果以相同的方式传递给Spout,则会产生相同的错误

我还尝试将参数传递给
conf.put(“logfile”,args[0])和喷口应该在其
open()
方法中读取conf对象。这也是行不通的

public void open(Map conf, TopologyContext context, SpoutOutputCollector collector) {
        collector_out = collector;

        try {
            this.context = context;
            this.filereader = new FileReader(conf.get("logfile").toString());
        } catch (FileNotFoundException e) {
            throw new RuntimeException("Error reading file ["+conf.get("logfile")+"]");
        }

}

public void nextTuple() {
    try {
        br = new BufferedReader(filereader);
        line = br.readLine();           
        while(line != null){
            count++;
            collector_out.emit(new Values(line));
            Thread.sleep(2);
            line = br.readLine();
        }
    } catch (IOException e) {
        e.printStackTrace();
    } catch (InterruptedException e) {
        e.printStackTrace();
    } 
    finally{
        completed = true;
    }
}

因此,如果你知道如何让它运行,那将是一个很大的帮助。

在集群模式下,当你用open方法读取一个文件时,每个节点都会转到它的本地路径,并且可能不是所有节点都有该文件


解决此问题的好方法是在集群中装载nfs系统,在集群节点之间共享一个目录,并将文件放入该目录中。我有一个像你这样的喷口,用这种方式工作

你能给你的喷口加些代码吗?风暴群无法识别常规路径。最好使用NFS或其他替代方法。您需要将文件保存在所有节点都可以访问的位置。。正如前面的评论中所建议的,您可以使用NFS或等效的。。。要验证是否在一个节点中运行storm并将文件保留在那里,您应该可以获得预期的输出