发布时间:2026-07-25阅读(1)
在大数据处理方面,除了数据库以外,分布式文件系统也是非常常用的大数据存储方案。基于分布式系统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节点上。

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

Map-Reduce的过程示例
图中展示了一个Map-Reduce的简化过程。
Hadoop的Map-Reduce计算模型存在一些缺点,比如:
针对这些缺点,在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 中数据的逻辑结构,每个分区会映射到某个节点的内存或硬盘的一个数据块。

数据被分区并存储到各个节点
RDD分区(Patition)只会存储它在该 RDD 中的索引,通过该 RDD 的 ID 和分区的索引可以唯一确定对应数据块的编号,然后通过底层存储层的接口提取数据来做处理。
Spark上提供了两类对RDD的操作:转换操作和动作操作。
RDD的转换操作会生成新的RDD,新的RDD数据依赖于原来的RDD数据,一段Spark程序实际上就是构造了相互依赖的多个RDD组成的有向无环图(DAG)。最后将这个DAG作为一个Job提交给Spark执行。

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

排序100TB的数据(1万亿条数据),Spark只用了Hadoop所用1/10的计算资源,耗时只有Hadoop的1/3
Spark的优势不仅体现在性能提升上,Spark框架为批处理(Spark Core),交互式(Spark SQL),流式(Spark Streaming),机器学习(MLlib),图计算(GraphX)提供了统一的数据处理平台。

Spark 核心引擎可以支持不同类型的数据处理,实现批流合一
随着互联网应用对批流合一的大数据处理需求越来越强烈,Spark也成为了很多互联网公司的数据处理方案的共同选择。
Copyright © 2024 有趣生活 All Rights Reserve吉ICP备19000289号-5 TXT地图HTML地图XML地图