基于Hadoop的云平台设计与实现

2016-09-26 11:28秦东霞韦家骥齐迎春
智能计算机与应用 2016年4期

秦东霞 韦家骥 齐迎春

摘 要:Hadoop是一个免费、可靠、高效、可扩展的开源云平台,允许在分布式集群上处理大数据的软件框架。本文以Hadoop为基础,详细介绍了虚拟机VMware、JDK、CentOS、Hadoop等技术。在伪分布式环境下搭建虚拟云平台,经过测试,本系统能正常运行MapReduce化的分布式程序,本文还针对用户权限、路径配置和使用SSH服务程序等问题进行了详细的阐述,为基于Hadoop的云平台研究和应用程序开发提供了基础。

关键词:Hadoop;MapReduce;云平台搭建

中图分类号:TP393 文献标识码:A

Abstract:Hadoop is a free, reliable, efficient and scalable open source cloud platform, which allows the software framework to deal with large data on a distributed cluster. Based on Hadoop, this paper introduces the technology of CentOS, JDK, Hadoop and VMware in virtual machine. Virtual cloud platform is built in the pseudo distributed environment. After testing, the system can run the MapReduce oriented distributed program. This paper also provides a basis for the research of the SSH based cloud platform and application program based on Hadoop.

Key words:Hadoop;MapReduce;Construct the cloud computing platform

0 引言

随着互联网时代信息与数据的飞速增长,科学、工程和商业等研究领域均需要处理大规模以及超大规模的数据, 对计算能力的需求已远远超出自身系统架构的承载运行限度。云计算是分布式计算、并行处理和网格计算的进一步发展,是基于互联网的计算,能够向各种互联网应用提供基础架构服务、硬件服务、软件服务、平台服务、存储服务,这就意味着计算可以作为一种商品实现流通,不仅使用方便,费用也相对低廉[1]。此外,由于传统并行编程模型应用的设计局限,客观上需要一种容易学习、使用和部署的编程框架,而Hadoop就是一个优秀的大数据处理框架,性能表现高效稳定,非常适合选择作为云计算的基础架构。

1相关技术介绍

Hadoop是一个可运行在大量低配硬件设备上的分布式计算框架,并且能为其中的应用程序提供可靠的接口,构建扩展性好、可靠性强、具有良好可移植性的分布式系统[2]。Hadoop云平台主要包括:HDFS分布式文件系统、MapReduce编程模型、HBase数据库和Zookeeper分布式应用程序协调服务。这刚好与Google核心技术GFS、MapReduce和BigTable类似。

1.1分布式文件系统HDFS

Hadoop分布式文件系统可以将信息存储在具有不同节点的设备中。具体由2部分组成,分别是:名称节点NameNode和数据节点DataNode,NameNode相当于管理者,全面管理集群内的DataNode,当用户发送请求信息后,NameNode会根据情况指定存储到哪些DataNode上,而并不存储真实的数据。原理工作流程如图1所示。

HDFS在执行读或写的过程中,NameNode和DataNode通过心跳信息保存通信,确定DataNode不是宕机。如果发现DataNode停止了工作,就将该DataNode上的数据备份到其他节点中,并读取该备份数据,这就是HDFS的容错机制[3]。

1.2 MapReduce 编程模型

MapReduce提供了一个并行处理大数据集的编程模型,由Map和Reduce这2个阶段组成。只需编写map 和reduce 2个函数,即可完成简单的分布式程序的计算。map函数以key/value 对作为输入,产生另外一系列key/value 对作为中间输出写入本地磁盘[4]。MapReduce框架会自动将这些中间数据按照键值进行聚集操作,并且键值相同(可设定聚集方法,默认是对键值进行哈希取模)的数据将统一交送reduce函数进行转换处理。reduce函数以key和其对应的value列表作为输入,经合并value相同的值后,产生另外一系列key/value 对作为最终输出写入文件系统,如图2所示。

1.3 HBase数据库

HBase建立在HDFS上,介于NoSQL和RDBMS之间,仅能通过主键(row key)和主键的range来检索数据,理论上能够处理单行事务,但可通过Hive支持来实现多表join等复杂操作,主要用来存储非结构化和半结构化的数据。与Hadoop一样,HBase主要依靠横向扩展,通过不断增加相对廉价的商用服务器,来提升和改善计算和存储能力[5]。HBase以表的形式存储数据,Hbase表可以有上亿行,上百万列,面向列(族)的存储和权限。表有行和列组成,列划分为若干个列族(row family)控制,对于为空(null)的列,并不占用存储空间。

1.4 Zookeeper的工作机制

ZooKeeper是一个开放源码的分布式应用程序协调服务,其中包含一个简单的原语集。基于此,分布式应用程序可以实现同步服务,配置维护和命名服务等[6]。

Zookeeper是Hadoop的一个子项目。在分布式应用中,由于不能有效地使用锁机制,以及基于消息的协调机制不适合在某些场合中使用,因此需要有一种可靠的、分布式的、可扩展的、可配置的协调机制来统一系统的状态,Zookeeper应运而生。其完整工作机制如图3所示。

2 集群搭建

云平台的搭建是一个复杂的过程,包括虚拟机和操作系统的安装,JDK的安装,设置SSH免密码登录、Hadoop的安装、Zookeeper的安装、HBase的安装、Hadoop文件系统格式化以及集群部件的启动和关闭命令设置等步骤。

2.1 虚拟机、操作系统安装

先安装VMware10.0虚拟机,宿主机是Win8.1系统,由于Hadoop在类Unix系统上才能运行,为此则选择了Linux系统和免费开源版的CentOS6.5版本。

2.2 JDK的安装

安装时,需要下载JDK1.7版本的包,解压到指定目录,同时修改properties文件配置系统环境变量,最后可以执行一次source功能,使得无需再重启机器时环境变量就能生效。

2.3 设置SSH免密码登录

添加一个命名为Hadoop用户,集群运行和通信均使用该用户。如果不进行SSH免密码登录,每次通信都要输入密码,这将是一个灾难性的操作[7]。而后修改hosts的文件,把集群IP地址和主机名对应起来,切换到Hadoop用户,执行ssh-keygen生成公钥与私钥,此处先不相互复制公私,虚拟机设有一克隆命令,把相同的信息都可以克隆出来,为此需要预先完成Hadoop的安装。

2.4 Hadoop的安装

Hadoop的安装分为以下几个步骤:

1)首先配置Master机器,下载Hadoop的安装包,解压到/usr/目录下,文件夹重命名为Hadoop。

2)修改配置文件,首先修改Hadoop-env.sh,添加Hadoop需要的JDK信息,配置JAVA_HOME环境变量、为Hadoop的JVM指定某特征选项、指定日志文件所在的目录路径以及master和slave文件的位置等。

3)修改core-site.xml,定义系统级别的参数,可作用于全部进程及客户端,Hadoop.tmp.dir属性用于定义Hadoop的临时目录,其默认为/tmp/Hadoop-${username}。HDFS进程的许多目录默认均在此目录中。需要注意的是,要保证运行Hadoop进程的用户对其具有全部访问权限。

4)修改hdfs-site.xml文件,对HDFS进行如下参数设置:文件副本的个数、块大小及是否使用、强制权限等,同时将replication 默认值设置为3,如果不修改,datanode少于3台就会报错。

5)修改mapred-site.xml 配置jobTracker的端口。

6)编辑masters文件,masters用于指定辅助名称节点(SecondaryNameNode)的主机名或主机地址,这个文件只需在master主机上实现其编辑[8]。接着克隆另外3台slave,克隆完毕之后,把每个slave关联的主机名修改成相对应的slave,在此还要注意,/etc/下的hosts文件对应的Ip要改成各个节点的Ip地址,并重新生成各个节点的公匙和私匙,再利用scp命令把公匙分发给各个节点。

2.5 Zookeeper的安装

下载Zookeeper-3.4并将其解压到/usr/下,修改权限,动态设定/zookeeper/conf下的zoo.cfg配置文件。将Zookeeper目录分别复制到各个slave中,创建/Hadoop/zookeeper目录,并在该目录下创建myid[6]。

2.6 HBase的安装

下载HBase-0.94.8.tar.gz,并解压到/usr/中,同时使用mv修改其目录名为HBase,修改conf/HBase-env.sh,添加HBase所需要的jdk信息,Hadoop的配置文件路径和Zookeeper的信息[6]。修改HBase-site.xml,把/usr /Hadoop /conf/ hdfs-site.xml文件拷贝至HBase的conf文件夹下,把/usr/zookeeper/conf/zoo.cfg拷贝至/usr /Hadoop /conf/文件夹下,在conf /regionservers中添加所有的datanode节点—所有的slave删除/HBase-0.94.8 /lib/Hadoop-core-1.0.3.ja,拷贝/Hadoop /lib /Hadoop-1.0.3-core.jar到/HBase/lib/。在此基础上,把配置完成的HBase拷贝到其它节点。

2.7 Hadoop文件系统格式化

与普通文件系统一样,HDFS文件系统需要首先格式化,创建元数据数据结构以后才能使用。命令如下:[Hadoop@Master Hadoop]$ bin/Hadoop namenode –format。

2.8 集群各个部件的启动命令

Hadoop的启动命令是/bin/start-all.sh,Zookeeper的启动命令是zkServer.sh start。通过jps命令可以看到,此时多个进程QuorumPeermain;HBase的启动命令是/start-HBase.sh;通过jps命令查看,此时又多了一个进程HMaster。

2.9 集群的关闭命令

关闭集群是有顺序的,关闭HBase后,再关闭Zookeeper,而后则关闭Hadoop。具体地,关闭HBase时,进入bin目录下,执行HBase-stop.sh处理关闭Zookeeper;进入bin目录下,执行zkServer.sh stop操作,关闭Hadoop;进入bin目录下,执行stop-all.sh再测试一次jps,发现只有jps一个进程,这样集群就成功实现了关闭[9]。

3 集群测试

在本地创建2个文件file1.txt,file2.txt,2个文件分别写入一段字符,在HDFS上创建输入文件夹input,上传file1.txt和file2.txt到input文件夹,复制Hadoop中的WordCount实例代码,在eclipse中执行Run on Hadoop命令,运行结果如图4所示。

4结束语

本文介绍了Hadoop的文件系统、编程模型、HBase的安装、Zookeeper的安装以及国内外研究应用情况,其中详细设计了Hadoop集群的搭建过程,包括Hadoop文件系统HDFS、计算框架MapReduce编程、Hadoop生态系统相关组件的安装、运用虚拟机技术在linux操作系统上搭建Hadoop集群等,旨在剖析云计算平台构建可能用到的技术,为企业构建公有云和私有云提供技术参考。当然本系统也有一些不足之处,如集群功能简单等,这些都需要在进化的学习和研究过程中不断深化。

参考文献

[1] Konstantin Shvachko, Hairong Kuang, Sanjay Radia, et al.The Hadoop Distributed File System[Z].Sunnyvale,California USA,IEEE 2010: 1-10.

[2] 夏大文,荣卓波.Hadoop关键技术的研究与应用[J].计算机与现代化,2013(5):138-141,148.

[3]NAMJOSHI J, GUPTE A. Service oriented architecture for cloud based travel reservation software as a service[C]//Proc Of IEEE International Conference on Cloud Computing. New York: IEEEComputer Society Press, 2009: 147-150.

[4] DEAN J, GHEMAWAT S. MapReduce: Simplified data processing on large clusters[C]//Proc. 6Th Symp on Operating System Design and Implementation. New York:ACM Press, 2004: 137-150.

[5] 田秀霞,周耀君,毕忠勤,等.基于Hadoop 架构的分布式计算和存储技术及其应用[J].上海电力学院学报,2011,27(1):70-74.

[6] 崔杰,李陶深,兰红星.基于Hadoop 的海量数据存储平台设计与开发[J].计算机研究与发展,2012,49(Suppl.):12-18.

[7] TAYLOR R C. An overview of the Hadoop /MapReduce /HBase framework and its current applications in bioinformatics [C]//BMC Bioinformatics. Washington: BMC Bioinformatics, 2010:51-57

[8] 周锋,李旭伟.一种改进的MapReduce 并行编程模型[J].科协论坛(下半月),2009(2):65-66.

[9] 胡光民,周亮,柯立新.基于Hadoop的网络日志分析系统研究[J].电脑知识与技术,2010,6(22):6163-6164,6185.