一.spark与hadoop比较

Spark是一个计算框架相当于Hadoop的MapReduce。Hadoop中是包含计算框架MapReduce和分布式文件系统HDFS,更广泛的讲是还包含其生态系统上的其他系统比如Hbase和Hive等。
Spark相比MapReduce的优点:
1.中间结果的输出
(1)MapReduce的话计算结果会产生很多stage,并且会依赖底层HDFS文件系统来存储每个stage的结果,这样会产生很大的开销。
(2)Spark的话采用延迟计算的策略将任务抽象成有向无环图(DAG),多个stage串行或者并行计算无需将stage中间结果输出到HDFS而是将中间结果缓存到内存中减少磁盘的I/O来提升性能。
2.数据格式和内存布局
(1)Spark采用分布式的数据结构:弹性分布式数据集RDD (但RDD只支持粗粒度计算不适合细粒度需要异步更新的计算),粗粒度的写操作,对于读取操作的话RDD也可以精确到每条记录
(2)MapReduce采用MapReduce Scheme on Read会产生较大的处理开销
3.执行策略
(1)MapReduce在数据Shuffle之前会花费大量时间来进行排序
(2)Spark任务在Shuffle中不是所有场景都需要排序支持基于Hash的分布式聚合
4.任务调度的开销
(1)MapReduce提交一个任务延时很高
(2)Spark采用事件驱动的AKKA来启动任务,通过复用线程来避免进程或线程启动和切换的开销

二.Spark的架构

Spark采用分布式的Slave-Master模型,Master作为集群的控制器负责整个集群的正常运转,Slave也就集群中含有Worker进程的节点也就是集群的计算节点负责接收主节点的命令与进行状态的汇报
spark学习笔记一
Executor负责任务的执行;Client作为用户的客户端负责应用的提交;Driver负责控制一个应用的执行。在一个Spark应用中Driver和Worker是两个重要的角色,Driver程序是应用逻辑执行的起点,负责作业的调度即Task任务的分发。执行阶段Driver会将Task和Task所依赖的file和jar序列化后传递给对应的Worker机器,Worker对相应数据分区任务进行处理。
Spark架构中的基本组件:
ClusterManager : 在Standalone模式下即为Master(主节点),控制整个集群,监控Worker。在YARN模式中为资源管理器。
Worker :从节点,负责控制计算节点,启动Executor或者Driver。在YARN模式下为NodeManager,负责计算节点控制。
Driver :运行Application的Main()函数并创建SparkContext.
Executor : 执行器,在Worker节点上执行任务的组件,用于启动线程池运行任务,每个Application都有自己独立的Executors。
SparkContext:整个应用的上下文,控制整个应用的生命周期。
RDD:Spark的基本计算单元,一组RDD可以形成执行的有向无环图RDD DAG。
DAG Scheduler :根据提交的作业(job)构建基于Stage的DAG,并提交Stage给TaskScheduler。
TaskScheduler : 将任务(Task)分发给Executor执行。
SparkEnv : 线程级别的上下文,存储运行时的重要组件的引用。
在SparkEnv中创建并包含如下重要组件的应用:
MapOutPutTracker : 负责shuffle元信息的存储。
BroadcastManager :负责广播变量的控制与元信息存储。
BlockManager : 负责存储管理,创建和查找块。
MetricsSystem : 监控运行时性能指标信息。
SparkConf : 负责存储配置信息。

三. Spark运行的逻辑

首先action算子触发后将所有累计的算子形成一个有向无环图(DAG),然后将该DAG根据RDD之间的不同依赖关系切分为不同的阶段(Stage),一个Stage就包含了一系列的函数执行流水线,通过对这一流水线的执行最后将结果保存至HDFS中。

四.Spark分布式架构和单机多核架构的区别

1.单机多核情况下,多CPU共享内存和磁盘。扩展起来费力
2.每个节点拥有自己私有资源,最大的特点在于不共享资源。可以无限扩展

相关文章: