这个问题刚刚在5/9/18开始发生...
数据流无法找到与我的类打包在一起的文件。我使用Class.getResource("/data.json")。堆栈驱动程序日志显示它正在/var/opt/google/dataflow/class-name.jar!/data.json.中查找该文件当我通过ssh进入工作进程的VM实例时,文件实际上在/var/opt/google/dataflow/dataflow/class-name.jar.中这在昨天是有效的。
更多信息5/11/18:我刚刚直接使用Apache Beam文档中的WordCount示例进行了测试:https://beam.apache.org/get-started/quickstart-java/
遵循了所有的步骤。然后在"src/main“中添加"resources/data.json”。将以下行添加到WordCount.ExtractWordsFn的processElement方法中:
try {
String jsonStr = new Scanner(new File(WordCount.class.getResource("/data.json").getFile())).useDelimiter("\\Z").next();
System.out.println("====================================================");
System.out.println(jsonStr);
System.out.println("====================================================");
} catch (Exception e) {
e.printStackTrace();
}果然,在堆栈驱动程序中得到了相同的错误:
消息:“file:/var/opt/google/dataflow/classes-yGX0uczTTR8A8LXakSr0JA.jar!/data.json :java.io.FileNotFoundException(没有这样的文件或目录)”
当示例批处理仍在运行时,我ssh进入worker实例并检查/var/opt/google/dataflow。还有另一个"dataflow“目录,文件被复制到那里。因此确认了双数据流目录问题。
还有没有人遇到过这种情况?
将在Github中提交此问题。
发布于 2018-05-13 03:02:39
我解决了一个问题:使用Class.getResourceAsStream获取输入流。不管是什么原因,在getResource仍然失败的时候,getResourceAsStream仍然像预期的那样工作。就我的所有目的而言,输入流和URL一样好用。
https://stackoverflow.com/questions/50278952
复制相似问题