Google cloud storage 精简文件链接+;地面军事系统

Google cloud storage 精简文件链接+;地面军事系统,google-cloud-storage,apache-flink,Google Cloud Storage,Apache Flink,我目前正在使用Flink 1.7+gcs连接器库。我试图让StreamingFileLink写入GCS存储桶,但遇到以下异常: 我遇到了这个Jira:-但我不清楚代码是否合并过 为了让这项工作顺利进行,我们非常感谢您在需要做什么方面提供的任何帮助 java.lang.UnsupportedOperationException: Recoverable writers on Hadoop are only supported for HDFS and for Hadoop version 2.7

我目前正在使用Flink 1.7+gcs连接器库。我试图让StreamingFileLink写入GCS存储桶,但遇到以下异常:

我遇到了这个Jira:-但我不清楚代码是否合并过

为了让这项工作顺利进行,我们非常感谢您在需要做什么方面提供的任何帮助

java.lang.UnsupportedOperationException: Recoverable writers on Hadoop are only supported for HDFS and for Hadoop version 2.7 or newer
    at org.apache.flink.runtime.fs.hdfs.HadoopRecoverableWriter.<init>(HadoopRecoverableWriter.java:57) ~[flink-hadoop-fs-1.7.0.jar:1.7.0]
    at org.apache.flink.runtime.fs.hdfs.HadoopFileSystem.createRecoverableWriter(HadoopFileSystem.java:202) ~[flink-hadoop-fs-1.7.0.jar:1.7.0]
    at org.apache.flink.core.fs.SafetyNetWrapperFileSystem.createRecoverableWriter(SafetyNetWrapperFileSystem.java:69) ~[flink-core-1.7.0.jar:1.7.0]
    at org.apache.flink.streaming.api.functions.sink.filesystem.Buckets.<init>(Buckets.java:112) ~[flink-streaming-java_2.11-1.7.0.jar:1.7.0]
    at org.apache.flink.streaming.api.functions.sink.filesystem.StreamingFileSink$BulkFormatBuilder.createBuckets(StreamingFileSink.java:317) ~[flink-streaming-java_2.11-1.7.0.jar:1.7.0]
    at org.apache.flink.streaming.api.functions.sink.filesystem.StreamingFileSink.initializeState(StreamingFileSink.java:327) ~[flink-streaming-java_2.11-1.7.0.jar:1.7.0]
    at org.apache.flink.streaming.util.functions.StreamingFunctionUtils.tryRestoreFunction(StreamingFunctionUtils.java:178) ~[flink-streaming-java_2.11-1.7.0.jar:1.7.0]
    at org.apache.flink.streaming.util.functions.StreamingFunctionUtils.restoreFunctionState(StreamingFunctionUtils.java:160) ~[flink-streaming-java_2.11-1.7.0.jar:1.7.0]
    at org.apache.flink.streaming.api.operators.AbstractUdfStreamOperator.initializeState(AbstractUdfStreamOperator.java:96) ~[flink-streaming-java_2.11-1.7.0.jar:1.7.0]
    at org.apache.flink.streaming.api.operators.AbstractStreamOperator.initializeState(AbstractStreamOperator.java:278) ~[flink-streaming-java_2.11-1.7.0.jar:1.7.0]
    at org.apache.flink.streaming.runtime.tasks.StreamTask.initializeState(StreamTask.java:738) ~[flink-streaming-java_2.11-1.7.0.jar:1.7.0]
    at org.apache.flink.streaming.runtime.tasks.StreamTask.invoke(StreamTask.java:289) ~[flink-streaming-java_2.11-1.7.0.jar:1.7.0]
    at org.apache.flink.runtime.taskmanager.Task.run(Task.java:704) ~[flink-runtime_2.11-1.7.0.jar:1.7.0]
    at java.lang.Thread.run(Thread.java:834) ~[?:?]


java.lang.UnsupportedOperationException:Hadoop上的可恢复写入程序仅支持HDFS和Hadoop 2.7或更高版本
在org.apache.flink.runtime.fs.hdfs.HadoopRecoverableWriter.(HadoopRecoverableWriter.java:57)~[flink-hadoop-fs-1.7.0.jar:1.7.0]
在org.apache.flink.runtime.fs.hdfs.HadoopFileSystem.createRecoverableWriter(HadoopFileSystem.java:202)~[flink-hadoop-fs-1.7.0.jar:1.7.0]
在org.apache.flink.core.fs.SafetyNetWrapperSystem.createRecoverableWriter(SafetyNetWrapperSystem.java:69)~[flink-core-1.7.0.jar:1.7.0]
在org.apache.flink.streaming.api.functions.sink.filesystem.Buckets.(Buckets.java:112)~[flink-streaming-java_2.11-1.7.0.jar:1.7.0]
在org.apache.flink.streaming.api.functions.sink.filesystem.StreamingFileSink$BulkFormatBuilder.createbucket(StreamingFileSink.java:317)~[flink-streaming-java_2.11-1.7.0.jar:1.7.0]
在org.apache.flink.streaming.api.functions.sink.filesystem.StreamingFileSink.initializeState(StreamingFileSink.java:327)~[flink-streaming-java_2.11-1.7.0.jar:1.7.0]
在org.apache.flink.streaming.util.functions.StreamingFunctionUtils.tryRestoreFunction(StreamingFunctionUtils.java:178)~[flink-streaming-java_2.11-1.7.0.jar:1.7.0]
在org.apache.flink.streaming.util.functions.StreamingFunctionUtils.restoreFunctionState(StreamingFunctionUtils.java:160)~[flink-streaming-java_2.11-1.7.0.jar:1.7.0]
在org.apache.flink.streaming.api.operators.AbstractUdfStreamOperator.initializeState(AbstractUdfStreamOperator.java:96)~[flink-streaming-java_2.11-1.7.0.jar:1.7.0]
在org.apache.flink.streaming.api.operators.AbstractStreamOperator.initializeState(AbstractStreamOperator.java:278)~[flink-streaming-java_2.11-1.7.0.jar:1.7.0]
在org.apache.flink.streaming.runtime.tasks.StreamTask.initializeState(StreamTask.java:738)~[flink-streaming-java_2.11-1.7.0.jar:1.7.0]
在org.apache.flink.streaming.runtime.tasks.StreamTask.invoke(StreamTask.java:289)~[flink-streaming-java_2.11-1.7.0.jar:1.7.0]
在org.apache.flink.runtime.taskmanager.Task.run(Task.java:704)~[flink-runtime_2.11-1.7.0.jar:1.7.0]
在java.lang.Thread.run(Thread.java:834)~[?:?]

据我所知,它没有合并

问题在于,为了让Flink接收器组件参与检查点保存和恢复,它需要能够重置接收器组件正在写入的任何内容的状态。对于写入文件的接收器,这意味着接收器可能必须截断文件并开始追加,以便将文件返回到上次检查点时文件所处的状态。GCS和Amazon的S3一样,是一个二进制对象存储,而不是一个真正的文件系统。虽然您可以使用二进制存储完成与文件系统相同的大部分工作,但您不能截断二进制对象,也不能附加到它。可以让它看起来像是截断和附加到二进制对象,但这是一个非常低效的API层。因此,在GCS(或S3)上尝试使用StreamingFileLink确实不是很有效

您最好先写入实际的文件系统,然后再添加最后一个步骤,将写入的文件传输到GCS。这意味着您可能必须编写另一个接收器,以便检查点体系结构涵盖该行为,但这是您的最佳选择。我想