2.1 Hadoop简介和版本演变
2.1.1 Hadoop简介
Hadoop是Apache软件基金会旗下开源软件,为用户提供高层接口,为用户提供了底层细节透明的分布式基础架构。
Hadoop是基于java语言开发的,具有很好的跨平台性,但是它支持多种语言,包括C、java、Python等。
Hadoop并不是单一的技术,而是多种大数据解决方案的继承体。
Hadoop的两大核心为:分布式文件系统HDFS、MapReduce。
这两大核心共同解决了大数据的两大问题:海量数据的分布式存储、海量数据的分布式处理。
几乎所有主流厂商都围绕Hadoop提供开发工具、开源软件、商业化工具和技术服务,如Google、Baidu、Microsoft、Alibaba、Facebook等。
Hadoop的标志:
2.1.2 Hadoop发展史
- Hadoop最初是由Apache Lucene项目的创始人Doug Cutting开发的文本搜索库。Hadoop源自始于2002年的Apache Nutch项目,即一个开源的网络搜索引擎。
- 在2003年,谷歌发布了分布式文件系统GFS(Google File System)。2004年,Nutch模仿GFS开发了NDFS,也就是HDFS的前身。
- 在2004年,谷歌发布了分布式并行框架MapReduce。2005年,Nutch开源实现了谷歌的MapReduce。
- 到2006年2月,NDFS和MapReduce开始独立,成为Lucene项目的一个子项目,成为Hadoop。
- 在2008年4月,Hadoop打破世界纪录,成为最快排序1TB数据的系统,它采用了一个由910个节点构成的集群进行运算,排序时间只用了209秒。
- 在2009年5月,Hadoop更是把1TB的数据排序时间缩短到62秒。Hadoop从此名声大震,迅速发展成为大数据时代最具影响力的开源分布式开发平台,并成为事实上的大数据处理标准。
2.1.3 Hadoop特性
- 高可靠性
多台机器构成集群,部分机器发生故障,剩余机器可以继续对外提供服务。 - 高效率
将成百上千台机器构成集群进行运算。 - 可扩展性
可以不断向集群中增加机器。 - 高容错性
一部分节点出现问题,其余结点可以继续工作。 - 成本低
在云计算和大数据出现之前,很多大型企业使用高性能计算HPC(High Performance Computing)进行计算,要使用成本高昂的小型机。
但Hadoop可以使用普通PC机构建一个集群。 - 运行在Linux平台上
- 支持多种编程语言
2.1.4 Hadoop的应用现状
Facebook公司采用Hadoop集群用于日志处理、推荐系统和数据仓库等方面。
Hadoop在企业中的应用架构如下图所示:在企业应用中最常见的就是数据分析、数据实时查询、数据挖掘。
在大数据层中,可以使用HDFS分布式文件存储满足企业中海量数据存储的需求。
- 第一类离线分析(将数据进行批量处理),批量处理Hadoop中最方便的就是MR(MapReduce),除了MR外,也可以用Hadoop平台上的Hive和Pig实现离线的数据分析。
- 第二类实时查询,可以使用HBase数据库(支持几十亿行数据存储)。
- 第三类BI分析,可以使用Mahout,包含很多数据挖掘算法的实现。
2.1.5 Hadoop版本演变
不同版本具备的功能存在较大差异。
Apache Hadoop版本分为两代:
从Hadoop1.0到Hadoop2.0:
在1.0版本中,MapReduce要同时负责数据处理、集群资源的调度。要负责的工作过多导致MapReduce效率低下。因此在2.0版本中,将MapReduce承担的任务分解,将其关于资源管理调度的工作单独划分出来,做成一个新的框架YARN,为上层框架提供底层资源,MapReduce只负责数据处理工作。
在2.0版本中,MapReduce是在YARN之上的计算框架,YARN也同时支持其他的计算框架。比如Spark、Storm等。
在2.0版本中,提出了NN Federation(NameNode Federation,其中NameNode是名称结点,负责数据目录服务,外界结点先访问目录服务再取得数据),由于之前HDFS只有一个、扩展性不好,所以2.0中设置多个进行分区管理,形成联邦(Federation)。
同时,在2.0版本中,提出了HA(高可能性)。因为在1.0版本中只有一个NameNode作为目录服务器,一旦它失效,整个服务器都不可用。HA实现了热备份机制,一旦一个失效,就用另一个顶替。
Hadoop有许多版本,很多企业将开源代码进行开发,研究出性能更好的企业版产品。
常见的Hadoop版本如下:
选择Hadoop版本的考虑因素:
- 是否开源(即是否免费)
- 是否有稳定版
- 是否经过实践检验
- 是否有强大社区支持
2.2 Hadoop项目结构
Hadoop的项目结构不断发展,已经形成了一个丰富的Hadoop生态系统。
HDFS负责利用成百上千台计算机进行数据存储。
YARN框架负责资源管理和调度,包括内存、CPU等。
MapReduce负责离线批处理,基于磁盘进行计算。
Tez将多个MapReduce作业进行分析优化后,构成有向无环图,以提高工作效率。
Spark基于内存进行计算,性能比MapReduce高。
Hive是Hadoop上的数据仓库,用于决策分析,支持SQL语句(但实际上Hive会把SQL语句转成MapReduce作业)。
Pig负责流数据处理(轻量级脚本语言),是基于Hadoop的大规模数据分析平台,提供类似SQL的查询语言Pig Latin。
Oozie是Hadoop上的作业流调度系统,用于工作流管理。
Zookeeper提供分布式协调一致性服务,比如集群管理、分布式锁等。
HBase是列族数据库,支持随机读写,实时应用。
Flume负责日志收集分析。
Sqoop用于Hadoop与传统数据库平台之间互导数据。
Ambari是Hadoop部署工具,支持Apache Hadoop集群的供应、管理和监控。
2.3 Hadoop安装
2.1.1 Hadoop安装方式
包括三种方式:
- 单机模式
Hadoop默认模式为非分布式模式(本地模式),无需进行其他配置即可运行。
非分布式即单Java进程,方便进行调试。 - 伪分布式模式
Hadoop可以在单节点上以伪分布式的方式运行,Hadoop进程以分离的Java进程来运行,节点既作为NameNode也作为DataNode。
同时,读取的是HDFS中的文件。 - 分布式模式
使用多个节点构成集群环境来运行Hadoop。
2.1.2 Hadoop安装配置主要步骤
- 创建Hadoop用户
- SSH登录权限设置
- 安装Java环境
- 单机安装配置
- 伪分布式安装配置
2.4 Hadoop集群的部署和使用
2.4.1 Hadoop集群中的节点类型
Hadoop框架中两大核心组件为HDFS、MapReduce。
MapReduce的作业主要包括:
- 从磁盘或从网络读取数据,即I/O密集工作。
- 计算数据,即CPU密集工作。
一个基本的Hadoop集群中的节点主要有:
- NameNode:负责协调集群中的数据存储
- DataNode:存储被拆分的数据块
- JobTracker:协调数据计算任务,协调位于多个不同机器上的TaskTracker共同完成一个作业。
- TaskTracker:负责执行由JobTracker指派的任务,部署在不同的机器上,每一个TaskTracker负责跟踪和执行分配给自己的一小部分作业。
- SecondaryNameNode:帮助NameNode收集文件系统运行的状态信息,是冷备份(一旦NameNode出问题,SecondaryNameNode不能马上顶上来,需要一定的缓冲时间)。
访问数据时,首先访问NameNode获得要访问的数据在哪个DataNode上。(NameNode类似于目录服务器)
2.4.2 集群中硬件配置
集群中大部分的机器设备是作为DataNode和TaskTracker工作的,当然二者可以位于同一机器上。
DataNode/TaskTracker的硬件规格可以采用如下方案:
NameNode像是总管家,提供整个HDFS文件系统的NameSpace(命名空间)管理、块管理等所有服务,因此需要更多的RAM,与集群中的数据块数量相对应,并且需要优化RAM的内存通道带宽,采用双通道或三通道以上内存。
硬件规格可以采用如下配置:
SecondaryNameNode在小型集群中可以和NameNode共用一台机器,较大的集群则需要采用与NameNode相同的硬件。
2.4.3 集群规模大小
集群规模大小需要根据数据量进行设计。
2.4.4 集群网络拓扑
每个机架(Rack)中有30~40个刀片服务器,配置一个1GB的交换机,并向上传输到一个核心交换机或者路由器(1GB或以上)
普通的Hadoop集群结构由一个两阶网络构成。
在相同的机架中的节点间的带宽总和,要大于不同机架间的节点的带宽总和。
2.4.5 集群建立与安装
采购好硬件设备后,即可把硬件装入机架。
安装Hadoop有多种方法,主要包括:
- 手动化安装
- 自动化安装
为了缓解安装和维护每个节点上相同软件的负担,可以使用自动化方法实现完全自动化安装。
2.4.5 Hadoop集群基准测试
2.4.6 在云计算环境中使用Hadoop
Hadoop不仅可以运行在企业内部的集群中,也可以运行在云计算环境中。
比如现在的百度云、阿里云、亚马逊等。