《深入理解大数据:大数据处理与编程实践》一一1.4 Hadoop系统简介-阿里云开发者社区

开发者社区> 华章出版社> 正文
登录阅读全文

《深入理解大数据:大数据处理与编程实践》一一1.4 Hadoop系统简介

简介:

本节书摘来自华章计算机《深入理解大数据:大数据处理与编程实践》一书中的第1章,第1.4节,作者 主 编:黄宜华(南京大学)副主编:苗凯翔(英特尔公司),更多章节内容可以访问云栖社区“华章计算机”公众号查看。

1.4 Hadoop系统简介

1.4.1 Hadoop的概述与发展历史
Hadoop系统最初的源头来自于Apache Lucene项目下的搜索引擎子项目Nutch,该项目的负责人是Doug Cutting。2003年,Google公司为了解决其搜索引擎中大规模Web网页数据的处理,研究发明了一套称为MapReduce的大规模数据并行处理技术,并于2004年在著名的OSDI国际会议上发表了一篇题为“MapReduce:Simplified Data Processing on Large Clusters”的论文,简要介绍MapReduce的基本设计思想。论文发表后,Doug Cutting受到了很大启发,他发现Google MapReduce所解决的大规模搜索引擎数据处理问题,正是他同样面临并急需解决的问题。因而,他尝试依据Google MapReduce的设计思想,模仿Google MapReduce框架的设计思路,用Java设计实现出了一套新的MapReduce并行处理软件系统,并将其与Nutch分布式文件系统NDFS结合,用以支持Nutch搜索引擎的数据处理。2006年,他们把NDFS和MapReduce从Nutch项目中分离出来,成为一套独立的大规模数据处理软件系统,并使用Doug Cutting小儿子当时呀呀学语称呼自己的玩具小象的名字“Hadoop”命名了这个系统。2008年他们把Hadoop贡献出来,成为Apache最大的一个开源项目,并逐步发展成熟,成为一个包含了HDFS、MapReduce、HBase、Hive、Zookeeper等一系列相关子项目的大数据处理平台和生态系统。
Hadoop开源项目自最初推出后,经历了数十个版本的演进。它从最初于2007年推出的Hadoop-0.14.X测试版,一直发展到2011年5月推出了经过4500台服务器产品级测试的最早的稳定版0.20.203.X。到2011年12月,Hadoop又在0.20.205版基础上发布了Hadoop1.0.0,该版本到2012年3月发展为Hadoop1.0.1稳定版。1.0版继续发展,到2013年8月发展为Hadoop1.2.1稳定版。
与此同时,由于Hadoop1.X以前版本在MapReduce基本构架的设计上存在作业主控节点(JobTracker)单点瓶颈、作业执行延迟过长、编程框架不灵活等较多的缺陷和不足,2011年10月,Hadoop推出了基于新一代构架的Hadoop0.23.0测试版,该版本系列最终演化为Hadoop2.0版本,即新一代的Hadoop系统YARN。2013年10月YARN已经发展出Hadoop2.2.0稳定版。
1.4.2 Hadoop系统分布式存储与并行计算构架
图1-14展示了Hadoop系统的分布式存储和并行计算构架。从硬件体系结构上看,Hadoop系统是一个运行于普通的商用服务器集群的分布式存储和并行计算系统。集群中将有一个主控节点用来控制和管理整个集群的正常运行,并协调管理集群中各个从节点完成数据存储和计算任务。每个从节点将同时担任数据存储节点和数据计算节点两种角色,这样设计的目的主要是在大数据环境下实现尽可能的本地化计算,以此提高系统的处理性能。为了能及时检测和发现集群中某个从节点发生故障失效,主控节点采用心跳机制(Heartbeat)定期检测从节点,如果从节点不能有效回应心跳信息,则系统认为这个从节点失效。
image

图1-14 Hadoop系统分布式存储与并行计算构架
从软件系统角度看,Hadoop系统包括分布式存储和并行计算两个部分。分布式存储构架上,Hadoop基于每个从节点上的本地文件系统,构建一个逻辑上整体化的分布式文件系统,以此提供大规模可扩展的分布式数据存储功能,这个分布式文件系统称为HDFS(Hadoop Distributed File System),其中,负责控制和管理整个分布式文件系统的主控节点称为NameNode,而每个具体负责数据存储的从节点称为DataNode。
进一步,为了能对存储在HDFS中的大规模数据进行并行化的计算处理,Hadoop又提供了一个称为MapReduce的并行化计算框架。该框架能有效管理和调度整个集群中的节点来完成并行化程序的执行和数据处理,并能让每个从节点尽可能对本地节点上的数据进行本地化计算,其中,负责管理和调度整个集群进行计算的主控节点称为JobTracker,而每个负责具体的数据计算的从节点称为TaskTracker。JobTracker可以与负责管理数据存储的主控节点NameNode设置在同一个物理的主控服务器上,在系统规模较大、各自负载较重时两者也可以分开设置。但数据存储节点DataNode与计算节点TaskTracker会配对地设置在同一个物理的从节点服务器上。
Hadoop系统中的其他子系统,例如HBase、Hive等,将建立在上述HDFS分布式文件系统和MapReduce并行化计算框架之上。
1.4.3 Hadoop平台的基本组成与生态系统
Hadoop系统运行于一个由普通商用服务器组成的计算集群上,该服务器集群在提供大规模分布式数据存储资源的同时,也提供大规模的并行化计算资源。
在大数据处理软件系统上,随着Apache Hadoop系统开源化的发展,在最初包含HDFS、MapReduce、HBase等基本子系统的基础上,至今Hadoop平台已经演进为一个包含很多相关子系统的完整的大数据处理生态系统。图1-15展示了Hadoop平台的基本组成与生态系统。
image

图1-15 Hadoop平台的基本组成与生态系统
1.?MapReduce并行计算框架
MapReduce并行计算框架是一个并行化程序执行系统。它提供了一个包含Map和Reduce两阶段的并行处理模型和过程,提供一个并行化编程模型和接口,让程序员可以方便快速地编写出大数据并行处理程序。MapReduce以键值对数据输入方式来处理数据,并能自动完成数据的划分和调度管理。在程序执行时,MapReduce并行计算框架将负责调度和分配计算资源,划分和输入输出数据,调度程序的执行,监控程序的执行状态,并负责程序执行时各计算节点的同步以及中间结果的收集整理。MapReduce框架提供了一组完整的供程序员开发MapReduce应用程序的编程接口。
2.?分布式文件系统HDFS
HDFS(Hadoop Distributed File System)是一个类似于Google GFS的开源的分布式文件系统。它提供了一个可扩展、高可靠、高可用的大规模数据分布式存储管理系统,基于物理上分布在各个数据存储节点的本地Linux系统的文件系统,为上层应用程序提供了一个逻辑上成为整体的大规模数据存储文件系统。与GFS类似,HDFS采用多副本(默认为3个副本)数据冗余存储机制,并提供了有效的数据出错检测和数据恢复机制,大大提高了数据存储的可靠性。
3.?分布式数据库管理系统HBase
为了克服HDFS难以管理结构化/半结构化海量数据的缺点,Hadoop提供了一个大规模分布式数据库管理和查询系统HBase。HBase是一个建立在HDFS之上的分布式数据库,它是一个分布式可扩展的NoSQL数据库,提供了对结构化、半结构化甚至非结构化大数据的实时读写和随机访问能力。HBase提供了一个基于行、列和时间戳的三维数据管理模型,HBase中每张表的记录数(行数)可以多达几十亿条甚至更多,每条记录可以拥有多达上百万的字段。
4.?公共服务模块Common
Common是一套为整个Hadoop系统提供底层支撑服务和常用工具的类库和API编程接口,这些底层服务包括Hadoop抽象文件系统FileSystem、远程过程调用RPC、系统配置工具Configuration以及序列化机制。在0.20及以前的版本中,Common包含HDFS、MapReduce和其他公共的项目内容;从0.21版本开始,HDFS和MapReduce被分离为独立的子项目,其余部分内容构成Hadoop Common。
5.?数据序列化系统Avro
Avro是一个数据序列化系统,用于将数据结构或数据对象转换成便于数据存储和网络传输的格式。Avro提供了丰富的数据结构类型,快速可压缩的二进制数据格式,存储持久性数据的文件集,远程调用RPC和简单动态语言集成等功能。
6.?分布式协调服务框架Zookeeper
Zookeeper是一个分布式协调服务框架,主要用于解决分布式环境中的一致性问题。Zookeeper主要用于提供分布式应用中经常需要的系统可靠性维护、数据状态同步、统一命名服务、分布式应用配置项管理等功能。Zookeeper可用来在分布式环境下维护系统运行管理中的一些数据量不大的重要状态数据,并提供监测数据状态变化的机制,以此配合其他Hadoop子系统(如HBase、Hama等)或者用户开发的应用系统,解决分布式环境下系统可靠性管理和数据状态维护等问题。
7.?分布式数据仓库处理工具Hive
Hive是一个建立在Hadoop之上的数据仓库,用于管理存储于HDFS或HBase中的结构化/半结构化数据。它最早由Facebook开发并用于处理并分析大量的用户及日志数据,2008年Facebook将其贡献给Apache成为Hadoop开源项目。为了便于熟悉SQL的传统数据库使用者使用Hadoop系统进行数据查询分析,Hive允许直接用类似SQL的HiveQL查询语言作为编程接口编写数据查询分析程序,并提供数据仓库所需要的数据抽取转换、存储管理和查询分析功能,而HiveQL语句在底层实现时被转换为相应的MapReduce程序加以执行。
8.?数据流处理工具Pig
Pig是一个用来处理大规模数据集的平台,由Yahoo!贡献给Apache成为开源项目。它简化了使用Hadoop进行数据分析处理的难度,提供一个面向领域的高层抽象语言Pig Latin,通过该语言,程序员可以将复杂的数据分析任务实现为Pig操作上的数据流脚本,这些脚本最终执行时将被系统自动转换为MapReduce任务链,在Hadoop上加以执行。Yahoo!有大量的MapReduce作业是通过Pig实现的。
9.?键值对数据库系统Cassandra
Cassandra是一套分布式的K-V型的数据库系统,最初由Facebook开发,用于存储邮箱等比较简单的格式化数据,后Facebook将Cassandra贡献出来成为Hadoop开源项目。Cassandra以Amazon专有的完全分布式Dynamo为基础,结合了Google BigTable基于列族(Column Family)的数据模型,提供了一套高度可扩展、最终一致、分布式的结构化键值存储系统。它结合了Dynamo的分布技术和Google的Bigtable数据模型,更好地满足了海量数据存储的需求。同时,Cassandra变更垂直扩展为水平扩展,相比其他典型的键值数据存储模型,Cassandra提供了更为丰富的功能。
10.?日志数据处理系统Chukwa
Chukwa是一个由Yahoo!贡献的开源的数据收集系统,主要用于日志的收集和数据的监控,并与MapReduce协同处理数据。Chukwa是一个基于Hadoop的大规模集群监控系统,继承了Hadoop系统的可靠性,具有良好的适应性和扩展性。它使用HDFS来存储数据,使用MapReduce来处理数据,同时还提供灵活强大的辅助工具用以分析、显示、监视数据结果。
11.?科学计算基础工具库Hama
Hama是一个基于BSP并行计算模型(Bulk Synchronous Parallel,大同步并行模型)的计算框架,主要提供一套支撑框架和工具,支持大规模科学计算或者具有复杂数据关联性的图计算。Hama类似Google公司开发的Pregel,Google利用Pregel来实现图遍历(BFS)、最短路径(SSSP)、PageRank等计算。Hama可以与Hadoop的HDSF进行完美的整合,利用HDFS对需要运行的任务和数据进行持久化存储。由于BSP在并行化计算模型上的灵活性,Hama框架可在大规模科学计算和图计算方面得到较多应用,完成矩阵计算、排序计算、PageRank、BFS等不同的大数据计算和处理任务。
12.?数据分析挖掘工具库Mahout
Mahout来源于Apache Lucene子项目,其主要目标是创建并提供经典的机器学习和数据挖掘并行化算法类库,以便减轻需要使用这些算法进行数据分析挖掘的程序员的编程负担,不需要自己再去实现这些算法。Mahout现在已经包含了聚类、分类、推荐引擎、频繁项集挖掘等广泛使用的机器学习和数据挖掘算法。此外,它还提供了包含数据输入输出工具,以及与其他数据存储管理系统进行数据集成的工具和构架。
13.?关系数据交换工具Sqoop
Sqoop是SQL-to-Hadoop的缩写,是一个在关系数据库与Hadoop平台间进行快速批量数据交换的工具。它可以将一个关系数据库中的数据批量导入Hadoop的HDFS、HBase、Hive中,也可以反过来将Hadoop平台中的数据导入关系数据库中。Sqoop充分利用了Hadoop MapReduce的并行化优点,整个数据交换过程基于MapReduce实现并行化的快速处理。
14.?日志数据收集工具Flume
Flume是由Cloudera开发维护的一个分布式、高可靠、高可用、适合复杂环境下大规模日志数据采集的系统。它将数据从产生、传输、处理、输出的过程抽象为数据流,并允许在数据源中定义数据发送方,从而支持收集基于各种不同传输协议的数据,并提供对日志数据进行简单的数据过滤、格式转换等处理能力。输出时,Flume可支持将日志数据写往用户定制的输出目标。
1.4.4 Hadoop的应用现状和发展趋势
Hadoop因其在大数据处理领域具有广泛的实用性以及良好的易用性,自2007年推出后,很快在工业界得到普及应用,同时得到了学术界的广泛关注和研究。在短短的几年中,Hadoop很快成为到目前为止最为成功、最广泛接受使用的大数据处理主流技术和系统平台,并且成为一种大数据处理事实上的工业标准,得到了工业界大量的进一步开发和改进,并在业界和应用行业尤其是互联网行业得到了广泛的应用。由于在系统性能和功能方面存在不足,Hadoop在发展过程中进行了不断的改进,自2007年推出首个版本以来,目前已经先后推出数十个版本。
但是,由于其最初面向高吞吐率线下批处理的设计目标,以及起初系统构架设计上的诸多先天性的不足,尽管Hadoop开源社区一直致力于不断改进和完善系统,但是Hadoop1.X以前版本一直存在不少广为诟病的缺陷,包括主控节点单点瓶颈易造成系统拥堵和失效,作业执行响应性能较低难以满足高实时低延迟数据查询分析处理需求,固定的Map和Reduce两阶段模型框架难以提供灵活的编程能力、难以支持高效的迭代计算、流式计算、图数据计算等不同的计算和编程模式。
为此,在Hadoop0.20版本推出之后,Hadoop开源社区开始设计全新构架的新一代Hadoop系统,并于2011年10月推出了基于新一代构架的Hadoop0.23.0测试版,该版本后演化为Hadoop2.0版本,即新一代的Hadoop系统YARN。YARN构架将主控节点的资源管理和作业管理功能分离设置,引入了全局资源管理器(Resource Manager)和针对每个作业的应用主控管理器(Application Master),以此减轻原主控节点的负担,并可基于Zookeeper实现资源管理器的失效恢复,以此提高了Hadoop系统的高可用性(High Availability,HA)。YARN还引入了资源容器(Resource Container)的概念,将系统计算资源统一划分和封装为很多资源单元,不再像此前版本那样区分Map和Reduce计算资源,以此提高计算资源的利用率。此外,YARN还能容纳MapReduce以外的其他多种并行计算模型和框架,提高了Hadoop框架并行化编程的灵活性。
与此同时,由于Hadoop系统和框架对于不同大数据计算模式支持能力上的不足,在Hadoop开源社区之外,人们在不断研究推出可支持不同的大数据计算模式的系统。其中,目前最广为关注的当数加州大学伯克利分校AMP实验室(Algorithms,Machines,and People Lab)研究开发的Spark系统,该系统可广泛支持批处理、内存计算、流式计算、迭代计算、图数据计算等众多计算模式。然而,由于Hadoop系统在大规模数据分布存储和批处理能力,以及在系统的可扩展性和易用性上仍然具有不少其他系统所难以具备的优点,并且由于近几年来业界和应用行业在Hadoop开发和应用上已有大量的前期投入和上线应用系统,以及Hadoop所形成的包含各种丰富的工具软件的完整生态环境,同时也随着Hadoop自身向新一代系统的演进和不断改进,在今后相当长一段时间内,Hadoop系统将继续保持其在大数据处理领域的主流技术和平台的地位,同时其他各种新的系统也将逐步与Hadoop系统相互融合和共存。
在开源Hadoop系统发展的同时,工业界也有不少公司基于开源的Hadoop系统进行一系列的商业化版本开发,他们针对开源系统在系统性能优化、系统可用性和可靠性以及系统功能增强方面进行大量的研究和产品开发工作,形成商业化的发行版。最广为大家熟知的是Hadoop系统的创始者组织成立的Cloudera公司,研究开发了Hadoop商业发行版CDH,并在美国诸多的行业得到很好的推广应用。Intel公司自2009年以来也研究开发了Intel发行版Hadoop系统IDH,在中国诸多大型应用行业得到了良好的推广应用,本书第7章将详细介绍Intel Hadoop系统在性能优化和功能增强方面的主要技术内容和使用方法。

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

分享: