概述
Hadoop是Apache软件基金会旗下的一个开源分布式计算平台,以Hadoop分布式文件系统(HDFS)和MapReduce(Google MapReduce的开源实现)为核心的Hadoop为用户提供了系统底层细节透明的分布式基础架构。HDFS的高容错性、高伸缩性等优点允许用户将Hadoop部署在低廉的硬件上,形成分布式系统;MapReduce分布式编程模型允许用户在不了解分布式系统底层细节的情况下开发并行应用程序。所以用户可以利用Hadoop轻松底组织计算机资源,从而搭建自己的分布式计算平台,并且可以充分利用集群的计算和存储能力,完成海量数据的处理。图1展示了Hadoop生态系统包括的内容。
图1 Hadoop生态系统
1.HDFS(Hadoop Distributed File System)
HDFS,即Hadoop分布式文件系统,源自于Google在2013年10月发表的GFS论文,是GFS的克隆版。HDFS是Hadoop体系中数据存储管理的基础,它是一个高度容错的系统,能检测和应对硬件故障,用于在低成本的通用硬件上允许,HDFS简化了文件的一致性模型,通过流式数据访问,提供高吞吐量应用程序数据访问功能,适合带有大型数据集的应用程序。
图2 HDFS体系架构
如图2所示,HDFS采用Master/Slave架构对文件系统进行管理,一个HDFS集群是由一个NameNode和一定数目的DataNode组成的。NameNode是一个中心服务器,负责管理文件系统的名字空间以及客户端对文件的访问。集群中的DataNode一般是一个节点运行一个DataNode进程,负责管理它所在节点上的存储。
2.MapReduce
MapReduce分布式计算框架,是源自于Google在2004年12月发表的MapReduce论文,Hadoop MapReduce是google MapReduce的克隆版。MapReduce是一种计算模型,用于进行大数据量的计算。其中Map对数据集上的独立元素进行指定操作,生成键值对形式中间结果。Reduce则对中间结果中相同键的所有值进行规约,以得到最终结果。MapReduce这样的功能划分非常适合在大量计算机组成的分布式并行环境里进行数据处理。
图3 MapReduce作业执行流程
图3给出了MapReduce作业详细的执行流程图,有运行作业、获取作业ID、复制作业资源、提交作业、初始化作业、获取输入分割、心跳通信、获取作业资源、发布、运行、输出这11个步骤。其中涉及到4个主要的实体:客户端(Client)、JobTracker、TaskTracker、HDFS。客户端负责编写MapReduce代码,配置作业,提交作业;JobTracker负责初始化作业,分配作业,与TaskTracker通信,协调整个作业的执行;TaskTracker保持与JobTracker的通信,在分配的数据片段上执行Map或Reduce任务,需要主要注意的是图3中TaskTracker节点后的省略号表示Hadoop集群中可以包含多个TaskTracker;HDFS保存作业的数据、配置信息等,保存作业结果。
3.Hbase
Hbase分布式列存数据库,源自于Google在2006年11月发表的Bigtable论文。传统的关系型数据库是面向行的数据库。HBase是Google Bigtable克隆版,HBase是一个针对结构化数据的可伸缩、高可靠、高性能、分布式和面向列的动态模式数据库。和传统关系数据库不同,HBase采用了BigTable的数据模型:增强的稀疏排序映射表(Key/Value),其中,键由行关键字、列关键字和时间戳构成。HBase提供了对大规模数据的随机、实时读写访问,同时,HBase中保存的数据可以使用MapReduce来处理,它将数据存储和并行计算完美地结合在一起。
图4 Hbase体系结构
如图4所示,Hbase的服务器体系结构遵从简单的主从服务器架构,它由HRegion服务器群和Hbase Master服务器构成。Hbase Master服务器负责管理所有的HRegion服务器,而Hbase中所有的服务器都是通过ZooKeeper来进行协调并处理Hbase服务器运行期间可能遇到的错误。Hbase Master本身并不存储Hbase中的任何数据,Hbase逻辑上的表可能会被划分成多个HRegion,然后存储到HRegion服务器群中。HBase Master服务器中存储的是从数据到HRegion服务器的映射。
4.Hive
Hive,基于Hadoop的数据仓库,由facebook开源,最初用于解决海量结构化的日志数据统计问题。Hive是一个基于Hadoop文件系统之上的数据仓库框架,提供:数据ETL(抽取、转换、加载)工具、数据存储管理、大型数据集的查询和分析,定义类似sql语言——Hive QL,允许用户进行和sql类似的操作,还允许开发人员方便使用Mapper、Reducer操作。
Hive数据仓库包含四类数据模型:表(Table)、外部表(External Table)、分区(Partition)、桶(Bucket)。表:和数据库表在概念上类似,在Hive中对应着一个存储目录;分区:每个分区都对应数据库中相应分区列的一个索引,hive中每个分区对应表下的一个目录,所有分区的数据都存储在对应的目录中;桶:在对指定列进行哈希计算时,会根据哈希值切分数据,使每个桶对应一个文件;外部表:指向在HDFS中存在的数据,可以创建分区,和表在元数据组织上是相同,但数据存储存在较大差异,差异体现有两点,1)表创建过程和数据加载步奏,数据加载时,实际数据会移动到数据仓库目录中,之后访问直接访问数据仓库目录,删除表时,表中的数据和元数据同时删除。2)外部表的创建只有一个步奏,创建表和加载数据同时完成,实际数据存储在创建语句Location指定的HDFS路径中,不会移动到数据仓库中,删除表时,只删除元数据,不删除表数据。图5展示了Hive的体系结构。
图5 Hive体系结构
如图5所示,用户与Hive的交互方式有三种:命令行接口(CLI)、网络接口(Web UI)以及JDBC接口。
5.Zookeeper
Zookeeper,源自于Google在2006年11月发表的Chubby论文,是Chubby的克隆版。Zookeeper是一个为分布式应用所设计的开源协调服务。它可以为用户提供同步、配置管理、分组和命名等服务。用户可以使用Zookeeper提供的接口方便地实现一致性、组管理、leader选举及某些协议。
Zookeeper提供的命名空间与标准的文件系统非常相似。它的名称是由通过斜线分割的路径名序列所组成。Zookeeper中的每一个节点都是通过路径来识别的。图6展示了Zookeeper的层次命名空间结构。
图6 Zookeeper的层次命名空间
6.Pig
Pig是基于Hadoop的数据流系统,它由yahoo!开源,设计动机是提供一种基于MapReduce的ad-hoc(计算在query时发生)数据分析工具,定义了一种数据流语言——Pig Latin,将脚本转换为MapReduce任务在Hadoop上执行。Pig Latin 包括大量的传统数据操作 (join, sort, filter, etc.), 也可以让用户开发他们自己的函数,用来查看,处理和编写数据。
7.Sqoop
Sqoop是SQL-to-Hadoop的缩写,主要用于传统数据库和Hadoop之间传输数据。数据的导入和导出本质上是MapReduce程序,充分利用了MR的并行化和容错性。其中主要利用的是MR中的Map任务来实现并行导入、导出。
Sqoop1 import原理:从传统数据库获取元数据信息(scheme、table、field、field type),把导入功能转换为只有Map的MapReduce作业,在MapReduce中有很多Map,每个Map读一片数据,进而并行的完成数据的拷贝。
Sqoop1 export原理:获取导出表的schema、meta信息,和Hadoop中的字段匹配;多个Map作业同时运行,完成将HDFS中数据导出到关系型数据库中。
8.Avro
Avro作为Hadoop下相对独立的子项目,是一个数据序列化的系统。类似于其他序列化系统,Avro可以将数据结构或对象转化成便于存储或传输的格式。Avro提供了以下的特性和功能:
1. 丰富的数据结构类型;
2. 快速可压缩的二进制数据形式
3. 存储持久数据的文件容器;
4. 远程过程调用(RPC);
5. 简单的动态语言结合功能。
3258

被折叠的 条评论
为什么被折叠?



