gpt4 book ai didi

java - 无法读取 Storm Spout 中的输入文件

转载 作者:太空宇宙 更新时间:2023-11-04 06:33:11 27 4
gpt4 key购买 nike

我有一个 Storm Spout,它将从日志文件中读取。因此,当我在本地测试代码时,它运行良好,因为我在运行作业时传递运行时参数。

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

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

我正在使用资源位置将一些查找表传递给 Bolts,但是如果我以相同的方式传递给 Spout,它会给出相同的错误。

我还尝试将参数传递给驱动程序类中的 conf.put("logfile", args[0]);,并且 spout 应在其 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 系统,在集群节点之间共享一个目录,并将文件放入该目录中。我有一个像你一样的喷嘴,就是这样工作的。

关于java - 无法读取 Storm Spout 中的输入文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25812159/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com