共计 2505 个字符,预计需要花费 7 分钟才能阅读完成。
Spark Streaming 与 Storm
Spark Streaming 处于 Spark 生态技术栈中,可以和 Spark Core 和 Spark SQL 无缝整合;而 Storm 相对来说比较单一;
(一)概述
- Spark Streaming
Spark Streaming 是 Spark 的核心 API 的一个扩展,可以实现高吞吐量、具有容错机制的实时流数据的处理。支持从多种数据源获取数据,包括 kafka、Flume、Twitter、ZeroMQ 以及 TCP 等,从数据获取之后,可以使用诸如 map、reduce、join、window 等高级函数进行复杂算法处理。最后还可以将处理结果存储到文件系统,数据库;还可以使用 Spark 的其他子框架,如图计算等,对流数据进行处理。
Spark Streaming 在内部的处理机制是,就收实时流的数据,并根据一定的时间间隔拆分成一批批的数据,然后处理这些批数据,最终得到处理后的一批结果数据。对应的批数据(batch data),在 Spark 内核对应一个 RDD 实例,因此,对流数据 DStream 可以看成是一组 RDDs。
执行流程(Receiver 模式):
提高并行度:receiver task 会每隔 200ms block.interval 将接受来的数据分装到 block 中,调整 block.interval 的值;
启用多个 receiver 进程来并行接受数据;
对于 Direct 模式提高并行度的方式只需增加 kafka partition 的数量;Director 模式,消费者偏移量由 spark 自己管理,存在 checkpoint 目录中
- Storm
storm 采用 Master/Slave 体系结构
nimbus:该进程运行在集群的主节点上,负责任务的指派和分发
supervisor:运行在集群的从节点上,负责执行任务的具体部分
zookeeper:帮助主从做到解耦,存储集群资源元数据,当 storm 把元数据信息都存到 zk 中后,那 storm 自己就做到了无状态,提交 Topology 应用的时候才会用到 nimbus;
worker:运行处理具体组件逻辑进程,worker 之间通过 netty 传送数据
task:worker 中每个 spout/bolt 的线程称为一个 task,同一个 spout/bolt 的 task 可能会共享一个物理进程,该线程为 executor
以上由 spout 和 bolt 组成的图叫做 topologies,上层的 spout 或者 bolt 向下层的 Bolt 来发射数据的时候,默认情况下都是 default stream
storm 常用的分发策略一共有 5 种,最常用的是 Shuffle grouping 和 Fields grouping
storm 中的 ack 机制:说白了就是 storm 通过 Acker 组件去数数,数 Tuple tree 里面的 Tuple 是否都已经确认过,每个 Tuple Tree 对应一个 msgId
提高并行度:
增加 worker 数量;增加 Executor 数量;设置 task 数量,默认一个线程里面跑一个 task
Storm 实现可靠的消息保障机制:
Tuple 的完全处理需要 Spout、Bolt 以及 Acker(Storm 中用来记录某棵 Tuple 树是否被完全处理的节点)协同完成,如上图所示。从 Spout 发送 Tuple 到下游,并把相应信息通知给 Acker,整棵 Tuple 树中某个 Tuple 被成功处理了都会通知 Acker,待整棵 Tuple 树都被处理完成之后,Acker 将成功处理信息返回给 Spout;如果某个 Tuple 处理失败,或者超时,Acker 将会给 Spout 发送一个处理失败的消息,Spout 根据 Acker 的返回信息以及用户对消息保证机制的选择判断是否需要进行消息重传。
更多 Spark 相关教程见以下内容:
CentOS 7.0 下安装并配置 Spark http://www.linuxidc.com/Linux/2015-08/122284.htm
Ubuntu 系统搭建单机 Spark 注意事项 http://www.linuxidc.com/Linux/2017-10/147220.htm
Spark1.0.0 部署指南 http://www.linuxidc.com/Linux/2014-07/104304.htm
Spark2.0 安装配置文档 http://www.linuxidc.com/Linux/2016-09/135352.htm
Spark 1.5、Hadoop 2.7 集群环境搭建 http://www.linuxidc.com/Linux/2016-09/135067.htm
Spark 官方文档 – 中文翻译 http://www.linuxidc.com/Linux/2016-04/130621.htm
在 Ubuntu 17.10 上安装 Apache Spark http://www.linuxidc.com/Linux/2017-12/149853.htm
CentOS 6.2(64 位)下安装 Spark0.8.0 详细记录 http://www.linuxidc.com/Linux/2014-06/102583.htm
Spark-2.2.0 安装和部署详解 http://www.linuxidc.com/Linux/2017-08/146215.htm
Spark2.0.2 Hadoop2.6.4 全分布式配置详解 http://www.linuxidc.com/Linux/2016-11/137367.htm
Ubuntu 14.04 LTS 安装 Spark 1.6.0(伪分布式)http://www.linuxidc.com/Linux/2016-03/129068.htm
Spark 的详细介绍:请点这里
Spark 的下载地址:请点这里
本文永久更新链接地址:http://www.linuxidc.com/Linux/2018-02/150887.htm