flink使用BucketingSink将文件写入hdfs

来源:互联网 发布:淘宝网店实践总结报告 编辑:程序博客网 时间:2024/06/07 03:59

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

里面的内容是把我原来上传的文件给分片了。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();



原创粉丝点击