Hadoop大数据开发基础
上QQ阅读APP看书,第一时间看更新

1.1 Hadoop概述

1.1.1 Hadoop简介

随着移动设备的广泛使用和互联网的快速发展,数据的增量和存量快速增加,硬件发展跟不上数据发展,单机设备很多时候已经无法处理庞大的甚至TB、PB级别的数据。如果一头牛拉不动货物,显然找几头牛一起拉会比培育一头更强壮的牛容易。同理,对于单机无法解决的问题,综合利用多个普通机器要比打造一台超级计算机更加可行,这就是Hadoop的设计思想。

Hadoop是一个由Apache基金会所开发的可靠的、可扩展的用于分布式计算的分布式系统基础架构和开发开源软件。Apache Hadoop软件库是一个框架,允许使用简单的编程模型在计算机集群中对大规模数据集进行分布式处理。它的目的是从单一的服务器扩展到成千上万的机器,将集群部署在多台机器中,每台机器提供本地计算和存储,并且将存储的数据备份在多个节点,由此提升集群的可用性,而不是通过硬件提升。当一台机器宕机时,其他节点依然可以提供备份数据和计算服务。

Hadoop框架最核心的设计是HDFS(Hadoop Distributed File System)和MapReduce。HDFS是可扩展、高容错、高性能的分布式文件系统,负责数据的分布式存储和备份,文件写入后只能读取,不能修改。MapReduce是分布式计算框架,包含Map(映射)和Reduce (规约)两个过程。

1.1.2 Hadoop的发展历史

Hadoop是由Apache Lucence创始人Doug Cutting创建的,Lucence是一个应用广泛的文本搜索系统库。Hadoop起源于开源的网络搜索引擎Apache Nutch,它本身也是Lucence项目的一部分。Hadoop的发展历程如图1-1所示。

图1-1 Hadoop发展历程

Nutch项目开始于2002年,当时互联网第一轮泡沫刚刚结束,Doug Cutting与好友Mike Cafarella认为网络搜索引擎由一个互联网公司垄断十分可怕,他们将掌握信息的入口,因此决定自己开发一个可以代替当时主流搜索产品的开源搜索引擎,该项目命名为Nutch。Nutch致力于提供开源搜索引擎所需的全部工具集。但后来,两位开发者发现这一架构的灵活性不够,只能支持几亿数据的抓取、索引和搜索,不足以解决数十亿网页的搜索问题。

2003年,Google发表的论文“The Google File System”为此提供了帮助,文中描述的是谷歌产品架构,该架构被称为“谷歌分布式文件系统”,简称 GFS。Nutch 的开发者们发现GFS架构能够满足网页抓取和搜索过程中生成的超大文件存储需求,特别关键的是, GFS能够节省系统管理所使用的大量时间。于是在2004年,开发者们借鉴谷歌新技术开始进行开源版本的实现,即Nutch分布式文件系统(NDFS)。不同的是,Google用的是C++语言,而Nutch使用Java语言。

2004年,谷歌又发表了论文“MapReduce:Simplifed Data Processing on Large Clusters”,向全世界介绍他们的MapReduce框架。Nutch的开发者们发现Google MapReduce所解决的大规模搜索引擎数据处理问题,又解决了他们当时同样面临并急需解决的问题。Nutch 的开发者们基于Google发布的MapReduce报告,模仿了Google MapReduce框架的设计思路,用Java设计并实现了一套新的MapReduce并行处理软件系统,在Nutch上开发了一个可工作的MapReduce应用。

2005年年初,Nutch的开发人员在Nutch上实现了一个MapReduce算法,半年左右的时间,Nutch的所有主要算法均完成移植,用MapReduce和NDFS来运行。

2006年,Doug Cutting在经过一系列周密考虑和详细总结后,决定加入优秀的公司进一步完善Nutch的性能。IBM却对他的早期项目Lucence更感兴趣,而雅虎则看中Nutch底层NDFS/MapReduce。在2006年2月,开发人员将NDFS和MapReduce移出了Nutch,形成Lucence的子项目,命名为Hadoop,这个名字来源于Doug Cutting儿子的一只玩具象。随后,Doug Cutting几经周折加入了Yahoo公司,雅虎为此组织了一个专门的团队和资源,致力将Hadoop发展成为能够处理海量Web数据的分布式系统。

当加入Yahoo以后,Hadoop项目逐渐发展并迅速成熟起来。首先是集群规模,从最开始几十台机器的规模发展到能支持上千个节点的机器,中间做了很多工程性质的工作,然后是除搜索以外的业务,Yahoo 逐步将自己广告系统的与数据挖掘相关工作也迁移到了Hadoop上,进一步促进了Hadoop系统的成熟与发展。

2007年,纽约时报在100个亚马逊的虚拟机服务器上使用Hadoop转换了4TB的图片数据,更加深了人们对Hadoop的印象。

2008年,一位Google的工程师发现要把当时的Hadoop放到任意一个集群中去运行是一件很困难的事情,所以就拉上了几个好朋友成立了一个专门商业化 Hadoop 的公司Cloudera。同年,Facebook团队发现大多数分析人员编写MapReduce程序时有难度,而对SQL很熟悉,所以他们就在Hadoop之上开发了一个叫作Hive的数据仓库工具,专门把SQL转换为Hadoop的MapReduce程序。

2008年1月,Hadoop已经成为Apache的顶级项目。

2008年4月,Hadoop打破世界纪录,成为最快的TB级数据排序系统。在一个910节点的集群,Hadoop在 209s内完成了对1TB数据的排序,击败了前一年的297s。到2009年5月,有报道称雅虎有一个团队使用Hadoop对1TB数据进行排序只花了62s。

2011年,Yahoo将Hadoop团队独立出来,成立了一个子公司Hortonworks,专门提供Hadoop相关的服务。

2012年,Hortonworks在Hadoop发展上推出了与原框架有很大不同的YARN框架的第一版本,从此对Hadoop的研究又迈进一个新的层面。

2013年,大型IT公司,如EMC、Microsoft、Intel、Teradata、Cisco都明显增加了Hadoop方面的投入,Hortonworks宣传要100%开源软件,Hadoop 2.0转型基本上无可阻挡。

2014年,Hadoop 2.x的更新速度非常快,从2.3.0到2.6.0,极大地完善了YARN框架和整个集群的功能。很多Hadoop的研发公司如Cloudera、Hortonworks都与其他企业合作共同开发Hadoop新功能。

2015年,在Hadoop创新阶段走向错误道路的供应商逐步退出,与其他Hadoop版本发行企业整合,数据的实时访问处理是一个关注的重点。

2016年,Hadoop及其生态圈(包括Spark等)在各行各业落地并且得到广泛的应用, YARN将持续发展以支持更多应用。

1.1.3 Hadoop的特点

Hadoop 是一个能够让用户轻松架构和使用的分布式计算平台。用户可以轻松地在Hadoop上开发和运行处理海量数据的应用程序。其优点主要有以下几个。

(1)高可靠性

数据存储有多个备份,集群设置在不同机器上,可以防止一个节点宕机造成集群损坏。当数据处理请求失败后,Hadoop 会自动重新部署计算任务。Hadoop 框架中有备份机制和检验模式,Hadoop会对出现问题的部分进行修复,也可以通过设置快照的方式在集群出现问题时回到之前的一个时间点。

(2)高扩展性

Hadoop是在可用的计算机集群间分配数据并完成计算任务的。为集群添加新的节点并不复杂,所以集群可以很容易进行节点的扩展,扩大集群。

(3)高效性

Hadoop能够在节点之间动态地移动数据,在数据所在节点进行并发处理,并保证各个节点的动态平衡,因此处理速度非常快。

(4)高容错性

Hadoop的分布式文件系统HDFS在存储文件时会在多个节点或多台机器上存储文件的备份副本,当读取该文档出错或者某一台机器宕机了,系统会调用其他节点上的备份文件,保证程序顺利运行。如果启动的任务失败,Hadoop会重新运行该任务或启用其他任务来完成这个任务没有完成的部分。

(5)低成本

Hadoop是开源的,即不需要支付任何费用即可下载并安装使用,节省了软件购买的成本。

(6)可构建在廉价机器上

Hadoop不要求机器的配置达到极高的水准,大部分普通商用服务器就可以满足要求,它通过提供多个副本和容错机制来提高集群的可靠性。

(7)Hadoop基本框架用Java语言编写

Hadoop 带有用 Java 语言编写的框架,因此运行在 Linux 生产平台上是非常理想的, Hadoop上的应用程序也可以使用其他语言编写,比如C++。