Flink 1.6存储在.in-progress中的接收器HDFS文件

时间:2018-10-19 19:30:22

标签: hadoop apache-kafka hdfs apache-flink flink-streaming

我正在将Kafka数据流写入HDFS路径中的存储分区。 Kafka给出字符串数据。使用FlinkKafkaConsumer010从Kafka消费

-rw-r--r--   3 ubuntu supergroup    4097694 2018-10-19 19:16 /streaming/2018-10-19--19/_part-0-1.in-progress
-rw-r--r--   3 ubuntu supergroup    3890083 2018-10-19 19:16 /streaming/2018-10-19--19/_part-1-1.in-progress
-rw-r--r--   3 ubuntu supergroup    3910767 2018-10-19 19:16 /streaming/2018-10-19--19/_part-2-1.in-progress
-rw-r--r--   3 ubuntu supergroup    4053052 2018-10-19 19:16 /streaming/2018-10-19--19/_part-3-1.in-progress

仅当我使用某些映射功能来动态操纵流数据时,才会发生这种情况。如果我直接将流写入HDFS,则可以正常工作。知道为什么会这样吗?我正在使用Flink 1.6.1,Hadoop 3.1.1和Oracle JDK1.8

3 个答案:

答案 0 :(得分:1)

这个问题有点晚了,但是我也遇到了类似的问题。 我有一个案例类地址

case class Address(val i: Int)

例如,我从集合中读取了带有地址编号的来源

    env.fromCollection(Seq(new Address(...), ...)) 

    ...
    val customAvroFileSink = StreamingFileSink
      .forBulkFormat(
        new Path("/tmp/data/"),
        ParquetAvroWriters.forReflectRecord(classOf[Address]))
      .build()
    ... 
    xxx.addSink(customAvroFileSink)

启用检查点后,我的实木复合地板文件也将以进行中的状态结束

我发现Flink在触发检查点之前完成了该过程,因此我的结果从未完全刷新到磁盘上。在将检查点间隔更改为较小的数字后,实木复合地板不再进行中。

答案 1 :(得分:0)

这种情况通常在禁用检查点时发生。

使用映射功能运行作业时,您可以检查检查点设置吗?看来您已为直接写入HDFS的作业启用了检查点。

答案 2 :(得分:0)

我遇到了类似的问题,启用检查点将状态后端从默认的 MemoryStateBackend 更改为 FsStateBackend 有效。就我而言,检查点失败是因为 MemoryStateBackendmaxStateSize 太小,以至于其中一个操作的状态无法放入内存中。

StateBackend stateBackend = new FsStateBackend("file:///home/ubuntu/flink_state_backend");
StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment()
    .enableCheckpointing(Duration.ofSeconds(60).toMillis())
    .setStateBackend(stateBackend);