你的位置:首页 > 信息动态 > 新闻中心
信息动态
联系我们

Hadoop和Spark三大核心组件介绍与对比

2021/12/8 13:31:42

Hadoop

Hadoop依靠MapReduce的数据处理
HDFS: HDFS是一个分布式文件系统,是 Hadoop 的存储核心, 它可以被部署运行于大量的廉价服务器上,可以处理超大文件,它的设计是建立在“一次写入,多次读取的”思想之上。对于被上传到 HDFS 上的数据,系统会对其进行分块分进行保存,分块概念的存在是 HDFS 可以存储大量文件的重要原因。 HDFS 中有两个重要概念 NameNode 和 DataNode,NameNode 是中心服务器,负责管理文件系统命名空间以及客户端对文件的访问, DataNode 是 Hadoop 集群的主体, 一般的一个存储节点运行一个 DataNode 进程, DataNode 的作用是管理本节点上所存储的文件。

YARN(框架): 负责大数据的资源调度, 负责集群中所有计算资源的管理和调度

Yarn是针对 Hadoop 存在的 JobTracker 单点瓶颈, 编程框架不够灵活等问题提出的改进方案。通过将集群资源管理和作业管理分离开来,降低 JobTracker 的负载。其中集群 资 源 管 理 由 ResourceManager 负 责 , 作 业 管 理 由ApplicationMaster 负责, Container 负责为集群各个节点调度资源,与所有计算节点 NodeManager 共同构成新的数据计算框架。

常见进程:

ResourceManager(1个): 负责整个集群所有资源的管理
职责:
① 负责接受客户端的提交Job的请求
② 负责向NM分配任务
③ 负责接受NM上报的信息

NodeManager(N个): 负责单台计算机所有资源的管理
职责:
① 负责和RM进行通信,上报本机中的可用资源
② 负责领取RM分配的任务
③ 负责为Job中的每个Task分配计算资源

MR(编程模型): 使用Hadoop制定的编程要求,编写程序,完成大数据的计算
MapReduce 是一个并行计算框架,是 Hadoop的计算核心, 它通过将数据分割,并行处理等底层问题进行封装,使得用户只需要考虑自身所关注的并行计算任务的实现逻辑,从而极大的简化了分布式程序的设计,在整个计算过程中,数据始终以<key,value>键值对的形式存在。它的核心是 Map 函数与 Reduce 函数。

Hadoop通过主从模型,用一系列技术维护同时性,做出来一个可维护可高效率运行的大数据实时处理框架
程序中有Mapper(简单处理)和Reducer(合并)。
Client、JobTracker、TaskTracker以及Task

举个栗子,现在需要对全校的毕业论文做每个单词的词频统计。MapReduce的做法是把每篇论文的每个单词先做一个键值对形式的转化(Map),如(we,0),然后把转化后的键值对集分布到集群下各个子节点中(shuffle),这样每个普通计算机分到了比较少量的论文数量,再把他们按值键值相同的合并(Reduce),可能会是(we,10086),在统一将整理后的数据集返还给master节点,完成整个数据集的计算。

HDFS 以固定大小的block 为基本单位存储数据,而对于MapReduce 而言,其处理单位是split。split 是一个逻辑概念,它只包含一些元数据信息,比如数据起始位置、数据长度、数据所在节点等。它的划分方法完全由用户自己决定。
遵循MapReduce的编程规范,编写的程序,打包后,称为一个Job(任务)。

Job需要提交到YARN上,向YARN申请计算资源,运行Job中的Task(进程)。

Job会先创建一个进程MRAppMaster(mapreduce 应用管理者),由MRAppMaster向YARN申请资源。MRAppMaster负责监控Job中各个Task运行情况,进行容错管理。

Spark

Spark通过RDD进行系统能力扩展, RDD(分布式弹性数据集)其中有很多分区存储信息,还建立了与其他RDD之间的联系,这样就使得我们的数据集大小可控,可以根据业务需要进行数据分流操作,提高系统灵活性,运行速度也由于在MapRedeuce方面的改进而大大提高。

Spark仅仅是计算框架,不包含存储,对比的应该是MapReduce。

●MapReduce和Spark的主要区别在于,MapReduce使用持久存储,而Spark使用弹性分布式数据集(RDDS)。

●MapReduce是批处理框架,而Spark支持流式。

●Spark易用性要好。

RDD: RDD 是对分布式内存数据的一个抽象,对数据的所有操作最终会转换成对 RDD 的操作,即 RDD 是数据操作的基本单位。对于 RDD 的操作分为 Transformation(转换)和
Action(执行),其中 Transformation 又包括多种基本操作:map,filter,flatmap,groupByKey,reduceByKey,union 等;Action 操作包括:count,collect,reduce 等基本操作。Spark 对于两种操作采取不同机制:对于所有的转换操作都是惰性操作(懒执行),即从一个 RDD 通过转换操作生成另一个 RDD 的过程在 Spark 上并不会被马上执行,只有在 Action 操作触发时转换操作才会被真正执行。

DAG: 在一个 Spark 应用当中,数据执行流程是以 RDD 组成的有向无环图 DAG 的形式存在,Spark 根据用户提交的应用逻辑绘制 DAG 图,并且依据 RDD 之间的依赖关系,将 DAG 图划分成不同阶段(stage),但是 DAG 绘制完成之后并不会被马上执行,只是起到一个标记数据集的作用。下图就是一个DAG图:
Spark部署模式: 当前 Spark 存在多种部署模式,包括 Local 模式,Standalone模式,基于 Mesos 的模式以及基于 Yarn 的部署模式。其中基于 Yarn 的部署模式是当前最为主流的部署模式,其核心思想是利用 Hadoop Yarn 实现集群资源的管理。

Spark架构: 尽管 Spark 有不同的部署模式,但是其基本组成部分包括控制节点 Master 和作业控制进程 Driver,资源管理器 ClusterManager,执行节点 Worker 和执行单元 Executor 以及客户端 Client, 其中 Driver 进程位于 Master 主控节点上,一
个 Worker 节点一般维护一个 Executor 进程。