我正在编写一个flink代码,在该代码中,我正在从本地系统读取文件,然后使用“ writeUsingOutputFormat”将其写入数据库。
现在,我的要求是写入hdfs而不是数据库。
您能帮我在flink中做些什么。
注意:hdfs已启动并在我的本地计算机上运行。
答案 0 :(得分:0)
Flink提供了HDFS connector,可用于将数据写入Hadoop Filesystem支持的任何文件系统。
提供的接收器是存储桶接收器,它将数据流划分为包含滚动文件的文件夹。可以使用batch size
和batch 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轻松添加。