flink中将数据保存到hdfs中

flink中将数据保存到hdfs中

说明:在flink的官网已经经flink的各种方法用例已经写的很明确了,我们如果要用直接点进去复制就行了,而且官网的代码永远保持年轻不会过期.
限制:但是官网一般都是英文的,要想通透阅读理解阅读可能需要6级以上的英文水平,我们一般人的阅读能力还达不到阅读英文网页的水准,直接翻译过来又有很多单词翻译错,导致我们的找不到对应的代码,这可怎么办呢?
办法:我们需要看关键字的时候翻译成英文的,需要看注释的时候翻译成汉语的,虽然比较麻烦但是时间久了,及时他翻译错,你也知道他对的意思了.
下面就是我想将flink中的数据导入到hdfs中,自己在官网找到代码的方法和路径共勉
1.百度搜索flink官网:https://flink.apache.org/
2.在左侧目录按照顺序找到:getting started(入门)=>Application development(应用开发)=>streaming(DataStream API)(流的字典)
=>Connectors(接收器)=>Streaming File Sink(流的保存路径)=>part file conffiguration(配置文件)
3.将这个网页的内容我们就可以翻译过来看大概意思了
我们需要找的代码就是这几条:

import org.apache.flink.api.common.serialization.SimpleStringEncoder;
import org.apache.flink.core.fs.Path;
import org.apache.flink.streaming.api.functions.sink.filesystem.StreamingFileSink;
import org.apache.flink.streaming.api.functions.sink.filesystem.rollingpolicies.DefaultRollingPolicy;

DataStream<String> input = ...;

final StreamingFileSink<String> sink = StreamingFileSink
    .forRowFormat(new Path(outputPath), new SimpleStringEncoder<>("UTF-8"))
    .withRollingPolicy(
        DefaultRollingPolicy.builder()
            .withRolloverInterval(TimeUnit.MINUTES.toMillis(15))
            .withInactivityInterval(TimeUnit.MINUTES.toMillis(5))
            .withMaxPartSize(1024 * 1024 * 1024)
            .build())
	.build();

input.addSink(sink);

找到这个代码我们直接将代码复制到我我们的程序中写好路径就可以直接使用喽!
代码实现:

public class StreamFileSinkDemo {
    public static void main(String[] args)throws Exception {
        StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();

        DataStreamSource<String> lines = env.socketTextStream("localhost", 8888);
        SingleOutputStreamOperator<String> upper = lines.map(String::toUpperCase);

        //然后建将官网写好的代码复制到这个平台
        String patha = "D:\\test\\out";

        //必须要设置,检查点10秒钟
        env.enableCheckpointing(10000);

        final StreamingFileSink<String> sink = StreamingFileSink
                .forRowFormat(new Path(patha), new SimpleStringEncoder<String>("UTF-8"))
                .withRollingPolicy(
                        DefaultRollingPolicy.builder()
                                .withRolloverInterval(TimeUnit.MINUTES.toMillis(30))//多长时间运行一个文件  秒
                                .withInactivityInterval(TimeUnit.MINUTES.toMillis(10))//多长时间没有写入就生成一个文件
                                .withMaxPartSize(1024 * 1024 * 1024)
                                .build())
                .build();
        upper.addSink(sink);
        env.execute();
    }
}
你在8888端口依次输入:
我要保存在本地路:

他就会在你的D:\\test\\下生成一个out文件夹,里面就有我们刚才输入的信息!

授人予鱼,不如授人以渔,教会你方法以后万事不求人!

发布了54 篇原创文章 · 获赞 11 · 访问量 1928

猜你喜欢

转载自blog.csdn.net/weixin_45896475/article/details/104654490
今日推荐