Flink学习 - 5. Flink之DataSource

DataSource

简单来说,DataSource是指数据来源,也是其字面意思,Flink无论是实时流计算还是批计算都基于数据进行,其数据源是非常重要的一部分,Flink在命名这一方面非常的直白,可以直接从字面意思来理解基本功能。

通常来说source的定义需要使用

StreamExecutionEnvironment.addSource(sourceFunction)

通过上述方法在程序中添加或者定义数据源。

Flink自带的DataSource

Flink官方定义了非常多的DataSource。如果需要可以直接使用对应的DataSource。


socket

  1. socketTextStream

监听一个端口,生成DataSource,并行度为1的DataSource

DataStreamSource<String> nums = env.socketTextStream("localhost", 12800);

给定元素

  1. fromElements()

一般用于单元测试程序或者调试代码使用,给定一些元素生成一个source。并行度是1的DataSource

StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();

DataStreamSource<Tuple2<Integer, Integer>> dataStream = env.fromElements(new Tuple2<Integer, Integer>(1, 5), new Tuple2<Integer, Integer>(2, 2), new Tuple2<Integer, Integer>(2, 4), new Tuple2<Integer, Integer>(1, 3));

基于集合

  1. fromCollection

从集合中生成source,集合中的元素必须是相同类型。这是并行度是1的DataSource。

DataStreamSource<Integer> nums = env.fromCollection(Arrays.asList(1, 2, 3, 4, 5, 6, 7));
  1. fromParallelCollection

从迭代器中生成source,Flink指定的迭代器主要是两种,这是一个并行度为默认并行度的DataSource。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-30LqxtPH-1577094589673)(http://note.youdao.com/yws/res/21447/04EA91658CFD472AB853F5094CED6FFB)]

DataStreamSource<Long> nums = env.fromParallelCollection(new NumberSequenceIterator(1, 20), TypeInformation.of(Long.TYPE));

DataStreamSource<Long> nums = env.fromParallelCollection(new NumberSequenceIterator(2, 20), Long.class);
  1. generateSequence
    从一个区间范围内的的数字生成DataSource,这是一个并行度为默认并行度的DataSource。
DataStreamSource<Long> nums = env.generateSequence(1, 100);

文件生成

  1. readTextFile

从文件中读取,指定是text文件格式的文件

DataStreamSource<String> stringDataStreamSource = env.readTextFile("file:///path/to/file");
  1. readFile

执行输入文件格式,可以定义fileInputFormat

DataStreamSource<String> stringDataStreamSource = env.readFile(new CsvInputFormat<String>(new Path("file:///path/to/file")) {
            @Override
            protected String fillRecord(String reuse, Object[] parsedValues) {
                return null;
            }
        }, "file:///path/to/file");

自定义DataSource

Flink给出了很多DataSource,但是从使用场景来看主要是用于测试比较多,所以大多的DataSource都是需要自定义的,而自定义的主要使用addSource来生成对应的DataSource。

如使用kafkasource:

StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();

Properties prop = new Properties();
prop.setProperty("bootstrap.servers","localhost:9092");


String topic = parameter.get("topic","test");

FlinkKafkaConsumer<String> kafkaConsumer = new FlinkKafkaConsumer<>(topic, new SimpleStringSchema(), prop);

kafkaConsumer.setStartFromEarliest();

DataStreamSource<String> source = env.addSource(kafkaConsumer);

Flink 已经给出了很多source,目前支持的:

如果完全自定义DataSource,需要了解sourceFunction,通常使用RichSourceFuction

RichSourceFunction

图片来源:justdojava.com/2019/10/24/flink_learn_datasource/

一张图讲清楚了具体的使用及各个方法的作用。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值