Apache Flink - 使用" BuckeingSink"类

时间:2017-08-07 02:46:00

标签: hadoop hadoop2 apache-flink flink-streaming

我正在使用BucketingSink类编写hdfs文件。即使数据正在写入hdfs文件,但文件位于hdfs上的“.pending”。

以下是我正在使用的代码。有人可以帮我识别问题并帮我解决这个问题吗?

BucketingSink<String> HdfsSink = new BucketingSink<String>("hdfs://xxxx/xxxx/xxxx/Test/");
HdfsSink.setBucketer(new DateTimeBucketer<String>("yyyy-MM-dd--HHmm"));
HdfsSink.setBatchSize(1024 * 1024 * 2); // this is 2 MB,
HdfsSink.setInactiveBucketCheckInterval(10000L);
HdfsSink.setInactiveBucketThreshold(10000L);

2 个答案:

答案 0 :(得分:0)

您好,您可以使用此功能。

嗨,未完成的桶有.pending扩展名。桶关闭后(例如,对于时间段,一旦时间结束),文件将被重命名。由于您使用的是NonRollingBucketer,因此永远不会关闭文件。我建议你使用DateTimeBucketer。

作为旁注:我建议你增加一点检查点间隔。 123毫秒是非常频繁的,并且应用程序看起来不是非常等待延迟。像2000毫秒这样的值可能更合适。

答案 1 :(得分:0)

我发现文件保留为.pending的实际原因是......因为我没有启用检查点。一旦我启用了检查点...文件正在成功关闭,而不是说.pending。

您可以通过设置env.enableCheckpointing(<duration>)

启用检查点

请查看网址@ https://ci.apache.org/projects/flink/flink-docs-release-1.3/api/java/org/apache/flink/streaming/connectors/fs/bucketing/BucketingSink.html了解详情。