Apache Spark设计与实现(一)大数据处理框架概览

438 阅读4分钟

大数据处理框架的四层结构

大数据应用可以表示为输入数据、用户代码、配置参数三个部分,输入数据以128M进行分块,预先存储在HDFS上,用户需要制定数据存储的位置,编写代码并设定配置参数,然后将应用提交给大数据处理框架运行。

大数据处理框架可以分为四层结构:用户层、分布式数据并行处理层、资源管理与任务调度层、物理执行层

Apache Spark的四层框架中

  1. 用户层上准备数据、开发用户代码、配置参数(应用资源需求参数、应用执行参数)
  2. 分布式数据并行处理层根据代码和参数配置,将代码转换为逻辑处理流程(数据单元和数据依赖关系),然后将逻辑处理流程转化为物理执行计划(执行阶段及执行任务)
  3. 资源管理与任务调度层根据需求分配资源,将任务调度到合适的容器上
  4. 物理执行层实际运行具体的数据处理任务

用户层

输入数据

批式大数据处理框架的输入数据预先储存在分布式文件系统(HDFS)上或分布式K-V数据库(HBase)上,输入数据会由框架自动分块,每个分块对应一个任务。

流式大数据处理框架的输入数据来自网络Socket或Kafka,数据以微批或连续的形式进行处理。

用户代码

用户撰写代码后,将生成一个Driver程序,将用户代码提交给集群运行。在hadoop MapReduce中,Driver程序负责设定输入/输出数据类型,并向MapReduce提交作业;在Spark中,Driver程序可以产生数据、广播数据给各个Task,还可以收集task的运行结果,最后在Driver程序内存中计算出最终结果。

配置参数

大数据配置的参数可以分为两类:与资源相关的配置参数(如Executor数量、CPU个数和内存大小)和与数据流相关的配置参数(如partition数量)

这是我参与 8 月更文挑战的第 15 天,活动详情查看: 8月更文挑战

分布式数据并行处理层

分布式数据并行处理层首先将提交的应用转化为小的计算任务,然后调用底层的资源管理与任务调度层实现并行执行。

Hadoop MapReduce具有固定的执行流程:Map-Shuffle-Reduce,可以直接将作业分为Map和Reduce两个阶段,每个阶段包含了多个可以并行执行的任务。Map任务将输入的分块数据进行map()处理,将结果写入写入缓冲区,然后对缓冲区数据进行分区、排序、聚合等操作,然后将输出到磁盘中,Reduce任务将map输出的结果通过网络传输拷贝到本地内存/磁盘中,reduce()处理后将输出数据写入分布式文件系统。

Spark的应用转化包含逻辑处理流程执行阶段与执行任务划分两层。根据用户代码中的数据操作语义和操作顺序将代码转化为逻辑处理流程,逻辑处理流程中包含多个数据单元和数据依赖,每个数据单元包含多个数据分块。然后划分逻辑处理流程生成物理计划,包含了多个stage,每个stage包含若干任务。

资源管理与任务调度层

从系统架构上看,大数据处理框架是Master-Worker结构,Master接收用户提交的应用,处理请求,管理应用运行的生命周期。Worker执行具体的数据处理任务,在运行过程中向主节点汇报任务的执行状态。

Spark支持不同的部署模式,如Standalone模式、YARN部署模式和Mesos部署模式,Standalone模式与Hadoop MapReduce模式类似,区别在于Standalone模式会预先启动容器(Executor JVM),在有任务时再启动线程运行。