5.4 KiB
5.4 KiB
Hadoop生态圈
Yarn资源调度
MR on Yarn
Storm on Yarn
Spark on Yarn
Flink on Yarn
HDFS
MR
分而治之
Lambda架构
离线计算 MapReduce,Hive:
实时计算
Apache Spark
生态圈完善
Spark core 批计算 取代MR,
-
预先申请资源Spark申请资源的粗粒度的资源申请,启动任务速度快,task完毕executor 不会立即释放.MR细粒度资源申请,执行完毕后立即释放.
-
Spark基于内存计算cache persisit内存计算pipline,RDD存储逻辑,partion
Spark streaming 流计算 取代storm
- 微批
- 无状态,batch
- 有状态计算updateStateByKey(checkpoint),flink
- 无界有界,window窗口和水位线处理顺序问题
spark sql sql
Spark mlib 机器学习
批处理只是流数据的一个极限特例而已.
Flink
- 支持高吞吐,低延迟,高性能\
- 支持时间时间(Event Time)概念,结合WaterMark处理乱序数据.
- spark基于系统时间,数据到系统的时间,
- flink基于用户带来的时间
- 支持有状态计算,并且支持多种状态 内存,文件,RocksDB
- 支持高度灵活的窗口,time,count,session
- 基于轻量级分布式快照(CheckPoint)实现容错保证exactly-once语义
- 基于JVM实现独立内存管理
- Save points 保存点,方便代码升级
Flink与Spark对比
spark
pipline
spark与MR速度原因
有界与无界流
集群
- master,管理集群中所有Worker进而管理了集群资源
- worker管理各个节点上的资源mem core
- WORKER_MEMORY
- WORKER_CORE
- Driver任务调度
- Executor执行task
Flink集群
- JobManager(JVM进程)master
- 资源调度
- 任务调度,触发集群进行checkpoint,
- TaskManager(JVM进程)slaver
- TaskManager向JobManager注册资源
- TackManager中资源使用Task slot进行隔离,隔离内存无法隔离核.
- TaskManager 3G 3Core
- 设置3个task slot 平分TaskManager
- task slot 一组固定资源
开发
- 准备环境,创建/获取
- 数据处理逻辑
- 启动Flink任务
提交集群
- Yarn-Session
- 提交前,需要yarn去启动一个flink集群(yarn-session)
- 启动成功后,通过flink run 这个命令去往flink集群中提交任务
- 当job执行完毕,yarn-session集群并不会关闭,等待下一个job提交,一直占用集群资源(JobManager),好处job启动时间变短
- Run a flink job on yarn
- 直接去yarn中提交一个flink job,在job执行之前,先去启动一个flink集群,集群启动成功,job在执行,当job执行完毕,flink集群一同关闭,释放资源
- 每个job执行完,集群关闭,但是每个job启动时间变长.
搭建高可用集群
flink JobManager元数据checkpoint,数据存储,hadoop插件.
JobManager分担压力Flink on yarn
- jobManager任务管理,yarn资源管理.分担jobManager压力
- 降低维护成本yarn
运行流程
RM,NM,yarn运行需要hdfs
- 上传jar及配置文件
- 为applicationMaster申请资源
- 分配node资源,启动applicationmaster,下载jar及配置文件
- applicationMaster为taskmanager申请资源
- yarn分配node并启动TaskManager
- 分配任务taskManager中运行
- taskManager下载文件.
HA
- 主备
- 重启
算子并行度
- 配置文件中设置
- 提交job的时候,通过-p选项来设置
- 代码中设置parallelism
- 算子上设置
任务调度算子链
本地化级别:PROCESS_LOCAL
- 不同的Task下的subtask要分发到相同的TaskSlot中.降低数据传输,提高执行效率.尽可能实现算子链
- 相同的Task下的subtask要分发到不同的TaskSlot中充分利用集群资源.
- TaskSlot个数决定了job未来执行的并行度,job数不能大于TaskSlot数.
算子->函数
- Stateful Stream Processing=========Low-level building block (streams,state[event]time)
- DataStream/DataSetApi============Core Api
- Table Api========================Declaretive DSL
- sql=============================High-level Language
flatMap代替filter
map,flat(扁平)
union 数据流何工,数据流中的数据必须一致.
connect假合并,数据流中数据可以不一样,comap
split 可以根据一定的条件拆分数据流.
side out
卡口数据
相同key的数据一定是由某一个subtask处理,一个subtask可能会处理多个key所对应的数据.
统计每分钟卡口流量
时间映射成分钟字段,直接count
每分钟每个卡口,组合key
富函数可获取上下文及生命周期.
process底层api
广播流
分区策略
- shuffle==================增大分区,数据倾斜,增加并行度使用
- rebalance================增大分区,数据倾斜,增加并行度使用
- rescale==================减少分区,防止大量网络传输,降低并行度.
- broadcast================广播,大量数据冗余,映射表
- Forward=================上游分区与下游分区一一对应的分发,窄依赖
- global===================上游中所有数据分发到下游中第一个分区中.
- keyby===================可以根据用户指定的字段来分发
- partiooncustom===========自定义分区策略
DataFlow
- source
- transformation
- sink
恰好一次
幂等处理
Flink State
会持久化到远端
- Keyed State
- value state
- list state
- map state
- ReducingState
- AggregationState替代FoldingState
- No-Keyed State(Operator State)