当 writer 在 HDFS 上仍然打开时获取文件的大小

Get size of file while writer is still open on HDFS

我正在尝试轮询临时文件的大小。正在从 Kafka 主题写入 HDFS 的 avro 文件,但是 org.apache.hadoop.fs.FileStatus 一直返回 0 字节 (.getLen()),而编写器仍在打开和写入。

我可以在写入器端保留一个长度计数器,但在深处,数据被转换为长度与原始记录不同的二进制格式 (avro)。它可以近似,但我正在寻找更精确的解决方案。

有没有办法从 hdfs (io.confluent.connect.hdfs.storage.HdfsStorage) 角度或文件编写器 (io.confluent.connect.storage.format.RecordWriter) 角度获取仍然打开的 hdfs 文件的大小?

最后我扩展了 AvroRecordWriterProvider 中使用的 RecordWriter 并在 FSDataOutputStream 周围包含了一个包装器以轮询 TopicPartitionWriter [=14] 中的当前大小=]

在法律清除后,我会将代码推到一个叉子上,并向所有感兴趣的人提供 link。