Spark设计理念与基本架构

Spark设计理念与Hadoop密不可分,它解决了Hadoop中的一些缺陷,先来看看Hadoop的缺陷。

Hadoop MapReduce v1的局限

MRv1都封装在mapred包中,其中Map和Reduce是通过接口实现的。它包括三个部分:

  1. 运行时环境(JobTracker和TaskTracker)
  2. 变成模型(MapReduce)
  3. 数据处理引擎(Map任务和Reduce任务)

不足:

  1. 可扩展性差:JobTracker既负责资源管理又负责任务调度。
  2. 可用性差:采用了单节点的Master,一旦出现故障,整个集群将不可用。
  3. 资源利用率低:TaskTracker使用slot等量划分本节点上的资源量。
  4. 不能支持多种MapReduce框架。

Hadoop MapReduce v2的改进

JobTracker被拆分成了通用的资源调度平台(ResourceManager)和负责各个计算框架的任务调度模型(ApplicationMaster),以Yarn为核心的MRv2中,MapReduce框架是可插拔的,完全可以替换为其他MapReduce实现。但是由于对HDFS的频繁操作(结果持久化,数据备份,shuffle等等)导致磁盘I/O成为系统性能的瓶颈。因此只适用于离线数据处理,而不能提供实时数据处理能力。

Hadoop常用于解决高吞吐,批量处理的业务场景。

Spark的特点

  • 快速处理能力:内存存储和计算
  • 易于使用:多语言支持
  • 支持查询:SQL,Hive SQL
  • 支持流式计算:实时的流计算,依赖于Spark Streaming
  • 可用性高:解决单点故障,可替换集群管理器
  • 丰富的数据源支持:本地文件系统,HDFS,Cassandra,HBase,Hive...

Spark的一些基本概念

  • RDD:弹性分布式数据集
  • Task:具体执行任务,分为ShuffleMapTask和ResultTask
  • Job:提交的作业,有一到多个Task组成
  • Stage:Job分成的阶段,一个Job有一到多个Stage
  • Partition:数据分区
  • NarrowDependency:窄依赖,子RDD依赖于父RDD固定的Partition
  • ShuffleDependency:宽依赖,子RDD对父RDD中的所有Partition都有依赖
  • DAG:有向无环图,反映RDD之间的依赖关系

Spark核心功能

Spark Core提供了最基础与最核心的功能,主要有:

  1. SparkContext:隐藏了网络通信,分布式部署,消息通信,存储能力等等内容,内置的DAGScheduler负责创建Job,将DAG中的RDD划分到不同的Stage,提交Stage等功能。内置的TaskScheduler负责资源的申请,任务的提交及请求集群对任务的调度等工作。
  2. 存储体系:优先考虑使用各节点的内存作为存储,当内存不足时才会考虑使用磁盘。还提供以内存为中心的高容错的分布式文件系统Alluxio共用户进行选择。
  3. 计算引擎:由DAGScheduler,RDD以及具体节点上的Executor负责执行的Map和Reduce任务组成。
  4. 部署模式

Spark编程模型

  1. 用户使用SparkContext提供的API编写Driver application程序。
  2. 应用程序首先会使用BlockManager和BroadcastManager将任务的Hadoop配置进行广播。然后油DAGScheduler将任务转换为RDD并组织成DAG,DAG还将被划分为不同的Stage。最后由TaskScheduler借助ActorSystem将任务提交给集群管理器。
  3. 集群管理器给任务分配资源,即将具体任务分配到Worker上,Worker创建Executor来处理任务的运行。

参考资料:深入理解Spark-核心思想与源码分析

posted @ 2016-12-02 19:01  传奇魔法师  阅读(365)  评论(0编辑  收藏  举报