一、问题描述
flink在sink到本地目录的时候,报错:
09:12:19,166 INFO org.apache.flink.runtime.executiongraph.ExecutionGraph - Job DataSet Sink (5e5507e2029038a82605e0ffd0ff4a14) switched from state FAILING to FAILED.
java.io.IOException: File or directory data/output already exists. Existing files and directories are not overwritten in NO_OVERWRITE mode. Use OVERWRITE mode to overwrite existing files and directories.
at org.apache.flink.core.fs.FileSystem.initOutPathLocalFS(FileSystem.java:773)
at org.apache.flink.core.fs.SafetyNetWrapperFileSystem.initOutPathLocalFS(SafetyNetWrapperFileSystem.java:137)
at org.apache.flink.api.common.io.FileOutputFormat.open(FileOutputFormat.java:227)
at org.apache.flink.api.java.io.TextOutputFormat.open(TextOutputFormat.java:88)
at org.apache.flink.runtime.operators.DataSinkTask.invoke(DataSinkTask.java:202)
at org.apache.flink.runtime.taskmanager.Task.run(Task.java:704)
at java.lang.Thread.run(Thread.java:745)
二、问题原因
代码中的目录已经存在,而写操作writeAsText默认不覆盖之前的文件或者文件夹,所以导致报错。
val filepath="data//output"
text.writeAsText(filepath)
三、解决办法
1.方法一:删除目录
2.方法二:添加覆盖的参数
val filepath="data//output"
text.writeAsText(filepath,FileSystem.WriteMode.OVERWRITE)