高级工程师spark大数据处理(大数据处理从MapReduce到Spark)

在大数据处理方面,除了数据库以外,分布式文件系统也是非常常用的大数据存储方案。基于分布式系统HDFS和Map-reduce计算编程模型的Hadoop框架在大数据最开始兴起的时候,几乎成为了“大数据处理”的代名词。

从2011年12月Hadoop1.0版本发布至今,大数据处理技术已经经过了十年的高速发展,本文旨在回顾这十年中大数据处理的计算模式的变化。

Map-Reduce计算模型

Hadoop系统的基本原理是基于map-reduce计算编程模型。Hadoop系统的任务执行过程可分为Map阶段和Reduce阶段,其中Map阶段负责任务的分解,Reduce阶段负责结果的汇总。

Hadoop MapReduce采用Master/Slave结构。MapReduce中的JobTracker程序负责任务管理、状态监控和任务调度,是Master节点;MapReduce中的TaskTracker程序负责任务的执行和任务状态的回报,是Slave节点。

用户程序在创建要执行的任务后,还要创建执行Map算法和Reduce算法的程序实例,JobTracker节点会把这些程序实例分配给空闲的TaskTracker节点上。

高级工程师spark大数据处理(大数据处理从MapReduce到Spark)(1)

JobTracker将用户程序创建的Map算法和Reduce算法实例分配到不同的TaskTracker节点上

对于分布式存储、任务调度、负载均衡、容错、通信等分布式计算常见问题都由MapReduce框架处理,无需用户程序考虑。MapReduce框架会尽可能地保证任务在存储着相关数据的节点上运行,因为移动程序比移动数据更经济划算。

高级工程师spark大数据处理(大数据处理从MapReduce到Spark)(2)

Map-Reduce的过程示例

图中展示了一个Map-Reduce的简化过程。

  • 首先输入的数据文件要被分割成固定大小的片段(splits),每个片段中的数据都以一批键值对的形式组织。
  • Map阶段的程序要对这些片段中的键值对进行处理,并产生新的键值对作为Reduce阶段的输入。Map阶段的输出结果按照键值会被分成R份(R为预先定义的Reduce程序的个数),作为中间文件被写到本地磁盘中,同时这些中间文件的存储位置会通知给JobTracker节点,以便Reduce阶段,JobTracker节点安排TaskTracker节点取中间文件的数据进行处理。
  • Reduce阶段的程序会根据中间文件的数据,进行处理得到新的键值对作为最后的结果,最后结果会被写入到Hadoop分布式文件系统HDFS中。

Hadoop的Map-Reduce计算模型存在一些缺点,比如:

  • 抽象程度低,需要手工编写代码
  • 只提供两个操作,Map和Reduce,表达力欠缺
  • 复杂计算需要大量Job完成,Job之间的依赖关系由开发者自己管理
  • 中间结果需要放在HDFS系统中,存在文件IO的系统开销
  • ReduceTask需要等待所有MapTask完成以后才能开始,存在资源的时间浪费
  • 只适合批数据处理,不支持交互式数据处理、实时数据处理、流式数据处理

针对这些缺点,在Hadoop推出之后,出现了很多相关技术对其中不足进行改进,如Pig,Cascading,JAQL,Oozie,Tez,Spark等。其中Spark成为了目前大数据处理领域最常用的技术。

Spark计算模型

在 Spark 中,计算模型为有向无环图(DAG:directed acyclic graph),其中每一个顶点都代表一个弹性分布式数据集(RDD:Resilient Distributed Dataset),每一条边都代表对 RDD 的一个运算。

由于RDD的数据量很大,因此要它被切分并存储在各个节点的分区当中。RDD 由于是抽象意义的数据集合,RDD分区内部并不会存储具体的数据。RDD分区(Patition)代表着 RDD 中数据的逻辑结构,每个分区会映射到某个节点的内存或硬盘的一个数据块。

高级工程师spark大数据处理(大数据处理从MapReduce到Spark)(3)

数据被分区并存储到各个节点

RDD分区(Patition)只会存储它在该 RDD 中的索引,通过该 RDD 的 ID 和分区的索引可以唯一确定对应数据块的编号,然后通过底层存储层的接口提取数据来做处理。

Spark上提供了两类对RDD的操作:转换操作和动作操作。

  • 转换操作用来定义一个新的RDD,包括map,flatMap,filter,union,sample,join,groupByKey,cogroup,ReduceByKey,cros,sortByKey,mapValues等;
  • 动作操作是返回一个结果,包括collect,reduce,count,save,lookupKey等。

RDD的转换操作会生成新的RDD,新的RDD数据依赖于原来的RDD数据,一段Spark程序实际上就是构造了相互依赖的多个RDD组成的有向无环图(DAG)。最后将这个DAG作为一个Job提交给Spark执行。

高级工程师spark大数据处理(大数据处理从MapReduce到Spark)(4)

Spark计算模型:相互依赖的RDD组成了DAG

相比MR计算框架,Spark框架的性能也大幅提升。相关测试数据表明:排序100TB的数据(1万亿条数据),Spark只用了Hadoop所用1/10的计算资源,耗时只有Hadoop的1/3。

高级工程师spark大数据处理(大数据处理从MapReduce到Spark)(5)

排序100TB的数据(1万亿条数据),Spark只用了Hadoop所用1/10的计算资源,耗时只有Hadoop的1/3

Spark的优势不仅体现在性能提升上,Spark框架为批处理(Spark Core),交互式(Spark SQL),流式(Spark Streaming),机器学习(MLlib),图计算(GraphX)提供了统一的数据处理平台。

高级工程师spark大数据处理(大数据处理从MapReduce到Spark)(6)

Spark 核心引擎可以支持不同类型的数据处理,实现批流合一

随着互联网应用对批流合一的大数据处理需求越来越强烈,Spark也成为了很多互联网公司的数据处理方案的共同选择。

,

免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com

    分享
    投诉
    首页