序
前段时间,公司安排部署CDH4的集群环境,并对集群环境做初步验证,现在把安装部署过程、基准测试报告一一分享出来,并顺便整理下Hadoop的系列知识点,以备后面查阅需要。
在学习Hadoop之前,有必要简单了解一下大数据知识
1. 大数据背景
大数据的产生:众所周知,随着信息社会的快速发展,信息量以爆发式的速度增长,这些信息包括来自互联网的大数据、大量传感器的机器数据、行业的内容数据。这些数据的特征表现为数据量大,一般为TB级或PB级甚至更大。数据类型多,可以是结构化的表单、半结构化的文本、视频、图像、语音、及非结构话的文件。
大数据的挑战:如何对这些数据进行高效存储,如何对这些数据进行分析和处理,以获取更多有价值的信息。大数据系统应运而生。
2. 大数据和大数据系统:
什么是大数据:是由分布存储在集群节点中多个单节点的磁盘空间中,能被进行分布式处理的数据构成的一个数据总体。
大数据的规模可以随点节点数量的不断增加而不断扩大。
大数据系统的设计目标:
可以存储海量数据
可以进行高速处理
可以快速开发出并行服务
可以运行在廉价机器搭建的集群上
3. 当前大数据系统:
Google的三把利剑:GFS+MapReduce模式+BigTable分布式数据库系统
Hadoop的三把利剑:HDFS+MapReduce模式+Hbase分布式数据库系统
什么是Hadoop
Hadoop是一个能够分布式存储大数据,并且能对大数据进行分布式处理的软件框架。主要由HDFS和MapReduce组成。
由Apache基金会所开发,纯Java编写的开源系统。
是N个开源项目的总称,它的项目结构图如下:
Core/Common:为Hadoop其它子项目提供支持的常用工具,包括:FileSystem、RPC、串行化库
Avro:用于数据序列化的系统,提供了丰富的数据结构类型、快速可压缩的二进制数据格式、存储持久性数据的文件集、远程条用RPC的功能等。
HDFS:分布式文件系统,是Google GFS的开源实现
MapReduce:分布式数据处理模型,用于大规模数据的并行运算
Zookeeper:分布式协助服务系统,解决分布式系统中的一致性问题
Hbase:分布式面向列的数据库,类似于Google的BigTable。
Hive:数据仓库工具,提供数据摘要和查询功能
Pig:数据分析平台,在MapReduce上构建的一种脚本开发方式
Chukwa:数据收集系统,用于监控和分析大型分布式系统的数据。
为什么要用Hadoop
Hadood中HDFS的高容错性、高伸缩性,以及可以部署在低廉的计算机集群中,形成分布式系统;Mapreduce分布式编程模型允许用户在不了解分布式系统底层细节的情况下开发并行应用程序。用户可以利用Hadoop轻松地组织计算机资源,搭建自己的分布式计算平台进行海量数据的存储和处理。同时它的开源特性,使其在同类的分布式系统中大放光彩,被众多行业和领域应用。
它主要有以下几个优点:
高可靠性:Hadoop按位存储和处理数据的能力值得人们信赖。
高扩展性:Hadoop是在可用的计算机集簇间分配数据并完成计算任务的,这些集簇可以方便地扩展到数以千计的节点中。
高效性:Hadoop能在各节点之间动态地移动数据,并保证各个节点的动态平衡,因为其处理速度非常快。
高容错性:Hadoop能够保存数据的多个副本,并且能够自动将失败的任务重新分配。
低成本:Hadoop可以运行在廉价服务器上管理海量数据,降低了成本。
Hadoop的核心架构
HDFS的体系架构
HDFS采用主从(Master/Slave)结构模型,一个HDFS集群是由一个Namenode和若干个DataNode组成的(在最新的 Hadoop2.2版本已经实现多个Namenode的配置)。
Namenode作为主服务器,管理文件系统命名空间和客户端对文件的访问操作。DataNode作为从服务器,负责数据的存储。
Namenode执行文件系统的命名空间,如打开、关闭、重命名文件或目录等,也负责数据块到具体DataNode的映射。
Namenode是所有HDFS元数据的管理者,用户数据永远不会经过Namenode。
DataNode负责处理文件系统客户端的文件读写,并在Namenode的统一调度下进行数据库的创建、删除和复制工作。从内部来看,文件被分成若干个数据块,块的大小通常为 64MB,这若干个数据块存放在一组DataNode上。
其架构图如下所示:
图中涉及三个角色:Namenode、DataNode、Client。
Namenode是管理者,DataNode是文件存储者、Client是需要获取分布式文件系统的应用程序。
MapReduce的体系架构
MapReduce框架:
是由一个单独运行在主节点上的JobTracker和运行在每个集群从节点上的TaskTracker共同组成。
JobTracker负责调度和管理TaskTracker。JobTracker将map任务和reduce任务分发给空闲的TaskTracker,这些任务并行运行,并监控任务运行的情况。如果TaskTracker出了故障,JobTracker会把任务转交给另一个空闲的TaskTracker重新运行。
JobTracker可以运行于集群中的任意一台计算机上。
TaskTracker负责执行JobTracker指派的任务。
它运行在DataNode上,DataNode既是数据存储节点,也是计算节点。这种配置的好处在于直接在那些已经存好数据的节点上高效地调度任务,这可以使整个集群的网络带宽被非常高效地利用。
其架构图如下所示:
HDFS和MapReduce(MR)共同组成Hadoop分布式系统体系结构的核心。HDFS在集群上实现了分布式文件系统,MR在集群上实现了分布式计算和任务处理。HDFS在MR任务处理过程中提供了文件操作和存储等支持,MR在HDFS的基础上实现了任务的分发、跟踪、执行等工作,并收集结果,二者相互作用,完成分布式集群的主要任务。
MapReduce编程模型:
利用一个输入的key-value对集合来产生一个输出的key-value对集合。
MR库通过Map和Reduce两个函数来实现这个框架。
用户自定义的map函数:接受一个输入的key-value对,然后产生一个中间的key- value对的集合。MR把所有具有相同的key值的value结合在一起,然后传递给reduce函数。
用户自定义的Reduce 函数:接受key和相关的value集合,reduce函数合并这些value值,形成一个较小的value集合。通常我们通过一个迭代器把中间的 value值提供给reduce函数(迭代器的作用就是收集这些value值),这样就可以处理无法全部放在内存中的大量的value值集合了。
MapReduce的数据模型流程图:
这个过程大致为:将大数据集分解为成百上千个小数据集,每个(若干个)数据集分别由集群中的一个节点(一般是一台普通的计算机)进行处理并生成中间结果,然后这些中间结果又由大量的节点合并,形成最终结果。
一个简单的例子:
输入数据为:one small step for man, one giant leap for mankind
MapReduce过程如下: