来源:无线互联科技杂志 更新时间:2014-08-04
云计算是当前国内外比较热门的研究课题。Hadoop开源实现了谷歌公司的GFS(Google File System),并且成为云计算平台的标准模型。本文在对Hadoop的核心组件HDFS和子项目HBase、Hive深入分析基础上,基于Hadoop+HBase+Hive搭建起云计算平台,经过实验证明云计算平台具有查询速度快和高容错性等特点。
1.引言
为了解决大数据的存储和分析的问题,云计算的解决方案应运而生。云计算综合了分布式计算、并行计算、网格计算、网络存储技术、虚拟化技术和负载均衡等传统计算机技术。实质上,云计算就是通过虚拟化技术将相应的硬件资源和软件资源构建为虚拟化资源池,通过网络的方式,按照自身需要获取其中的资源,根据实际使用量来付费,并且不用管理他们。当前,云计算平台众多,但大多数是商业平台,而Hadoop是免费的,它开源实现了谷歌公司的GFS(Google File System),采用Java语言编程,具有Java可移植性强等特点,从而为研究云计算提供了平台。
2.Hadoop介绍
Hadoop是Apache的一个开源分布式系统架构,具有低存储成本、高效率、高容错性、高扩展性及高可移植性等主要优点,它可以在大量廉价的普通PC机器上搭建起分布式集群,通过分布式集群来存储和处理海量数据。
Apache Hadoop项目包含许多个子项目,下面我们主要介绍本课题所用到的几个子项目。
2.1 HDFS
HDFS(Hadoop Distributed File Systerm)是Hadoop分布式文件系统,它采用主/从架构,由一个控制节点(Namenode)和多个数据节点(Datanode)组成。其中,控制节点是中心服务器,负责管理文件系统的命名空间以及客户端对文件的操作,同时负责建立数据块和数据节点的映射关系。数据节点负责管理本节点上的存储,响应客户端的读写请求,同时在控制节点的统一指挥下进行数据块的创建、复制和删除。HDFS的工作流程及架构图如图1所示。
图1 HDFS的工作流程及架构图 放大图片
图1 HDFS的工作流程及架构图
在HDFS中,一个大文件其实被分成一个或多个数据块,数据块默认是64MB,存储在数据节点中,每个数据块都有一定数量的备份,备份数是可配置的,默认备份数是3。通过这种方式,来提高数据安全性和可靠性。
2.2 HBase
HBase(Hadoop Database)是Google Bigtable的开源实现,是一个面向列的分布式数据库。HBase就是为存储和快速读取海量数据而专门设计的。利用HBase技术可在廉价的PC服务器上搭建起大规模存储集群。HBase不是传统的关系型数据库,它采用的是基于列存储模式而不是基于行存储模式,基于列存储的好处就是数据库中表的数据按每列存放在物理相邻的存储单元里,查询数据时只查询所在的列,不用把整行数据都读取出来,这样就能极大的降低I/O的开销。
2.3 Hive
Hive是建立在Hadoop基础上的一个数据仓库工具,它将结构化数据文件映射成一张数据表,并提供了类似SQL语句的查询功能,通过类似SQL语句直接编译成MapReduce任务,对于那些不熟悉MapReduce编程模型的用户有很大的帮助。
Hive主要由以下几部分组成:用户接口:Client,CLI和WUI。其中常用的接口是CLI。元数据存储:为了避免多个用户建立不同的元数据,Hive将元数据存储在共享的数据库服务器中,如mysql、derby。元数据包括表名,表的属性,表的列属性,表的数据所在目录等。解释器、编译器、优化器、执行器:前三个器完成类SQL语句从词法分析、语法分析、编译、优化及查询计划的生成。生成的查询计划存储在HDFS中,由执行器调用执行。Hadoop:Hive的数据都存储在HDFS中,大部分查询是由MapReduce完成的。
3.云计算平台的搭建步骤
3.1 硬件和软件配置
云计算平台由一个控制节点(Namenode)和三个数据节点(Datanode)组成,每个节点就是一台普通的PC服务器。所有节点都配置ubuntu10.04版本的Linux操作系统,Hadoop1.0.4的集群框架,JDK1.6.29的JAVA环境。
3.2 Hadoop、HBase、Hive环境配置
配置Hadoop、HBase、Hive环境首先需要配置Hadoop中的几个文件:hadoop-env.sh、hdfs-site.xml、core-site.xml、hbase-env.sh、hbase-site.xml、regionservers 、hive-env.sh、hive-site.xml,具体配置参见文献。
3.3 HBase数据库设计
我们在userinfo表中添加1亿条数据,以便进行下面的性能比较。具体数据库设计如下Userinfo表所示。
Userinfo表
Userinfo表 放大图片
其中,Row Key:行键,表的主键,表默认按行键升序。TimeStamp:时间戳,每次操作数据所记录的时间戳。Coulmn Family:列族,表在水平方向可以有一个或多个列族,一个列族可以由多个列组成,在这里列族只有userinfo,列族下面有四个列id,name,sex,city。
4.云计算平台的优势
4.1 快速查询
我们通过针对1亿数据进行复杂SQL查询,将云计算平台与Oracle进行响应速度比较。查询语句如下:SELECTcity,count(1)from userinfo Where city like‘%南昌%’Group by city Order By count(1) DESC;得出结果是:云计算查询时间仅需92秒,而Oracle查询时间为365秒,足足提高了4倍。
我们再通过单条SQL语句来进行比较。查询语句如下:SELECT*from userinfo Where id=‘123’测试结果是:云计算查询时间仅需0.164秒,而Oracle查询时间为0.796秒,足足提高了5倍。
4.2 高容错性
与传统的关系型数据库不同,云计算平台节点出现宕机、系统崩溃和网络故障都是属于常态的,任何一个节点出现故障都不会中断用户的当前操作,也不会影响数据的完整性。在整个节点正常的情况下,执行select count(1) from userinfo,其结果为220639254 rows。
场景1:先手动拨除主机名为hadoop_2的节点的网线,再执行上述SQL语句,结果为220639254 rows。场景2:查询过程中拨掉节点网线,同样执行上述SQL语句,结果为220639254rows。
手动拨除主机名为hadoop_2的节点的网线,30秒后监控报警提示。重新插上节点的网线,30秒后监控中显示恢复正常。
5.结论
本文基于Hadoop+HBase+Hive分布式技术搭建起云计算平台,云计算平台所有节点都是采用廉价的普通PC机器。整个云计算平台具有低存储成本、高存储效率、易于实现等现实优点。在云计算平台基础之上,我们做了与Oracle数据库查询响应速度比较和云计算平台出现故障两个实验,结果表明,云计算平台在海量数据下查询性能优于Oracle和出现故障能快速自我修复。