第一部分:大数据处理框架的基础知识

一、大数据处理框架概览

大数据及其带来的挑战

大数据的概念:大数据具有数据量大(Volume)、数据类型多样(Variety)、产生与处理速度快(Velocity)、价值高(Value)的4V特性。

大数据带来的挑战:传统数据库和数据仓库面临着可扩展性的问题。

大数据处理框架

  1. 2004,MapReduce 分布式计算框架:基于分治、归并和函数式编程思想。
  2. Hadoop :GFS和MR的开源实现。
  3. 2007,Dryad,类似于MR,但是允许用户将任务组织成有向无环图获得更强的数据表达能力。
  4. 2012,UC Berkeley的AMPLab 提出了基于内存,适合迭代计算的Spark分布式处理框架。

MR-Like模型
上面的大数据处理框架都拥有共同的编程模型,即 MapReduce-like 模型,采用“分治-聚合”策略来对数据进行分布并行处理。

大数据应用及编程模型

大数据应用一般是指为了满足业务需要,运行在大数据处理框架之上,对大数据进行分布处理的应用,比如Hadoop MapReduce 应用和 Spark 应用。比如:网页索引的构建、日志挖掘、大数据SQL查询、机器学习等等。

MapReduce编程模型,用户友好的操作符,如FlatMap(), groupByKey等等。

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

一个大数据应用可以表示为<输入数据,用户代码,配置参数> 。类比XT上的Spark任务。下图展示了四层结构都做了什么,看实体和关系
在这里插入图片描述

四层结构,每一层都需要做什么

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

用户层

1、输入数据

对于批式大数据处理框架:输入数据一般以分块的形式预先存储,可以存放在分布式文件系统如hdfs和分布式Key-Value数据库如HBase上,也可以放在关系型数据库中。输入数据在应用提交后会由框架进行自动分块,每个分块一般对应一个具体执行任务(task)

对于流式大数据处理框架:数据可以来自网络流(socket)、消息队列(Kafka)等。数据以微批或者连续的形式进入流式大数据处理框架。

数据的高效读取?如何降低磁盘IO。

2、用户代码

对于MR:map函数、reduce函数、combine函数。combine函数可以在reduce执行之前对中间数据进行聚合,这样可以减少reduce从各个节点获取的数据输入量,减少网络IO开销和reduce的压力。

在实际系统中,用户撰写用户代码后,大数据处理框架会生成一个driver程序,将用户代码提及给集群运行。如,在Hadoop MR中,driver负责设定输入输出类型,并向MR框架提交作业;在Spark集群中,driver程序不仅可以生成数据、广播数据到集群中,而且可以收集task的运行结果(如collect),最后在driver内存中计算出最终结果。

在这里插入图片描述

高层语言或高层库来间接产生用户代码。

3、配置参数

一类是资源相关的配置项,比如在Spark中用户根据map/reduce任务在资源容器(Executor JVM)中以线程的方式运行,用户需要估算应用的资源需求量,并设置应用需要的资源容器个数、CPU个数和内存大小

另一类是数据流相关的配置项,比如MapReduce和Spark都可以设置partition()函数、partition个数和数据块大小。partition函数定义map()的输出数据;partition个数定义产生多少个数据分块,也就是多少个reduce任务会被运行;数据分块大小定义map任务的输入数据大小。

分布式数据并行处理层

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

Hadoop MapReduce上的应用转化过程可以直接转化。map并行,reduce阶段也是多个可以执行的reduce任务并行。中间缓冲区,输出结果到磁盘上的不同分区中。

Spark上的应用的转化过程包含两层:逻辑处理流程、执行阶段与执行任务划分。如图
在这里插入图片描述
spark首先根据用户代码中的数据操作语义和操作顺序,将代码转化为逻辑处理流程。逻辑处理流程包含多个数据单元和数据依赖关系,数据单元包含多个数据分块。

然后框架对逻辑处理流程进行划分,生成物理执行计划,该计划包含多个执行分段(stage),每个执行阶段包含若干执行任务(task)。

spark将输入输出和中间数据用一个抽象的数据结构表示——RDD。
在每个阶段形成计算任务,一般计算任务的个数一般与RDD中分区的个数一致。

资源调度与任务调度层

主从结构

主节点Master负责接收用户提交的应用,处理请求,管理应用运行的整个生命周期

从节点Worker负责执行具体的数据处理任务(task),并在运行过程中向主节点汇报任务的执行状态
在这里插入图片描述

在运行大数据应用之前,大数据处理框架需要对用户提交的应用(job)及其计算任务(task)进行调度。任务调度的主要目的是通过不同的策略来决定应用或任务获得资源的先后顺序

典型的任务调度器宝库FIFO和Fair调度器,FIFO包括应用调度器和任务调度器,如图。
在这里插入图片描述

物理执行层

大数据处理框架中的物理执行层负责启动task,执行每个task的数据处理步骤。

在spark中,每个task对应jvm中的一个线程,而一个jvm可能同时运行多个task,因此jvm中的内存空间由task共享。

在Hadoop MapReduce中,每个task 对应一个jvm进程,相应的task内存用量指的是jvm的堆内存用量。

task执行过程中主要消耗内存的数据分为以下三类

  1. 框架执行时的中间数据
  2. 框架缓存数据
  3. 用户代码产生的中间计算的结果

错误容忍机制

由于不可避免系统和用户代码的bug、节点宕机、网络异常、磁盘损坏等软硬件可靠性问题,分布式文件系统在设计时一般都会考虑错误容忍机制,在实现时也会针对各种失效情况采取相应措施。

其他大数据处理框架

二、Spark系统部署与应用运行的基本流程

Spark安装部署

Spark系统架构

master- worker结构
在这里插入图片描述

Master和Worker节点的职责描述:

  1. Master节点上常驻Master进程,该进程负责管理全部worder节点。如将Spark任务分配给worker节点,收集worker节点的运行信息,监控worker节点的存活状态。
  2. Worker节点上常驻Worker进程。该进程除了与Master节点通信,还负责spark任务的执行,如启动Executor来执行具体的Spark任务,监控任务运行状态等等。

启动spark集群时,master节点上回启动maser进程,每个worker节点上会启动worker进程。启动spark集群后,接下来可以提交spark应用到集群中执行。Master节点接受到应用首先会通知worker节点启动executor,然后分配spark计算任务到executor上执行,executor接收到task后会为每个task启动一个线程来执行

几个概念:

  1. spark application
  2. spark Driver
  3. Executor,也称为Spark执行器,是Spark计算资源的一个单位。
  4. task

为什么Spark会让task以线程而不是进程方式运行?

进程和线程运行之前的区别是什么?

  • 使用java进程运行的好处是task之间相互独立,每个task独享进程资源,不存在资源竞争,不会相互干扰,而且监控管理比较方便(spark 的executor jvm的日志会包含多个并行的task的日志,较为混乱)。
  • 使用jvm进程的缺点
    1. 不方便共享数据,会造成重复加载,浪费内存资源的问题。
    2. 进程的启动和停止需要很多初始化的工作,因此使用进程方式运行task会降低执行效率。

Spark应用例子

GroupByTest

用户代码基本逻辑

  1. reduce task 的个数一般通过partition number 来间接设置。
  2. 具体执行流程

逻辑处理流程

思考问题:

  1. 为什么要拆分物理执行计划? 如果每个操作都只生成一个执行计划,效率太低而且容错性较低。
  2. 如何有一套通用的方法来讲任意的逻辑处理流程拆分为执行计划?
  3. task执行的时候是否会保存每一个RDD的中间数据?
  4. shuffle机制如何实现?
  5. 将物理执行计划拆分为多个阶段的好处是什么?
    一个job可以拆分为多个stage,这样每个task的既不会很大也不会很小,方便并行执行。
    可以将多个操作放在一个task中进行处理,方便数据的串行处理。
    容错性,如果某个stage失效,只需要重新计算该stage即可,不需要运行整个job。

物理执行计划

spark根据数据以来关系,将逻辑计划(Logical Plan)转化为物理执行计划,具体过程

  1. 首先确定应用会产生多个job
  2. 根据逻辑处理流程中的数据以来关系,将每个job划分多个执行阶段。

可视化执行过程

spark UI

Spark编程模型

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值