Spark、Storm、Flink横向对比

一. 概述
大数据生态圈大多数技术都是master-slave架构,Spark、Storm、Flink无一例外都是这种架构,Spark是目前批计算的主流,Flink目前逐渐取代Storm成为了流式计算的主流,Storm逐渐被市场淘汰,但是不得不说Storm也是一个非常优秀的流式计算框架,其实时性非常好。
在分布式计算框架中,角色即进程,任务通常是以线程的形式跑在计算层的JVM进程中,但是每个框架中是有差异的,以下针对Spark/Storm/Flink三大主流计算框架进行对比。

二.横向对比
在生产中,Spark、Flink一般是跑在yarn上,但是两者官方都提供了standalone模式的集群;而Storm一般是跑在Storm集群上。他们的角色在名称上存在相同的情况,但是含义往往有差异,如果我们不能正确理解它们的差异,在作业调优时可能会影响我们的决策。

1.资源层

框架master角色slave角色
SparkMasterWorker
StormNimbusSupervisor
FlinkJobManagerTaskManager

2.计算层

框架资源管理任务调度干活的进程最小的计算单元数据流图算子链优化阶段并行度
SparkDriverExecutor 启动几个Executor在spark-submit中通过参数指定,它们最终会比较均匀的分散在集群的Worker中task线程 task是以线程的形式跑在executor中线程池中DAGpiplinestage 根据shuffle切分,stage的边界一定是shuffle每个stage最后一个RDD的分区数,stage的并行度=该stage划分出task的个数
StormNimbusslot(worker) 每个Supervisor上几个slot进程在storm.yaml中配置executor线程 task是以任务的形式跑在executor线程中,默认一个executor线程中一个task,可以配置,示例如下:builder.setBolt(“store-data”, new storeMysql(), 4).setNumTasks(8) 该并行度为4,表示4个executor线程,8个task,每个线程中跑2个task,注意:计算executor数量要把ack的线程数算进去,默认一个woker一个ackTopologySpout/Bolt 没有stage的概念,可以把Spout/Bolt理解为独立的计算阶段Spout/Bolt组件上设置,并行度表示executor线程的数量
FlinkJobManagertask slot每个TaskManager上几个task slot,人为指定subtask->subtask是以线程的形式跑在slot进程中Dataflowoperater chainTask4种设置方式:算子级别>执行环境级别>客户端级别>配置文件级别。各个算子的并行度会影响算子链的划分,以及task中subtask的个数

Flink on yarn:Jobmanager、TaskManagers其实都是container进程;
Spark on yarn:Diver、Executors其实都是container进程。

3.shuffle

shuffle的语意,对于spark批计算来说,数据的加工逻辑是相同的key为一组进行操作。意味着上游一个分区中的每个key必须按照分区器计算出一个分区号,相同的key必定去到下游同一个分区,最终是相同的key为一组做某种操作,如reduceByKey、groupByKey;在spark中,shuffleManager是一个非常复杂的系统,有shuffle read和shuffle write,对于批计算,shuffle可能会产生数据倾斜,但对于flink、storm流式计算是有区别的。在流式计算中,确切的说,不应该叫shuffle,应该叫数据的分发策略(上游task中的数如何分发给下游task的)

storm中数据的分发策略:
①shuffle grouping 随机分发;
②fields grouping 按字段分发,类似于spark中的按 hashPartitioner的shuffle,类似于flink中的keyBy;
③all grouping 广播发送,类似于flink中的broadcast,上游一个分区中的数据会去到下游每一个分区中。spark中的broadcast与此有区别!
④global grouping 全局分组,类似于flink中的global;
除此之外还有其他几种,但是不常用,此处省略。

flink中数据的分发策略:
shuffle 、rebalance、rescale、global、forward、keyBy、broadcast

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值