《Hadoop海量数据处理:技术详解与项目实战(第2版)》一1.1 Hadoop和云计算

本节书摘来异步社区《Hadoop海量数据处理:技术详解与项目实战(第2版)》一书中的第1章,第1.1节,作者: 范东来 责编: 杨海玲,更多章节内容可以访问云栖社区“异步社区”公众号查看。

1.1 Hadoop和云计算

Hadoop从问世之日起,就和云计算有着千丝万缕的联系。本节将在介绍Hadoop的同时,介绍Hadoop和云计算之间的关系,为后面的学习打下基础。

1.1.1 Hadoop的电梯演讲

如果你是一名创业者或者是一名项目经理,那么最好准备一份“电梯演讲”。所谓电梯演讲,是对自己产品的简单介绍,通常都是1~2分钟(电梯从1层~30层的时间),以便如果你恰巧和投资人挤上同一部电梯的时候,能够说服他投资你的项目或者产品。

在做Hadoop的电梯演讲之前,先来恶补一下Hadoop的有关知识。来看看Hadoop的发布者Apache软件基金会(ASF)对Hadoop的定义:Hadoop软件库是一个框架,允许在集群中使用简单的编程模型对大规模数据集进行分布式计算。它被设计为可以从单一服务器扩展到数以千计的本地计算和存储的节点,并且Hadoop会在应用层面监测和处理错误,而不依靠硬件的高可用性,所以Hadoop能够在一个每个节点都有可能出错的集群之上提供一个高可用服务。

从上面的定义可以看出Hadoop的如下几个特点。

1.Hadoop是一个框架
很多初学者在学习Hadoop的时候,对Hadoop的本质并不十分了解,Hadoop其实是由一系列的软件库组成的框架。这些软件库也可称作功能模块,它们各自负责了Hadoop的一部分功能,其中最主要的是Common、HDFS和YARN。HDFS负责数据的存储,YARN负责统一资源调度和管理,Common则提供远程过程调用RPC、序列化机制等。

而从字面来说:Hadoop没有任何实际的意义。Hadoop这个名字不是缩写,它是一个虚构的名字。Hadoop的创建者Doug Cutting这样解释Hadoop这一名称的来历:“这个名字是我的孩子给一头吃饱了的棕黄色大象取的。我的命名标准是简短,容易发音和拼写,没有太多含义,并且不会被用于别处。小孩子是这方面的高手。”所以我们看到这头欢快的大象也随着Hadoop的流行而逐渐深入人心(如图1-1所示)。


《Hadoop海量数据处理:技术详解与项目实战(第2版)》一1.1 Hadoop和云计算_第1张图片

2.Hadoop适合处理大规模数据
这是Hadoop一个非常重要的特点和优点,Hadoop海量数据的处理能力十分可观,并且能够实现分布式存储和分布式计算,有统一的资源管理和调度平台,扩展能力十分优秀。在2008年的时候,Hadoop打破297 s的世界纪录,成为最快的TB级数据排序系统,仅用时209 s。

3.Hadoop被部署在一个集群上
承载Hadoop的物理实体,是一个物理的集群。所谓集群,是一组通过网络互联的计算机,集群里的每一台计算机称作一个节点。Hadoop被部署在集群之上,对外提供服务。当节点数量足够多的时候,故障将成为一种常态而不是异常现象,Hadoop在设计之初就将故障的发生作为常态进行考虑,数据的灾备以及应用的容错对于用户来说都是透明的,用户得到的只是一个提供高可用服务的集群。

了解了上面三点,我们就可以开始准备电梯演讲了。麦肯锡对电梯演讲的要求是“凡事要归纳为三点”,因为人们一般只能记得住一二三而记不住四五六,基于此,我们的Hadoop电梯演讲为“Hadoop是一个提供分布式存储和计算的软件框架,它具有无共享、高可用、弹性可扩展的特点,非常适合处理海量数据”,一共46个字。

1.1.2 Hadoop生态圈

一般来说,狭义的Hadoop仅代表了Common、HDFS、YARN和MapReduce模块。但是开源世界的创造力是无穷的,围绕Hadoop有越来越多的软件蓬勃出现,方兴未艾,构成了一个生机勃勃的Hadoop生态圈。在特定场景下,Hadoop有时也指代Hadoop生态圈。

图1-2所示是一个Hadoop生态圈的架构图。


《Hadoop海量数据处理:技术详解与项目实战(第2版)》一1.1 Hadoop和云计算_第2张图片

Hadoop Common是Hadoop体系最底层的一个模块,为Hadoop各子项目提供各种工具,如系统配置工具Configuration、远程过程调用RPC、序列化机制和日志操作等,是其他模块的基础。
HDFS(Hadoop Distributed File System,Hadoop分布式文件系统)是Hadoop的基石。HDFS是一个具有高度容错性的文件系统,适合部署在廉价的机器上。HDFS能提供高吞吐量的数据访问,非常适合大规模数据集上的应用。
YARN(Yet Another Resource Negotiator,另一种资源协调器)是统一资源管理和调度平台,它解决了上一代Hadoop资源利用率低和不能兼容异构的计算框架等多种问题。它提供了资源隔离方案和双调度器的实现。
MapReduce是一种编程模型,利用函数式编程的思想,将对数据集处理的过程分为Map和Reduce两个阶段。MapReduce的这种编程模型非常适合进行分布式计算。Hadoop提供了MapReduce的计算框架,实现了这种编程模型,用户可以通过Java、C++、Python、PHP等多种语言进行编程。
Spark是加州伯克利大学AMP实验室开发的新一代计算框架,对迭代计算很有优势,和MapReduce计算框架相比性能提升明显,并且都可以与YARN进行集成,Spark也提供支持SQL的组件SparkSQL等。
HBase来源于谷歌的Bigtable论文,HBase是一个分布式的、面向列族的开源数据库。采用了Bigtable的数据模型——列族。HBase擅长大规模数据的随机、实时读写访问。
在所有分布式系统中,都需要考虑一致性的问题,ZooKeeper作为一个分布式的服务框架,基于Fast Paxos算法,解决了分布式系统中一致性的问题。ZooKeeper提供了配置维护、名字服务、分布式同步、组服务等。
Hive最早是由Facebook开发并使用,是基于Hadoop的一个数据仓库 工具,可以将结构化的数据文件映射为一张表,提供简单的SQL查询功能,并将SQL语句转换为MapReduce作业运行。其优点是学习成本低,对于常见的数据分析需求不必开发专门的MapReduce作业,十分适合大规模数据统计分析。Hive对于Hadoop来说是非常重要的模块,大大降低了Hadoop的使用门槛。

Pig和Hive类似,也是对大型数据集进行分析和评估的工具,不过与Hive提供SQL接口不同的是,它提供了一种高层的、面向领域的抽象语言:Pig Latin,Pig也可以将Pig Latin脚本转化为MapReduce作业。与SQL相比,Pig Latin更加灵活,但学习成本稍高。

Impala由Cloudera公司开发,可以对存储在HDFS、HBase的海量数据提供交互式查询的SQL接口。除了和Hive使用相同的统一存储平台,Impala也使用相同的元数据、SQL语法、ODBC驱动程序和用户界面。Impala还提供了一个熟悉的面向批量或实时查询的统一平台。Impala的特点是查询非常迅速,其性能大幅领先于Hive。从图1-2可以看出,Impala并没有基于MapReduce的计算框架,这也是Impala可以大幅领先Hive的原因,Impala的定位是OLAP,是Google的新三驾马车之一Dremel的开源实现。
Mahout是一个机器学习和数据挖掘库,它利用MapReduce编程模型实现了k-means、Native Bayes、Collaborative Filtering等经典的机器学习算法,并使其具有良好的可扩展性。
Flume是Cloudera提供的一个高可用、高可靠、分布式的海量日志采集、聚合和传输系统,Flume支持在日志系统中定制各类数据发送方,用于收集数据;同时,Flume提供对数据进行简单处理,并写到各种数据接受方(可定制)的能力。
Sqoop是SQL to Hadoop的缩写,主要作用在于在结构化的数据存储(关系型数据库)与Hadoop之间进行数据双向交换。也就是说,Sqoop可以将关系型数据库(如MySQL、Oracle等)的数据导入到Hadoop的HDFS、Hive,也可以将HDFS、Hive的数据导出到关系型数据库中。Sqoop充分利用了Hadoop的优点,整个导出导入都是由MapReduce计算框架实现并行化,非常高效。
Kafka是一种高吞吐量的分布式发布订阅消息系统,具有分布式、高可用的特性,在大数据系统里面被广泛使用,如果把大数据平台比作一台机器的话,那么Kafka这种消息中间件就类似于前端总线,它连接了平台里面的各个组件。
说Hadoop催生了一个产业毫不过分,目前围绕Hadoop做二次开发的公司非常多,其中最著名的当属Cloudera、Hortonworks和MapR(Cloudera、Hortonworks和MapR公司的标识如图1-3所示)。这三家公司技术实力都非常雄厚,其中Cloudera开发的CDH(Cloudera’s Distribution for Hadoop)已成为生产环境下装机量最大Hadoop发行版。CDH的特点在于稳定,并有许多重要的补丁、向后移植和更新。而Hontonworks比较有名的则是DAG(有向无环图)计算框架Tez。在一些应用场景中,为了利用MapReduce解决问题,需将问题分解为若干个有依赖关系的作业,形如一个有向无环图,目前MapReduce计算框架并不支持依赖关系为有向无环图的作业计算,而Tez的出现很好地解决了这一问题。另外,YARN这个重要组件也是由Hortonworks公司贡献。MapR公司的拳头产品MapR Converged Data Platform专注于数据的快速分析,Apache Drill也是由MapR主导开发的。


《Hadoop海量数据处理:技术详解与项目实战(第2版)》一1.1 Hadoop和云计算_第3张图片

1.1.3 云计算的定义

云计算自从诞生之日起,短短几年就在各个行业产生了巨大的影响,而Hadoop作为云计算时代最耀眼的明星,又和云计算的提出者Google有着千丝万缕的联系。

自从2006年8月9日Google首席执行官埃里克·施密特在搜索引擎大会(SES San Jose 2006)率先提出了“云计算”这个名词后,其概念众说纷纭,相关领域的各方机构和专家分别从不同的角度对云计算进行了定义,有的从应用场景划分,有的从资源角度划分。本书选取美国国家标准技术研究院(NIST)对云计算的定义:“云计算是一种可以通过网络方便地接入共享资源池,按需获取计算资源(这些资源包括网络、服务器、存储、应用、服务等)的服务模型。共享资源池中的资源可以通过较少的管理代价和简单业务交互过程而快速部署和发布。”

从上面这个定义可以归纳出云计算的5个特点。

(1)按需提供服务:以服务的形式为用户提供应用程序、数据存储、基础设施等资源,并可以根据用户需求自动分配资源,而不需要系统管理员干预。例如,亚马逊弹性计算云(Amazon Elastic Compute Cloud,Amazon EC2),用户可以通过填写Web表单将自己所需要的配置,如CPU核数、内存大小提交给亚马逊,从而动态地获得计算能力。

(2)宽带网络访问:用户可以利用各种终端设备(如PC机、笔记本电脑、智能手机等)随时随地通过互联网访问云计算服务。

(3)资源池化:资源以共享资源池的方式统一管理。利用虚拟化技术,将资源分享给不同用户,资源的放置、管理与分配策略对用户透明。

(4)高可伸缩性:服务的规模可快速伸缩,以自动适应业务负载的动态变化。用户使用的资源同业务的需求相一致,避免了因为服务器性能过载或冗余而导致的服务质量下降或资源浪费。

(5)可量化的服务:云计算中心都可以通过监控软件监控用户的使用情况,并根据资源的使用情况对服务计费。

另外云计算还有些比较明显且重要的特点。

(1)大规模:承载云计算的集群一般都具有超大的规模,Google的有“信息核电站”之称的云计算中心具有100多万台服务器,Amazon、IBM、微软和雅虎等公司的“云”均具有几十万台服务器的规模,从这点上来看,云将赋予用户前所未有的计算能力。

(2)服务极其廉价:“云”的特殊容错机制使得可以采用廉价的节点来构建“云”;“云”的自动化管理使数据中心管理成本大幅降低;“云”的公用性和通用性使资源的利用率大幅提升;“云”设施可以建在电力丰富的地区,从而大幅降低能源成本。因此“云”具有极高的性价比。Google中国区前总裁李开复称,Google每年投入约16亿美元构建云计算数据中心,所获得的能力相当于使用传统技术投入640亿美元,构建云计算数据中心投入成本是使用传统技术投入成本的1/40。根据微软公布的数据,使用微软的云计算平台Windows Azure的解决方案部署自己的Web应用,将会节约三分之一的成本,而成本还将会随着使用时间的延长而进一步降低。这正是为什么不仅CTO关注云计算,连CEO和CFO也对云计算高度关注的原因。

之所以称之为“云”,是因为云计算在某些地方和现实中的云非常符合,云的规模可以动态伸缩,它的边界是模糊的,云在空中飘忽不定,无法也无需确定它的具体位置,但它确实存在于某处。

1.1.4 云计算的类型

云计算按照服务类型大致可以分为基础设施即服务(Infrastructure as a Service,IaaS)、平台即服务(Platform as a Service,PaaS)、软件即服务(Software as a Service,SaaS)3类,如图1-4所示。


《Hadoop海量数据处理:技术详解与项目实战(第2版)》一1.1 Hadoop和云计算_第4张图片


IaaS作为云计算架构最底层,利用虚拟化技术将硬件设备等基础资源封装成服务供用户使用,用户相当于在使用裸机,既可以让它运行Windows,也可以让它运行Linux,既可以做Web服务器,也可以做数据库服务器(架构如图1-5所示),但是用户必须考虑如何才能让多个节点(虚拟机)协同工作起来。IaaS最大的优势在于它允许用户动态申请或释放节点,按使用量和使用时间计费。典型的虚拟化产品包括VMware vShpere、微软的Hyper-V、开源的KVM、开源的Xen。Amazon EC2/S3利用的是Xen这种技术。另外,目前关注度非常高的容器技术Docker也是属于IaaS。


《Hadoop海量数据处理:技术详解与项目实战(第2版)》一1.1 Hadoop和云计算_第5张图片

而PasS对资源进行更进一步的抽象,它提供了用户应用程序的应用环境,典型的如Google App Engine等。Google App Engine使用户可以在Google提供的基础架构上运行、开发、托管自己的应用程序。Google App Engine应用程序易于构建和维护,并可根据用户的访问量和数据存储的增长需求轻松扩展。使用Google App Engine,不再需要维护服务器,只需上传你的应用程序即可。PaaS自身负责资源的动态扩容、容错灾备,用户的应用程序不需过多考虑节点间的配合问题,但与此同时,用户的自主权降低,必须使用特定的编程环境并遵照特定的编程模型,这有点像在高性能集群计算机里进行MPI编程,只适合于解决某些特定的计算问题。例如,Google App Engine只允许使用Python和Java语言,基于Django的Web应用框架,使用Google App Engine SDK来开发在线应用服务。

SaaS的针对性更强,它将某些特定应用软件功能封装成服务,如Salesforce公司提供的在线客户关系管理(Client Relationship Management,CRM)服务。SaaS既不像IaaS一样提供计算或存储资源类型的服务,也不像PaaS一样提供运行用户自定义应用程序的环境,它只提供某些专门用途的服务供应用调用。

通过以上3个层面对云计算的介绍,我们可以看出云计算是集成服务的,图1-6比较清晰地表明云计算和服务集成之间的关系。

需要指出的是,随着云计算的深化发展,不同云计算解决方案之间相互渗透融合,同一种产品往往横跨两种以上的类型。例如,Amazon Web Service(AWS)是以IaaS为基础的,但新提供的弹性MapReduce服务模仿了Google的MapReduce、SimpleDB模仿了Google的Bigtable,这两者属于PaaS的范畴,而它新提供的电子商务服务FPS和DevPay以及网站访问统计服务Alexa Web服务则属于SaaS的范畴。

云计算技术作为IT产业界的一场技术革命,已经成为IT行业未来发展的方向。各国政府也纷纷将云计算服务视为国家软件产业发展的新机遇。需求驱动、技术驱动和政策驱动三大驱动力给云计算的发展提供了极大助力,在国外,由于云计算技术发展较早,有较强的技术基础和运营经验,商业模式也较为清晰,尤其是在美国,Google、Amazon、IBM、微软和Yahoo等都是云计算技术的先行者和佼佼者,众多成功公司还包括Facebook、VMware、Salesforce等。而国内虽然政策力度非常大,资金投入也比较多,但由于起步较晚,技术和商业模式学习欧美,采用复制并本地化的发展路线,因此云计算技术仍属于初级阶段。国内云计算技术走在前列的有华为公司、阿里巴巴集团、百度等,主要以互联网企业巨头和系统集成提供商为主。


《Hadoop海量数据处理:技术详解与项目实战(第2版)》一1.1 Hadoop和云计算_第6张图片

1.1.5 Hadoop和云计算

在谷歌提出“云计算”的概念之前,谷歌工程师在全球顶级计算机会议OSDI和SOSP上连续发表3篇论文:SOSP 2003会议上的The Google File System、OSDI 2004会议上的MapReduce: Simpliyed Data Processing on Large Clusters和OSDI 2006会议上的Bigtable: A Distributed Storage System for Structured Data,在工业界和学术界引起了不小的震动,随后世界上顶级的开源团队(Yahoo、ASF)接手将其实现,可以说Hadoop是云计算的产物,是云计算技术的一种实现。

Hadoop做为一个分布式的软件框架,拥有云计算PaaS层的所有特点,是云计算的重要组成部分。Hadoop的分布式文件系统HDFS抽象了所有硬件资源,使其对于用户来说是透明的,它提供了数据的冗余,自动灾备,也可以动态地增加、减少节点;Hadoop也提供Java、C++、Python等应用程序的运行环境,但如果想基于Hadoop做应用开发,则必须参照MapReduce的编程模型,用户完全不需要考虑各个节点相互之间的配合。另外Hadoop还提供自己独特的数据库服务HBase以及数据仓库服务Hive。Hadoop也可以搭建在IaaS环境下,《纽约时报》使用Hadoop做文字处理就是基于Amazon EC2,当然这不是必须的。

Hadoop可以看做云计算技术的一种实现,而云计算的概念则更广阔,并不拘泥于某种技术。Hadoop作为云计算领域的一颗明星,目前已经得到越来越广泛的应用。

你可能感兴趣的:(《Hadoop海量数据处理:技术详解与项目实战(第2版)》一1.1 Hadoop和云计算)