flink使用BucketingSink将文件写入hdfs

最近在找一些写入到flink写入到hdfs的方法,然后在官网找到了这个(https://ci.apache.org/projects/flink/flink-docs-release-1.4/dev/connectors/filesystem_sink.html),然后就尝试着去使用这个,虽然能把数据写到hdfs上面去,但是是分片的,结果图如下:flink使用BucketingSink将文件写入hdfs_第1张图片

里面的内容是把我原来上传的文件给分片了。ps:我在想能不能在最后的输出将数据不要输出这么多的分片,而是一个总的文件。

默认情况下,当元素到达时,当前的系统时间将会降级,并使用日期时间模式“yyyy-MM-dd - HH”命名这些存储区。此模式将传递到具有当前系统时间的SimpleDateFormat以形成存储桶路径。每当遇到新的日期时,都会创建一个新的桶。例如,如果您有一个包含分钟的模式作为最细粒度,您将每分钟获得一个新的桶。每个桶本身就是一个包含几个零件文件的目录:每个并行实例的接收器将创建自己的零件文件,当零件文件变得太大时,槽也会在其他文件旁边创建一个新的零件文件。当桶变得不活动时,打开的零件文件将被刷新并关闭。一个桶在最近没有被写入时被视为非活动的。默认情况下,接收器每分钟检查非活动的桶,并关闭一分钟内尚未写入的任何桶。可以在BucketingSink上使用setInactiveBucketCheckInterval()和setInactiveBucketThreshold()配置此行为。

程序代码如下:

DataStream ds=env.readTextFile("your-data-path");
BucketingSink bk=new BucketingSink("your-hdfs-path");
//设置的是检查两次检查桶不活跃的情况的周期
bk.setInactiveBucketCheckInterval(1L)
//设置的是关闭不活跃桶的阈值,多久时间没有数据写入就关闭桶
bk.setInactiveBuckerThreshold(1L)
ds.addSink(bk);
env.execute();



你可能感兴趣的:(flink)