1. Spark 与 Hadoop 比较
1.1 Haoop 的缺点
1. 表达能力有限;
2. 磁盘IO开销大;
3. 延迟高;
4. 任务之间的衔接涉及IO开销;
5. 在前一个任务执行完之前,其他任务就无法开始,难以胜任复杂、多阶段的计算任务。
1.2 相较于Hadoop MR的优点
1. Spark的计算模式也属于MR,但不局限于Map和Reduce操作,它还提供了多种数据集操作类型,编程模式也比Hadoop MR更灵活;
2. Spark提供了内存计算,可将中间结果放到内存中,对于迭代运算效率更高;
3. Spark 基于DAG的任务调度执行机制,要优于Hadoop MR的迭代执行机制。
| Spark | MapReduce | |
| 数据存储结构 | 使用内存构建弹性分布式数据集RDD,对数据进行运算和cache。 | 磁盘HDFS文件系统的split |
| 编程范式 | DAG(Transformation+Action) | Map+Reduce |
| 计算中间结果的存储 | 在内存中维护,存取速度比磁盘高几个数量级 | 落到磁盘,IO及序列化、反序列化代价大 |
| Task维护方式 | 线程 | 进程 |
| 时间 |
对于小数据集读取能够达到亚秒级的延迟 | 需要数秒时间才能启动任务 |
2. Spark 生态系统
2.1 大数据处理的三种类型
1. 复杂的批量数据处理
时间跨度在数十分钟到数小时
Haoop MapReduce
2. 基于历史数据的交互式查询
时间跨度在数十秒到数分钟
Cloudera、Impala 这两者实时性均优于hive。
3. 基于实时数据流的数据处理
时间跨度在数百毫秒到数秒
Storm
2.2 BDAS架构

2.3 Spark 生态系统


3. 基本概念与架构设计
3.1 基本概念

3.2 运行架构

Spark采用Executor的优点:(相比于Hadoop的MR)
1. 利用多线程来执行具体的任务,减少任务的启动开销;
2. Executor中有一个BlockManager存储模块,会将内存和磁盘共同作为存储设备,有效减少IO开销。
3.3 各种概念之间的相互关系
一个Application由一个Driver和若干个Job构成,一个Job由多个Stage构成,一个Stage由多个没有shuffle关系的Task组成。

当执行一个Application时,Driver会向集群管理器申请资源,启动Executor,并向Executor发送应用程序代码和文件,然后在Executor上执行Task,运行结束后,执行结果会返回给Driver,或者写到HDFS或者其他数据库中。
4. Spark运行基本流程
4.1 运行流程

1. 为应用构建起基本的运行环境,即由Driver创建一个SparkContext进行资源的申请、任务的分配和监控。
2. 资源管理器为Executor分配资源,并启动Executor进程。
3.1 SparkContext根据RDD的依赖关系构建DAG图,DAG图提交给DAGScheduler解析成Stage,然后把一个个TaskSet提交给底层调度器TaskScheduler处理。
3.2 Executor向SparkContext申请Task,TaskScheduler将Task发送给Executor运行并提供应用程序代码。
4. Task在Executor上运行把执行结果反馈给TaskScheduler,然后反馈给DAGScheduler,运行完毕后写入数据并释放所有资源。
4.2 运行架构特点
1. 每个Application都有自己专属的Executor进程,并且该进程在Application运行期间一直驻留。Executor进程以多线程的方式运行Task。
2. Spark运行过程与资源管理器无关,只要能够获取Executor进程并保持通信即可。
3. Task采用了数据本地性和推测执行等优化机制。(计算向数据靠拢。)
5. Spark的部署和应用方式
5.1 Spark的三种部署方式
5.1.1 Standalone
类似于MR1.0,slot为资源分配单位,但性能并不好。
5.1.2 Spark on Mesos
Mesos和Spark有一定的亲缘关系。
5.1.3 Spark on YARN
mesos和yarn的联系

5.2 从Hadoop+Storm架构转向Spark架构
Hadoop+Storm架构
这种部署方式较为繁琐。

用Spark架构满足批处理和流处理需求。

Spark用快速的小批量计算模拟流计算,并非真实的流计算。无法实现毫秒级的流计算,对于需要毫秒级实时响应的企业应用而言,仍需采用流计算框架Storm等。
Spark架构的优点:
1. 实现一键式安装和配置,线程级别的任务监控和告警;
2. 降低硬件集群、软件维护、任务监控和应用开发的难度;
3. 便于做成统一的硬件、计算平台资源池。
5.3 Hadoop和Spark的统一部署

不同计算框架统一运行在YARN中,好处如下:
1. 计算资源按需伸缩;
2. 不用负载应用混搭,集群利用率高;
3. 共享底层存储,避免数据跨集群迁移。
现状:
1. Spark目前还是无法取代Hadoop生态系统中的一些组件所实现的功能。
2. 现有的Hadoop组件开发的应用,完全迁移到Spark上需要一定的成本。
本文对比了Spark与Hadoop在大数据处理中的优缺点,指出Spark在表达能力、内存计算和任务调度上的优势。介绍了Spark生态系统,包括批处理、交互式查询和实时数据流处理的不同场景。同时,详细阐述了Spark的基本概念、运行架构和流程,强调其Executor的多线程执行和内存管理特性。此外,讨论了Spark的部署方式,如Standalone、Mesos和YARN,并分析了从Hadoop+Storm转向Spark架构的优势,如资源管理和计算性能的提升。
14万+





