我正在使用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);
答案 0 :(得分:0)
您好,您可以使用此功能。
嗨,未完成的桶有.pending扩展名。桶关闭后(例如,对于时间段,一旦时间结束),文件将被重命名。由于您使用的是NonRollingBucketer,因此永远不会关闭文件。我建议你使用DateTimeBucketer。
作为旁注:我建议你增加一点检查点间隔。 123毫秒是非常频繁的,并且应用程序看起来不是非常等待延迟。像2000毫秒这样的值可能更合适。
答案 1 :(得分:0)
我发现文件保留为.pending的实际原因是......因为我没有启用检查点。一旦我启用了检查点...文件正在成功关闭,而不是说.pending。
您可以通过设置env.enableCheckpointing(<duration>)