TOP

flink使用BucketingSink将文件写入hdfs
2018-12-07 08:22:21 】 浏览:1622
Tags:flink 使用 BucketingSink 文件 写入 hdfs

最近在找一些写入到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();




flink使用BucketingSink将文件写入hdfs https://www.cppentry.com/bencandy.php?fid=115&id=195582

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇eclipse 通过插件向hdfs上传文件.. 下一篇hadoop命令行下hdfs客户端常用命令