汪瑜斌
(贵州财经大学,贵州 贵阳550004)
众所周知,目前大数据的风浪已经席卷整个计算机行业,像国外的Twitter和新浪微博的网络社交平台上,每天都有数以万计的文字、图片和视频数据量产生。据不完全统计,淘宝网每日新增的交易数据达到10 TB;eBay分析平台每日处理的数据量高达100 PB;Facebook的10亿活跃用户,每天生成的照片冲洗出来堆起来的高度相当于80个埃菲尔铁塔;YouTube网站每分钟大约会有60 h的视频数据[1]。面临如此大的数据量,提高服务器的并行计算性能已成为业界不断探索的重要课题。随着大数据(Big Data)的流行,Hadoop的出现使得在处理上述海量数据成为可能,并能从中得出相应的结论。Hadoop是Lucene创始人Doug Cutting,根据Google的相关内容所研发出来的分布式文件系统和对海量数据进行分析计算的基础与框架系统(MapReduce)。
Hadoop是大家所熟知的一个处理大数据的实用框架,其核心就是:HDFS和 MapReduce[2]。HDFS是一个分布式存储系统,可以为计算提供海量数据的存储,由于其分布式,所以HDFS具有高容错性的特点;而MapReduce的功能是为海量的数据进行相应的计算。Hadoop一开始设计出来只是用来处理数据进行信息检索等一些单一的业务,但是随着大数据的到来,Hadoop还存在响应速度慢和单点故障等缺点,Hadoop高性能服务器集群的实现就是针对上述问题,并基于HDFS和MapReduce这两个文件去配置,从而达到理想的效果。
MapReduce编程框架最早是Google提出来,用于大规模数据集的并行计算。随着MapReduce应用的不断发展和研究的不断深入,Hadoop生态圈也随之不断地扩大,出现了 HBASE、Zookeeper、HIVE、Pig等相关组件。Hadoop是一个能够对大量数据进行分布式处理的软件框架,具有可靠、高效和可伸缩性的特点。其生态系统框架如图1。
图1 Hadoop生态系统框架
图1 描述了Hadoop生态系统框架的各个层次的构成。最底层的是核心组件HDFS和MapReduce,之上的是生态圈的必备组件,包括Hive(数据库)组件、Pig(数据流处理)组件和Mahout(数据挖掘库)组件,两边的组件在现实的生产过程中,服务器集群也是必须要有的。Zookeeper组件可以监视服务器的工作情况,方便运维人员维护服务器。Sqoop是Hadoop生态圈一个重要的组件,它的标准写法是SQL to Hadoop,主要作用是在传统数据库和Hadoop之间进行数据传输,数据库中数据的导入和导出本质上是依赖于MapReduce,充分利用了MR的并行化速度和高容错性。Flume是Hadoop生态圈中的另一个重要的组件,它的主要作用是进行日志收集和汇总,具有分布式、高可靠、高容错和易于定制的特点,它将数据从产生、传输、处理并最终写入目标的路径过程抽象为数据流,在具体的数据流中,数据源支持在Flume中定制数据发送方,从而支持收集各种不同协议数据[3]。最上层就是安装、部署、配置和管理的工具,使其它应用与原始Hadoop框架更好地协调在一起,共同在海量数据的处理上兼容,从而获得更加满意的效果。
对于Hadoop服务器集群的搭建[4]存在多种多样的实现方式,本文采用3节点结构,一个主节点(NameNode)和两个从节点(DataNode)[5],主节点又称为作业节点(jobtracker),负责作业的接收和汇总,从节点又称任务节点(tasktracker),负责任务的分配和执行。在任务节点中,运行第一阶段的代码称为Map任务,运行第二阶段的代码称为Reduce任务[6]。
实验环境统一为Redhat6.2版本的Linux系统,还有 Hadoop-2.2.0版本的tar包和JAVA 的rpm包,在这里主要给出以下几个重要的步骤:
(1)配置在NameNode节点上通过ssh无密码登录另外两个DataNode节点,这样就可以将主节点和从节点连接起来,方便后期的文件复制和服务启动。
(2)配置安装JAVA的JDK在Hadoop环境上,三台机器都要配置才能使后期程序执行不致于出错。
(3)因为在实际的生产工作中,服务器的安全一直是备受关注的,越少人拥有root权限越好,这样才能使得Hadoop服务器相对安全,为此在3台机器上都要创建一个hadoop账户来启动和执行服务。由于root权限很大,在生产工作中一般都使用hadoop账户才不会产生误操作。
由于Hadoop是由HDFS和MapReduce两部分构成,要实现Linux下的Hadoop高性能服务器集群的搭建,需要创建一个hadoop账号,然后在hadoop账号的home目录下的hadoop文件夹中对相关的6个配置文件进行配置。
前面在配置Hadoop集群的时候,已给3台机子都添加了一个名为hadoop_admin的普通用户,因为在安装好hadoop-2.2.0后就可以直接到该用户的/etc/hadoop目录下进行相关配置文件的书写。在该目录下有很多的文件,其中Hadoop高性能的配置,主要是通过对hadoop目录下的yarn-site.sh文件、coresite.xml文件、mapred-site.xml和hdfs-site.xml文件配置来实现的。这四个配置文件主要是通过设置hdfs.replication配置文件块的副本数,Map和Reduce的任务数的配置,通过和硬件的切合来使Hadoop服务器性能达到最优。
其它文件的配置可以根据官方文档的规定进行规范配置即可。另外我们需要提前在目录/hadoop/dfs/下新建name、data和tmp文件夹以供后面文件的配置使用[7]。
(1)对于core-site.xml文件的配置,主要功能是指出hadoop web界面访问路径,这个是hadoop的核心配置文件。在配置该文件过程中,在rhel6-64上,进行配置hadoop的HDFS系统的命名为fs.defaultFSS.name,并设置系统的9000端口来监听并进行操作HDFS系统;hadoop.tmp.directory配置成hadoop的tmp目录的根。具体代码段如图2。
图2 core-site.xml文件配置
(2)接下来配置 HDFS的核心配置文件hdfssite.xml文件[8],在该文件中,dfs.http.address配置成hdfs的http的访问位置为rhel6-64这台机器上,dfs.replication配置了系统文件存储的副本数为2份(原则上不能超过NameNode节点个数);另外配置系统的9001端口来查看HDFS的状态以便及时进行相应的任务操作和发现错误。
(3)Mapred-site.xml文件是 MR 任务的配置文件,因为hadoop2.0版本以后使用的是yarn框架,所以在部署的时候必须在mapreduce.framework.name属性下配置yarn,配置系统rhel6-64的10020端口查看MR的任务数,配置系统rhel6-64的19888端口查看任务状态。
(4)最 后 配 置 yarn-site.xml文 件,该 文 件 是YARN框架的配置文件,主要配置相关任务的启动位置,这样就可以根据其启动位置来进行任务的启动和操作,这些位置都是配置在NameNode机器上的。
本文主要采用RHEL6的Linux系统来实现Hadoop系统,以分布式文件系统和MapReduce并行计算框架为基础,通过配置四个核心配置文件来实现3节点集群的高性能。Hadoop框架的出现为大数据的处理和并行计算的实现提供了基础,正因为HDFS和MR的出现,使得大数据产业蓬勃发展,而实现Hadoop的高性能集群的搭建,正是顺应当下大数据时代的主流。大数据生态系统和Hadoop技术为全球垂直领域的组织提供了一个成熟、稳定和功能丰富的平台来实施复杂的数字化项目[9]。