关于Flink流接收器到HDFS

时间:2019-01-07 10:48:00

标签: hdfs apache-flink flink-streaming

我正在编写一个flink代码,在该代码中,我正在从本地系统读取文件,然后使用“ writeUsingOutputFormat”将其写入数据库。

现在,我的要求是写入hdfs而不是数据库。

您能帮我在flink中做些什么。

注意:hdfs已启动并在我的本地计算机上运行。

2 个答案:

答案 0 :(得分:0)

Flink提供了HDFS connector,可用于将数据写入Hadoop Filesystem支持的任何文件系统。

提供的接收器是存储桶接收器,它将数据流划分为包含滚动文件的文件夹。可以使用batch sizebatch roll over time interval

之类的参数来配置存储区行为和写入

Flink文档给出了以下示例-

DataStream<Tuple2<IntWritable,Text>> input = ...;

BucketingSink<String> sink = new BucketingSink<String>("/base/path");
sink.setBucketer(new DateTimeBucketer<String>("yyyy-MM-dd--HHmm", ZoneId.of("America/Los_Angeles")));
sink.setWriter(new SequenceFileWriter<IntWritable, Text>());
sink.setBatchSize(1024 * 1024 * 400); // this is 400 MB,
sink.setBatchRolloverInterval(20 * 60 * 1000); // this is 20 mins

input.addSink(sink);

答案 1 :(得分:0)

在这一点上,较新的Streaming File Sink可能比“水槽”更好。此说明来自Flink 1.6发行说明(请注意,在Flink 1.7中添加了对S3的支持):

  

新的StreamingFileSink是一次写入的完全接收器   利用从   前一个BucketingSink。通过集成完全支持一次   带有Flink的检查点机制的接收器。新水槽是   以Flink自己的FileSystem抽象为基础,并且支持本地   文件系统和HDFS,并计划在不久的将来支持S3(现在包含在Flink 1.7中)。它   公开可插拔文件滚动和存储策略。除了   行编码格式,新的StreamingFileSink随附   对实木复合地板的支持。其他批量编码格式(例如ORC)可以是   可以使用公开的API轻松添加。