林琳
【摘 要】Hadoop的两大核心是HDFS和YARN。Hadoop是一个软件框架,能够对海量数据进行分布式处理。Hadoop的特点是可靠、高效、可伸缩。
【关键词】Hadoop;HDFS;YARN
0 引言
从诞生至今,Hadoop已经发展成为一个庞大的与大数据相关的软件生态系统。本文收集整理了跟Hadoop相关的Apache下的开源项目,主要是对 Hadoop生态系统有个初步的认识。那么Hadoop生态系统都包括哪些内容呢?
Hadoop生态系统主要包括分布式文件管理系统HDFS,分布式计算框架MapReduce,分布式协作服务Zookeeper,实时分布式数据库Hbase,数据仓库Hive,数据流处理Pig,数据挖掘Mahout,日志收集工具Flume,数据库ETL工具Sqoop,安装、部署、配置和管理工具Ambari。
Ambari(安装、部署、配置和管理工具)
Zookeeper (分布式协作服务)
Hive(数据仓库)
Pig(数据流处理)
Mahout(数据挖掘库)
Flume(日志收集工具)
Hbase(实时分布式数据库)
MapReduce(分布式计算框架)
Sqoop(数据库ETL工具)
HDFS(分布式文件系统)
1 HDFS(Hadoop分布式文件系统)
HDFS全称为Hadoop Distributed File System,这个概念源自于Google发表于2003年10月的GFS论文,HDFS是GFS克隆版,Hadoop和 HDFS 都是从GFS中派生的。
HDFS是一个高度容错的系统,不仅可以在低成本的通用硬件上运行,还能检测和应对硬件故障,是Hadoop数据存储管理的基础。
通过流式数据访问,HDFS提供高吞吐量应用程序数据访问功能,为跨多个机器存储大型文件提供了一种解决方案,适合带有大型数据集的应用程序。
NameNode:是一个Master节点。在Hadoop 1.0中,NameNode是HDFS 集群的一个单点故障。Hadoop 2.0出现后,HDFS利用Zookeeper解决了这个问题。NameNode的主要功能是处理客户端请求,管理HDFS的名称空间和数据块映射信息以及配置副本策略。
Secondary NameNode:Secondary NameNode并非NameNode必备。它只是用来辅助NameNode,分担其工作量的,在某些紧急情况下,可辅助恢复NameNode。
DataNode:DataNode是一个 Slave节点,用来存储数据,汇报存储信息给NameNode。
Client:Client的作用是切分文件和访问HDFS。它与NameNode交互时,能够获取文件位置信息,与DataNode交互,能够读取和写入数据。
2 Mapreduce(分布式计算框架)
MapReduce是一种是使用集群的并行、分布式算法处理大数据集的可编程计算模型,用以解决海量数据的计算问题。在大型集群中能够起到简化数据处理的作用。MapReduce遵循YARN的框架协议,能够在YARN上可以运行。
在MapReduce中,Map负责对数据集上的独立元素进行指定操作,形成中间结果键值对。Reduce负责对中间结果中相同“键”的所有“值”进行规约,得到最终结果。MapReduce这样的功能划分,非常适合在分布式并行环境里进行数据处理。
JobTracker:唯一一个Master节点,管理所有作业和错误处理,将任务分解成一系列子任务,并分派给TaskTracker。
TaskTracker:Slave节点,向JobTracker汇报任务状态。
Map Task:解析每条数据记录,传递给用户编写的map并执行,将输出结果写入本地磁盘。
Reducer Task:从Map Task的执行结果中,远程读取输入数据,对数据进行排序后分组传递给用户编写的reduce函数执行。
3 Hbase(分布式列存数据库)
HBase是一个构建在HDFS上的分布式列存储系统。HBase利用MapReduce来处理海量数据,将数据存储和并行计算完美地结合在一起。Bigtable使用Chubby服务,而HBase利用Zookeeper作为对应。和传统关系数据库不同,HBase采用了BigTable的数据模型,增强的稀疏排序映射表,是一个针对结构化数据的动态模式数据库,具有可伸缩、高可靠、高性能、分布式和面向列的特性。从逻辑上讲,HBase将数据按照表、行和列进行存储。与hadoop一样,Hbase目标主要依靠横向扩展,通过不断增加服务器来增加计算和存储能力。HBase是Hadoop生态系统中的重要一员,主要用于海量结构化数据存储。
HBase提供了对大规模数据的随机、实时读写访问。
Hbase的数据模型
Schema-->Table-->Column
Family-->Column-->RowKey-->TimeStamp-->Value
RowKey:是表中每条记录的“主键”,方便快速查找。
Column Family:列族,包含一个或者多个相关列。
Column:属于某一个columnfamily,每条记录可动态添加。
Version Number:类型为Long,默认值是系统时间戳,可由用户自定义。
Value(Cell):Byte array
4 Zookeeper(分布式协作服务)
Zookeeper是一个针对大型分布式系统的可靠协调系统,用来解决分布式环境下的数据管理问题:如状态同步,集群管理,配置维护、名字服务、分布式同步等。
ZooKeeper能够配置信息维护,包括封装关键服务,提供简单易用的接口和功能稳定的系统。在一个分布式的环境中,我们需要一个 Master 实例或存储一些配置信息,来确保文件写入的一致性等。Zookeeper提供了这样一个高效可靠的协同工作系统。
Zookeeper的作用是,通过选举,使集群中始终只有一个Master存在,实时监控Region server的上线和下线信息。并实时通知给Master。
5 Hive(基于Hadoop的数据仓库)
Hive定义了一种类似SQL的查询语言(HQL),将SQL转化为能在Hadoop上执行的MapReduce任务。通常用于数据汇总,查询和离线分析。最初用于解决日志数据统计问题。
6 Pig(基于Hadoop的数据流系统)
Pig在 Hadoop 分布式文件系统,HDFS,MapReduce中都能够运行,使用 MapReduce来执行数据处理。Pig提供了一个能够在Hadoop并行执行数据流的引擎。Pig 用Pig Latin语言来表达数据流,包括大量的传统数据操作,也可以让用户开发自己的函数,查看,处理和编写数据。也可以编写一个或者多个的 MapReduce 作业,然后执行。
7 Mahout(数据挖掘算法库)
Mahout是一种基于MapReduce的机器学习库和数学库。
Mahout旨在创建一些可扩展的经典算法的实现,能够帮助开发人员更方便快捷地创建智能应用程序。Mahout现在已经包含了聚类、分类、协同过滤和频繁集挖掘等数据挖掘方法。
Mahout起源于2008年,最初是Apache下的一个的子项目,在极短的时间内飞速发展,现在已经是Apache的顶级项目之一。
8 Sqoop(数据同步工具)
Sqoop是SQL-to-Hadoop的缩写,主要用于在传统数据库和Hadoop之间进行数据传输。Sqoop充分利用了Mapreduce的并行化和容错性,来进行数据的导入和导出,通常用于进行离线分析。
9 Flume(日志收集工具)
Flume是一个可扩展、开源的、适合复杂环境的海量日志收集系统。它具有分布式、高可靠、高容错、易扩展的优点。
它将数据从产生、传输、处理并最终写入目标的路径的过程抽象为数据流,Flume支持收集各种不同协议数据。同时提供对日志数据进行简单处理的能力,如过滤、格式转换等。
【参考文献】
[1]陆嘉恒.Hadoop实战[M].机械工业出版社,2011,10.
[2]Tom White.Hadoop:The Definitive Guide[M].东南大学出版社,2011,5.
[责任编辑:田吉捷]