Blink学习(三):定义运行环境

1 StreamExecutionEnvironment

StreamExecutionEnvironment是对流处理引擎运行环境的抽象,可以通过调用它的接口来对运行环境进行配置
常用配置如下:

final StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();

env.enableCheckpointing(Long.valueOf(params.get("blink.job.checkpoint.time")));

env.getCheckpointConfig().enableExternalizedCheckpoints(
        CheckpointConfig.ExternalizedCheckpointCleanup.RETAIN_ON_CANCELLATION, rocksDbPath + "/meta");

env.getCheckpointConfig().setMinPauseBetweenCheckpoints(100);

env.setMaxParallelism(2048);

env.setStreamTimeCharacteristic(TimeCharacteristic.EventTime);

// make parameters available in the web interface
env.getConfig().setGlobalJobParameters(params);

Class<?> unmodColl = Class.forName("java.util.Collections$UnmodifiableCollection");
env.addDefaultKryoSerializer(unmodColl, UnmodifiableCollectionsSerializer.class);

env.getCheckpointConfig().setCheckpointingMode(CheckpointingMode.EXACTLY_ONCE);

上面代码绝大多数通过方法名就可知其含义,在此特别说明addDefaultKryoSerializer方法。addDefaultKryoSerializer是定义二进制序列化器,序列化器的作用猜测是在各个worker之间传递java对象时,对java对象进行序列化,方便网络传输。

2 RocksDBStateBackend

blink在进行状态维护时,需要定期保存各个worker的快照,当快照内容较大时,需要使用分布式一致的数据库,目前blink支持的是RocksDB。
RocksDBStateBackend是对RocksDB的抽象,可以通过相关接口配置数据库的属性。
配置完成后,调用StreamExecutionEnvironment的setStatusBackend方法讲RocksDB与运行环境绑定。

Configuration rocksDBConfiguration = new Configuration();
rocksDBConfiguration.setString("state.backend.rocksdb.ttl", rocksDbTtl);
rocksDBConfiguration.setString("state.backend.rocksdb.checkpointpath", rocksDbPath);
rocksDBConfiguration.setString("state.backend.rocksdb.checkpoint.levels", "1");
rocksDBConfiguration.setString("state.backend.rocksdb.inplaceupdate", "true");
RocksDBStateBackend rocksDBStateBackend = new RocksDBStateBackend(rocksDBConfiguration);
env.setStateBackend(rocksDBStateBackend);

3 InputFormatSourceFunction
SourceInstance sourceInstance = new InputFormatSourceFunction(format, typeInfo);
DataStream<OutputType> dateStream = env
                .addSource(sourceInstance)
                .name("source_instance")
                .setParallelism(10);

InputFormatSourceFunction是blink并行输入源的抽象,通过继该承抽象类并重写抽象类中的方法,可以自定义输入源。InputFormatSourceFunction又继承自RichParallelSourceFunction。RichParallelSourceFunction在网上有很多介绍,在次不直接展开,可见链接:https://segmentfault.com/a/1190000017182961
在RichParallelSourceFunction的命名中,rich和parallel是SourceFunction的两个属性。parallel很好理解,就是并行的意思;rich的含义指的是SourceFunction定义了open和close方法,可以在流启动、结束时,实现指定逻辑。

InputFormatSourceFunction的构造函数有两个输入参数。第一参数是InputFormat,定义的是解析输入的相关处理方法;第二参数是TypeInformation,定义的是输出类型相关序列化方法。在InputFormatSourceFunction中,调用了InputFormat的configure、openInputFormat、reachedEnd、nextRecord、close、closeInputFormat等方法;调用了TypeInformation的createSerializer方法,用于指定序列化器。

当定义完输入源之后,blink把从输入源当中不断流入的数据抽象为运行环境中的数据流DataStream。bilnk任务就是基于这些数据流在进行计算。到此,定义运行环境的工作告一段落。

如果感兴趣,欢迎关注微信技术公众号
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值