大数据技术发展史

2004年,整个互联网界还处于懵懂时代,Google发布了三篇论文,分别是分布式文件系统GFS,大数据分布式计算框架MapReduce,分布式存储系统bigTable。当时Lucene开源项目的创始人Dong Cutting在阅读了Google的论文后,非常赞叹并且极为兴奋,之后根据论文细节原理初步实现了类GFS和MapReduce的功能,这也是之后Hadoop的雏形。

2006年,cutting将这些大数据相关的功能从Nutch中分离了出来,启动了一个独立的运行维护大数据项目,这就是鼎鼎有名的Hadoop,主要包括分布式文件系统HDFS和计算引擎MapReduce。

HDFS采用master/slave架构。一个HDFS集群是有一个Namenode和一定数目的Datanode组成。Namenode是一个中心服务器,负责管理文件系统的namespace和客户端对文件的访问。Namenode执行文件系统的namespace操作,例如打开、关闭、重命名文件和目录,同时决定block到具体Datanode节点的映射。Namenode和Datanode都是设计成可以跑在普通的廉价的运行Linux的机器上。集群中单一Namenode的结构大大简化了系统的架构。Namenode是所有HDFS元数据的仲裁者和管理者,Datanode在Namenode的指挥下进行block的创建、删除和复制。Datanode在集群中一般是一个节点一个,负责管理节点上它们附带的存储。在内部,一个文件其实分成一个或多个block,这些block存储在Datanode集合里。


HDFS架构图

MapReduce 来处理大数据集的过程, 这个 MapReduce 的计算过程简而言之,就是将大数据集分解为成百上千的小数据集,每个(或若干个)数据集分别由集群中的一个结点(一般就是一台普通的计算机)进行处理并生成中间结果,然后这些中间结果又由大量的结点进行合并, 形成最终结果。

计算模型的核心是 Map 和 Reduce 两个函数,这两个函数由用户负责实现,功能是按一定的映射规则将输入的 对转换成另一个或一批 对输出。

这段期间人们需要编写MapReduce程序,然后丢到Hadoop平台在运行,有人觉得编写MapReduce程序很麻烦,于是FaceBook发布了Hive,Hive支持sql语法来进行大数据计算,Hive会将sql语句转换成MapReduce的计算程序。所以这时期那些熟悉数据库的工程师们便可以无门槛的使用大数据技术来进行分析和处理了。Hive的出现极大的降低Hadoop的使用难度,2011年的时候,Facebook大数据平台上运行的作业90%都来源于Hive。

在Hadoop早期,MapReduce既是一个执行引擎,又是一个资源调度框架,服务器集群的资源调度管理由MapReduce自己完成。但是这样不利于资源复用,也使得MapReduce非常臃肿。于是一个新项目启动了,将MapReduce执行引擎和资源调度分离开来,这就是Yarn。2012年,Yarn成为一个独立的项目开始运营,随后被各类大数据产品支持,成为大数据平台上最主流的资源调度系统。

同样是在2012年,UC伯克利AMP实验室(Algorithms、Machine和People的缩写)开发的Spark开始崭露头角。当时AMP实验室的马铁博士发现使用MapReduce进行机器学习计算的时候性能非常差,因为机器学习算法通常需要进行很多次的迭代计算,而MapReduce每执行一次Map和Reduce计算都需要重新启动一次作业,带来大量的无谓消耗。还有一点就是MapReduce主要使用磁盘作为存储介质,而2012年的时候,内存已经突破容量和成本限制,成为数据运行过程中主要的存储介质。Spark一经推出,立即受到业界的追捧,并逐步替代MapReduce在企业应用中的地位。Spark的优点如下

1.运行速度快,Spark拥有DAG执行引擎,支持在内存中对数据进行迭代计算。官方提供的数据表明,如果数据由磁盘读取,速度是Hadoop MapReduce的10倍以上,如果数据从内存中读取,速度可以高达100多倍。

2.适用场景广泛,大数据分析统计,实时数据处理,图计算及机器学习

3.易用性,编写简单,支持80种以上的高级算子,支持多种语言,数据源丰富,可部署在多种集群中

4.容错性高。Spark引进了弹性分布式数据集RDD (Resilient Distributed Dataset) 的抽象,它是分布在一组节点中的只读对象集合,这些集合是弹性的,如果数据集一部分丢失,则可以根据“血统”(即充许基于数据衍生过程)对它们进行重建。另外在RDD计算时可以通过CheckPoint来实现容错,而CheckPoint有两种方式:CheckPoint Data,和Logging The Updates,用户可以控制采用哪种方式来实现容错。


Spark架构

用户编排的代码由一个个的RDD Objects组成,DAGScheduler负责根据RDD的宽依赖拆分DAG为一个个的Stage,每个Stage包含一组逻辑完全相同的可以并发执行的Task。TaskScheduler负责将Task推送给从ClusterManager那里获取到的Worker启动的Executor。


一般说来,像MapReduce、Spark这类计算框架处理的业务场景都被称作批处理计算,因为它们通常针对以“天”为单位产生的数据进行一次计算,然后得到需要的结果,这中间计算需要花费的时间大概是几十分钟甚至更长的时间。因为计算的数据是非在线得到的实时数据,而是历史数据,所以这类计算也被称为大数据离线计算。

而在大数据领域,还有另外一类应用场景,它们需要对实时产生的大量数据进行即时计算,比如对于遍布城市的监控摄像头进行人脸识别和嫌犯追踪。这类计算称为大数据流计算,相应地,有Storm、Flink、Spark Streaming等流计算框架来满足此类大数据应用的场景。 流式计算要处理的数据是实时在线产生的数据,所以这类计算也被称为大数据实时计算。

在典型的大数据的业务场景下,数据业务最通用的做法是,采用批处理的技术处理历史全量数据,采用流式计算处理实时新增数据。而像Flink这样的计算引擎,可以同时支持流式计算和批处理计算

你可能感兴趣的:(大数据技术发展史)