写在前面

前面学习了大数据相关的知识,本篇正式进入Hadoop的学习,里面涉及到的知识较多,需要好好复习。本篇文章主要内容如下:(1)Hadoop概述:介绍Hadoop是什么以及它能干什么;(2)Hadoop优势:与其他大数据框架进行对比学习;(3)Hadoop发展史:介绍Hadoop发行到现在经历的一些过程;(4)Hadoop核心组件:介绍Hadoop核心组件有哪些以及各自用处;(5)Hadoop发行版本选择:介绍Hadoop一些发行版的特点和优缺点,以及在工作中如何选择合适的发行版本;(6)Hadoop生态系统:介绍Hadoop的生态系统中的其他框架,以及它们适合的业务场景;(7)Hadoop企业案例:介绍几个使用Hadoop来实现的企业案例。

Hadoop概述

Hadoop是Hadoop作者孩子的一个棕黄色玩具大象的名字。

Hadoop是一个开源的可靠的(reliable),可扩展的(scalable),分布式计算(distributed computing)框架。

Hadoop是Apache基金会下的一个分布式系统基础架构,主要包括分布式文件系统HDFS(Hadoop Distributed File System)、分布式计算系统MapReduce和分布式资源管理系统YARN。Hadoop使用户可以在不了解分布式系统底层细节的情况下,开发分布式程序并充分利用集群的分布式能力进行运算和存储。以Apache Hadoop为生态圈的框架是目前分析海量数据的首选。

Hadoop优势

Hadoop具有如下优势:
(1)高可靠性。在数据存储方面,数据是存储在HDFS上的,一个文件是以多个数据块方式进行拆分,然后每个数据块以多副本方式存储在集群之上,这样即使某个节点发生异常,也不会造成整个数据块的丢失。

在数据计算方面,即使发生了异常,它可以通过重新调度作业来进行计算。
(2)高扩展性。在存储或者计算资源不够时,可以横向,简单的线性扩展机器,进而提升存储或者计算资源。同时Hadoop支持在一个集群中包含数以千计的节点。
(3)其他方面。Hadoop的存储和计算可以在廉价的机器上进行,极大的降低了公司的成本。同时Hadoop的生态圈较为成熟,里面包括了很多其他框架。

Hadoop发展史

2002年Doug Cutting团队开发了网络搜索引擎Nutch,这就是Hadoop的前身。2003-2004谷歌发布了两篇论文诞生了GFS和MapReduce。其他的信息就不解释,还有一个时间点就是在2016年,Hadoop发布了3.0的版本,这就意味着Hadoop正式进入3.x时代。

Hadoop核心组件

Hadoop框架主要包括三大部分:分布式文件系统HDFS(Hadoop Distributed File System)、分布式计算系统MapReduce和分布式资源管理系统YARN。

分布式文件系统HDFS

分布式文件系统HDFS(Hadoop Distributed File System),源自谷歌于2003年10月发表的GFS论文,因此HDFS是GFS的克隆版。

Hadoop分布式文件系统(HDFS)适用于大数据场景的数据存储,因为HDFS提供了高可靠性(主要通过多副本来实现)、高扩展性(通过添加机器来达到线性扩展)和高吞吐率的数据存储服务。

由于HDFS被设计成可以运行在通用硬件上的分布式文件系统,因此Hadoop集群可以部署在普通的机器上,而不需要价值昂贵的小型机或者工作站中,可大大降低企业的运营成本。

HDFS的基本原理是将数据文件以指定的块大小拆分成数据块,并将数据块以多副本的方式存储到多台机器上,即使某个节点出现故障,导致该节点上存储的数据块副本丢失,但是由于在其他节点还存在对应的数据副本,因此在HDFS中即使某个节点出现问题也不会出现数据丢失的情况,注意这个是有前提的,开发者所搭建的Hadoop集群的副本系数必须大于1。

HDFS将数据文件的切分、容错、负载均衡等功能透明化,也就是用户是感知不到整个上述过程,只知道自己上传了一个文件到HDFS上,而前面所说的数据文件的切分、容错、负载均衡和数据文件存储在哪些机器上用户是不知道的。从某种意义上来说,开发者完全可以将HDFS看做一个容量巨大、具有高容错性的磁盘,在使用的时候当作普通的本地磁盘来使用,所以HDFS非常适合海量数据的可靠性存储。

分布式计算系统MapReduce

MapReduce是一个编程模型,可用于大数据的离线处理计算。其实从MapReduce这个名字中就能知道它包括两大核心操作:Map(映射)和Reduce(归纳)。MapReduce是一种简化应用程序开发的编程模型,允许让没有或者很少并行应用开发经验的人员也可以快速地学会并行应用的开发,而不用去关注并行计算中的一些底层问题,只需按照MapReduce API的编程模型实现相应的业务逻辑的开发即可。

一个MapReduce作业通常会将输入的数据集切分为若干个独立的数据块,然后由map任务以并行方式来处理它们,之后对map的输出先进行排序,然后再将结果输入到reduce任务,由reduce任务来完成最终的统一处理。

通常MapReduce作业的输入和输出都采用Hadoop分布式文件系统(HDFS)进行存储,也就是说MapReduce框架处理数据的输入源和输出目的地场景大部分都是存储在HDFS上的。

在部署Hadoop集群时,通常是将计算节点和存储节点部署在相同的节点上,这样做的好处就是允许计算框架在进行任务调度时,可以将作业优先调度到那些已经存有数据的节点上进行数据的计算,这样整个集群的网络带宽利用率就很高,这就是大数据中常说的一句话:“移动计算而不是移动数据”。

分布式资源管理系统YARN

分布式资源管理系统YARN,是随着Hadoop的不断发展而催生出的新框架,全称是Yet Another Resource Negotiator,它是一个通用资源管理系统,可为运行在YARN之上的分布式应用程序提供统一的资源管理和调度。

YARN的基本思想是将Hadoop1.x中MapReduce架构中的JobTracker的资源管理和作业调度监控功能进行分离,解决了在Hadoop1.x中只能运行MapReduce架构的限制。

YARN的引入为Hadoop集群在利用率、资源统一管理和数据共享等方面带来了很多好处,且在YARN之上还可以运行不同类型的作业,如MapReduce、Spark、Tez等不同的计算框架。

Hadoop发行版本选择

Hadoop的发行版本除了社区维护的Apache Hadoop之外,还有Cloudera、Hortonworks和MapR等公司发行的商业版。每个发行版都有自己的特点,这里对使用较多的CDH和HDP发行版进行简单学习:
(1)Cloudera CDH。Cloudera Distributed Hadoop(CDH)版本的Hadoop是目前国内公司使用最多的。

优点:Cloudera Manager(简称CM)采取小白式安装,配置简单,升级方便,资源分配设置方便,非常利于整合Impala,而且文档较为完善,与Spark的整合也非常友好。通过CM提供的Web页面,开发者就可以完成对Hadoop生态圈中各种环境的安装、配置和升级。

缺点:CM不是开源的,且Hadoop的功能和Apache Hadoop社区版有些出入。
(2)Hortonworks HDP。Hortonworks Data Platform(HDP)版本是原装的Hadoop,纯开源。

优点:版本与Apache Hadoop社区版一致,支持Tez,也集成开源监控方案Ganlia和Nagios。

缺点:安装、升级、添加和删除节点较为麻烦。

Hadoop生态系统

简述

Hadoop现在已经是一个庞大的体系,只要和海量数据相关的,没有哪个领域能缺少Hadoop。

一般来说Hadoop分为狭义和广义的Hadoop。

狭义Hadoop就是指我们前面所提到的一个非常适合大数据分布式存储和分布式计算的平台,包括HDFS、MapReduce和YARN。

而广义的Hadoop是指以Hadoop为基础的生态圈,是一个非常庞大的体系,Hadoop这是其中最重要,最基础的一部分。Hadoop生态圈中的每一个子系统只负责解决某一个特定的问题(甚至更小),它不是一个全能系统,而是多个小而精的系统。

主要构成

下图展示了Hadoop生态圈的主要构成情况:

(1)HDFS。Hadoop分布式文件系统(HDFS)是Hadoop生态圈的基本组成部分。一些常用的大数据处理框架如MapReduce、Spark等,它们所处理的数据源大部分都是存储在HDFS之上,而Hive、HBse等框架的数据通常也是存储在HDFS之上。说白了,HDFS为大数据的存储提供了解决方案。

(2)MapReduce。MapReduce是一个分布式、并行处理的编程模型。开发人员只需编写Hadoop的MapReduce作业就能使用存储在HDFS中的数据来完成相应的数据处理功能。

(3)YARN。YARN是Hadoop2.x之后对Hadoop1.x之前JobTracker和TaskTracker模型进行优化而诞生的框架,它主要负责整个系统的资源管理和调度,且可以在YARN之上运行各种不同类型的执行框架,如MapReduce、Tez和Spark等。

(4)HBase。HBase是一个建立在HDFS之上的面向列的数据库,用于快速读或者写大量数据。HBase使用ZooKeeper进行管理,以确保所有组件都能正常运行。HBase保障查询速度的一个关键因素就是其RowKey设计的是否合理,这一点需要引起格外注意。

(5)ZooKeeper。ZooKeeper是分布式协调服务的框架。Hadoop的许多组件都依赖于ZooKeeper,如HDFS NameNode HA的自动转换、HBase的高可用,以及Spark Standalone模式Master的HA模式都是通过ZooKeeper来实现的。

(6)Hive。Hive可以让不熟悉MapReduce的开发人员,通过编写数据查询语句(SQL)来对大数据进行统计分析操作。Hive的执行原理就是将SQL语句翻译为MapReduce作业,并提交到Hadoop集群上运行。正是由于这一点,使得Hive框架一诞生就受到很多熟悉数据查询语句(SQL)人员的追捧,因为只需写SQL语句,而不需要面向MapReduce编程API进行相应代码的开发,极大的降低了学习的门槛,也提升了开发效率。

(7)Pig。Pig是一个用于并行计算的高级数据流语言和执行框架,有一套和SQL类似的执行语句,处理对象是HDFS上的文件。Pig的数据处理语言采用数据流方式,一步步的进行处理。但是近年来该框架用的并不是很多,因此了解一下即可,不用过多深入学习。

(8)Sqoop。Sqoop是一个用于在关系型数据库、数据仓库(Hive)和Hadoop之间进行数据转移的框架。开发者可以通过Sqoop来完成关系型数据库到HDFS、Hive、HBase等Hadoop生态圈中框架的数据导入导出操作,其实其底层也是通过MapReduce作业来实现的。

(9)Flume。Flume是由Cloudera提供的一个分布式、高可靠、高可用的服务,也是一个用于分布式海量日志的高效收集、聚合、移动/传输的框架。Flume是一个基于流式数据的非常简单的(只需一个配置文件)、灵活的、健壮的、容错的架构。

(10)Oozie。Oozie是一个工作流调度引擎,在Oozie上可以执行MapReduce、Hive和Spark等不同类型的单一或者具有依赖性的作业,这里的依赖性是指后一个作业的执行依赖于前一个或者多个作业的成功执行。开发者可以使用Cloudera Manager中的HUE子项目在页面上对Oozie进行配置和管理。当然除了Oozie,还有Azkaban也是大数据中常用的工作流调度引擎。

(11)Mahout。Mahout是一个机器学习和数据挖掘库,它提供的MapReduce中包含很多实现,如聚类算法、回归测试和统计建模等。

特点

(1)Hadoop源代码开放;
(2)社区活跃、参与者众多;
(3)涉及大数据分布式存储和计算的各个场景;
(4)发展10多年,生态圈成熟,已经达到企业的认可和验证。

Hadoop企业案例

全球最大超市沃尔玛

沃尔玛应用大数据分析

p16