基于Hadoop与Spark的大数据处理平台的构建研究

2018-05-23 10:48
通化师范学院学报 2018年6期
关键词:配置文件命令数据处理

刘 萍

随着2008年9月4日《自然》(Nature)杂志刊登了一个名为“Big Data”的专辑,大数据时代正式宣告到来.现如今,各行各业为了充分利用大数据,需构建分布式大数据处理平台,通过大数据分析结果,驱动决策,给数据密集型企业带来丰厚的利润[1-6].因此构建一个高效的分布式大数据处理平台是大数据研究的基础.下文将结合大数据领域最流行的Hadoop框架和Spark框架来构建高效的大数据处理平台.

1 Hadoop与Spark简介

目前大数据领域最流行的处理平台是Hadoop,它是一个集分布式计算、存储和管理于一体的生态系统,它为大规模并行数据处理算法提供运行环境.Hadoop生态系统的核心是分布式文件系统(Hadoop Distributed File System,简称 HDFS)和MapReduce框架,HDFS为海量数据提供存储,MapReduce框架为海量数据提供并行计算.Ha⁃doop工作原理为:将作业分解成更小的任务,将数据进行分区,每一个任务实例处理一个不同的分区,任务实例并行执行[7].

Hadoop的MapReduce框架有一些局限性,它仅支持Map和Reduce两种操作,处理效率低.Map中间结果写入磁盘,Reduce写入HDFS,多个MapReduce之间通过HDFS交换数据,任务调度和启动开销大,无法充分利用内存.并且Map端和Reduce端均需排序,不适合迭代计算(如机器学习、图计算等)、交互式处理(如数据挖掘)和流式处理(如点击日志分析).

目前流行的Spark[8]是轻量的、基于内存计算的开源集群计算框架.Spark采用了与MapRe⁃duce类似的编程模型,并且支持Java、Scala、Python等多种编程语言.在Spark中,数据被高度抽象且存储在弹性分布式数据集(Resilient Distributed Dataset,简称RDD)中.RDD支持粗粒度写操作,对于读操作,RDD可以精确到每一条记录,这使得RDD可用作分布式索引.在Spark中,所有的操作被称为算子.Spark不仅实现了MapReduce的类Map函数算子和类Reduce函数算子,还提供了更多丰富的算子,如Filter、Join、Groupby等.

Spark是高效、灵活的框架,可同时进行批处理、流式计算、交互式计算,比MapReduce快10~100倍.Spark RDD可以缓存到内存中,每次RDD数据集的操作结果都可以保存至内存,下一个操作可以直接从内存中读取数据,省去了MapRe⁃duce中大量的磁盘I/O操作,明显提升了迭代算法中常见的机器学习和交互式数据挖掘算法的性能.Spark还提供丰富的API,代码量比MapReduce少2~5倍,对编程人员来说易于使用.但Spark本身并没有提供分布式文件系统,因此Spark的分析大多依赖于Hadoop的分布式文件系统HDFS;并且对于外部资源调度,Spark需要使用Hadoop生态系统中的Yarn进行集群资源管理.将基于内存计算的Spark与Hadoop相互结合可提高算法运行效率和处理规模.下文将创建Hadoop集群和Spark集群,来完成大数据处理平台的构建.

2 Hadoop集群与Spark集群搭建

2.1 准备工作

(1)准备Linux操作系统机器若干.可选用Redhat、Ubuntu、CentOS等.如果只有装有Windows的PC机可使用Virtual Box或者VMWare搭建Linux虚拟机.下文将用CentOS 6.5搭建三节点的Hadoop集群,在VMWare上安装三台虚拟机,先装完一台,然后在该虚拟机的基础上克隆出另外两台.若是克隆出来的机器,需要进行网络配置,因为克隆的Linux虚拟机网卡可能无法上网.

(2)同步时间.ping www.baidu.com,若能ping通,运行以下命令,同步时间:

配置时间自动同步,每小时自动去时间服务器上同步时间.如果ping不通,需要修改网络相关配置或暂时使用下面这种方式:在三个节点上分别运行date命令,查看时间是否同步,若还不同步,则在三台虚拟机上运行:date-s‘2017-12-12 09:30:00’,直接指定时间为某个固定值,比如此处是‘2017-12-12 09:30:00’.

(3)配置各虚拟机的主机名.使用命令vi/etc/sysconfig/network,分别设置主master结点,另外两节点为slave01、slave02.然后修改主机名和IP的映射关系.使用ifconfig命令,查看自己的虚拟机的IP是多少,用自己的IP配置与主机名的对应关系,并且三台虚拟机都要配置.

(4)配置集群Hosts.使用命令vi/etc/hosts可以看到本文的master节点的配置,如图1所示.然后通过命令:scp/etc/hosts slave01:/etc/和 scp/etc/hosts slave02:/etc/,让三台虚拟机的 hosts文件保持一致.

图1 master节点的配置

(5)设置SSH免密码登录.设置的目的是:启动Hadoop集群方便,只需设置Master节点到各个Slave节点的免密码登录.在Master节点上,执行命令ssh-keygen-t rsa结束后,生成两个文件id_rsa(私钥)和id_rsa.pub(公钥),将公钥用命令“ssh-copy-id{其他机器的hostname}”拷贝到要免密登录的目标机器上.本文使用以下命令完成免 密 登 录 :ssh-copy-id master;ssh-copy-idslave01;ssh-copy-id slave02.

(6)关闭服务器的防火墙.使用命令service iptables status查看防火墙状态.若防火墙没有关闭,运行命令service iptables stop关闭防火墙,接着运行命令chkconfig iptables off使得防火墙开机不自动启动.最后,再查看一下防火墙状态,应该是:iptables:Firewall is not running.

(7)安装JDK,配置环境变量等.在所有虚拟机上都要安装,因为Hadoop是用Java开发的,Hadoop的编译需要使用JDK.

使用命令mkdir/usr/java创建文件夹,然后将jdk安装包上传至该文件夹中,使用命令tar-xzvf jdk1.7.0_71-C/usr/java解压缩jdk安装包到/usr/java,然后配置环境变量.

2.2 Hadoop集群搭建

Hadoop安装方式主要包括以下三种:

(1)自动安装部署.开源的主要有Apache Ambari,它支持Apache Hadoop集群的管理和监控.以及小米的Minos,Minos使用Python语言开发,用于Hadoop集群的部署和监控.开发用来管理小米公司的Hadoop、HBase、ZooKeeper集群等.而不开源的有:Cloudera Manager、微软的Autopi⁃lot、谷歌的Borg、腾讯公司的Torca等.

(2)使用RPM包安装部署.该方式Apache Hadoop原始版本不提供,而基于原始版实现的发行版HDP和CDH提供.HDP是Hortonworks公司的发行版;CDH是Cloudera公司的Hadoop发行版,在生产环境使用商用公司的开源发行版(HDP或CDH)比较方便,因为它们将Hadoop生态系统中所有软件打包在了一起,用户不会面临版本选择问题,并且拥有完善的文档,有些地方还进行了独特的优化.

(3)使用JAR包安装部署,各版本均提供.使用此方式安装部署比较灵活,对安装部署者要求也比较高,需要很多的配置,适合大数据研究阶段.下文采用Apache Hadoop 2.6.1 JAR包安装部署,如果采用HDP和CDH版本,可仿照操作,安装部署方式一模一样.

因root用户权限过大,误操作容易造成很大损失,Hadoop某些功能不允许在root用户下操作.因此使用非root用户安装Hadoop.下面将详细介绍三节点Hadoop集群如何搭建[9].

(1)将Hadoop安装包上传至虚拟机用户根目录.

(2)进入根目录,使用命令tar-xzvf ha⁃doop-2.6.1.tar.gz解压缩Hadoop安装包.

(3)配置环境变量,使用命令vi~/.bash_pro⁃file,然后在该文件中增加export HADOOP_HOME=/home/zkpk/hadoop-2.6.1,export PATH=$HADOOP_HOME/bin: $HADOOP_HOME/sbin:$PATH,使用命令source~/.bash_profile使配置的环境变量生效.运行Hadoop version命令,显示版本是:Hadoop 2.6.1,证明变量已生效.

(4)修改Hadoop配置文件.配置文件存放在/home/zkpk/hadoop-2.6.1/etc/hadoop路径下,需配置此路径下的六个文件,分别是hadoop-env.sh、core-site.xml、 hdfs-site.xml、 mapred-site.xml、yarn-site.xml和slaves.下面对各配置文件的具体配置作详细介绍.

配置文件hadoop-env.sh.主要是对JA⁃VA_HOME变量进行设置,具体设置如下:export JAVA_HOME=/usr/java/jdk1.7.0_71/.

配置文件core-site.xml,下面的master指的

是主节点的主机名.

配置文件hdfs-site.xml,因当前有两个slave节点,所以,副本数配置成了2.配置文件mapred-site.xml,具体如下所示:

配置文件yarn-site.xml,具体如下所示:

配置slaves,slaves文件里面记录的是集群里所有DataNode的主机名.使用vi slaves命令,具体配置内容为:slave01 slave02.

(5)将master上已经配置完的Hadoop文件夹拷贝到slave01、slave02的用户根目录上.拷贝时,本文的master、slave01、slave02都有用户,叫zkpk,那么,从master拷贝到slave01和slave02时,使用命令:scp-r~/hadoop-2.6.1/slave01:~和scp-r~/hadoop-2.6.1/slave02:~. 若 master 和slave01、slave02的用户名不同,则使用命令:scp-r~/hadoop-2.6.1/zkpk@slave01:~和scp-r~/hadoop-2.6.1/zkpk@slave02:~指定拷贝到zkpk用户,此zkpk是登录slave01、slave02的用户名.

(6)使 用 命 令 :scp ~/.bash_profile zk⁃pk@slave01: ~ 和 scp ~/.bash_profile zk⁃pk@slave02:~将master上的~/.bash_profile文件拷贝到其他两个虚拟机上.使用命令source~/.bash_profile分别在slave01、slave02上使得环境变量生效.

(7)分别在master、slave01、slave02上执行命令mkdir-p/home/zkpk/hadoopdata创建目录.

(8)格式化namenode,在master节点上运行hdfs namenode–format.

(9)启动 Hadoop集群,在 master上运行start-all.sh.

验证Hadoop集群是否搭建成功,可通过以下三种方式:

master上执行:jps命令,会有进程:nameno⁃de、secondarynamenode 和 resourcemanager.slave01,02上执行:jps命令,有进程:datanode和nodemanager,表示Hadoop集群启动成功.

可用浏览器访问master:18088和master:50070检查Yarn和HDFS是否正常,若出现正常界面.说明Hadoop集群启动成功.

执行安装包里的示例程序:

cd hadoop-2.6.1/share/hadoop/mapreduce/hadoop jar hadoop-ma⁃preduce-examples-2.6.1.jar pi 10 10,最后输出:Estimated value of Pi is 3.20000000000000000000

如果以上的3个验证步骤都没有问题,说明集群正常启动.

2.3 Spark集群搭建

(1)上传Spark-1.6.1-bin-hadoop2.6.tgz后解压安装包到Linux上,使用命令tar-zxvf spark-1.6.1-bin-hadoop2.6.tgz-C/home/zkpk解压安装包到指定位置.

(2)使用命令进入Spark安装目录进行配置,用命令cd conf/进入conf目录,使用命令:mv spark-env.sh.template spark-env.sh进行重命名,然后修改文件,用命令:vi spark-env.sh打开配置文件,在该配置文件中添加如下配置,其中master是主节点的主机名.

然后保存退出.接下来重命名并修改slaves.template文件,操作命令如下:

在该文件中添加子节点worker节点所在的位置,本文两个从节点的主机名分别是slave01、slave02,具体配置如下:

卫管专业是建立在专科教育与成人卫生管理教育的基础之上发展起来的新兴的学科,具有蓬勃的生命力。卫管的本科教育在整个江西省卫生管理教育体系中都是居于主体地位和重要地位的。江西省各医药院校可与卫生行政单位、医药相关单位、医药企业等双向合作乃至多平台合作建设“实习基地”。同时卫管专业毕业生也应充分发挥主观能动性,树立良好就业心态,积极投身卫生事业,为国家新医改做出应有的贡献。

slave01

slave02

保存退出.最后将配置好的Spark拷贝到其他节点上,命令如下所示:

scp-r spark-1.6.1-bin-hadoop2.6/zkpk@slave01:~

scp-r spark-1.6.1-bin-hadoop2.6/zkpk@slave02:~

(3)启动Spark集群.

进入/home/zkpk/spark-1.6.1-bin-hadoop2.6/sbin目录,运行:./start-all.sh

分别在三台节点运行jps,分别有进程master,worker,worker.

图2 Spark运行界面

3 验证Hadoop集群和Spark集群

Word Count是大数据编程的入门程序,实现对输入文件中每个单词出现次数的统计,可应用于海量文本的词频检索.实现单词词频统计的Word Count算法[10]是一种典型分组聚集算法.该算法首先将文本分词,形成键值对的中间值,键为单词本身,值为1.然后对数据进行聚集,将具有相同键的值进行加和,输出结果.本文使用Word Count来验证搭建的Hadoop集群和Spark集群是否成功.该算法的数据集节选于网络小说,Spark需要将HDFS上的数据初始化为Spark RDD,然后对RDD中字符串分词,生成新的RDD,将新生成的RDD转化为Key Value RDD进行并行计算,将新生成的Key Value RDD进行规约,然后得出结果.采用Scala语言在Eclipse上实现的具体代码如下:

将该代码打包,在集群上运行.运行过程如下:

①上传本地文件到HDFS目录下,在HDFS上创建输入文件夹.$hadoop fs-mkdir-p word⁃count/input.

②上传本地文件到集群的input目录下,$ha⁃doop fs-put~/file*wordcount/input,查看集群文件目录$hadoop fs-ls wordcount/input.

③Word Count程序打包成后缀名为jar的压缩文件WordCount.jar,进入到压缩文件所在文件夹,这里以一个file输入文件和一个output输出文件夹为例说明.

Spark程序运行如下命令执行.

$spark-submit--master yanr-client--class WordCount~/spark/WordCount.jar,hdfs://master:9000/wordcount/input/file,hdfs://master:9000/wordcount/spark/output

使用如下命令查看运行结果,$hadoop fs-ls wordcount/spark/output.部分结果如图3所示.

图3 部分运行结果

4 总结

Hadoop的MapReduce与Spark都是分布式计算框架,Spark框架在批处理、流式计算、交互式计算等方面相比于Hadoop MapReduce具有优越性,但Spark框架本身并没有提供分布式文件系统,因此Spark的分析依赖于Hadoop中的分布式文件系统HDFS,并且Spark还需要Hadoop生态系统中的Yarn进行资源管理.所以将Hadoop和Spark相结合可以构建高效的大数据处理平台.本文搭建了Hadoop集群和Spark集群,完成了大数据处理平台的构建.最后通过在集群上运行实现单词词频统计的Word Count程序,验证了大数据处理平台搭建的成功.目前高校都在陆续开设大数据专业,本文对初建大数据分析专业具有一定的参考意义,未来将研究大数据分析算法,并在搭建的大数据处理平台上应用相关算法解决实际问题.

[1]何清,李宁,罗文娟.大数据下的机器学习算法综述[J].模式识别与人工智能,2014,27(4):327-336.

[2]梁吉业.大数据挖掘面临的挑战与思考[J].计算机科学,2016,43(7):1-2.

[3]米允龙,米春桥,刘文奇.海量数据挖掘过程相关技术研究进展[J].计算机科学与探索,2015,9(6):641-659.

[4]黄宜华.大数据机器学习系统研究进展[J].大数据,2015,1(1):28-47.

[5]Landset S,Khoshgoftaar T M,Richter A N.A sur⁃vey of open source tools for machine learning with big data in the Hadoop ecosystem[J].Journal of Big Data,2015,2(1):24.

[6]Shan S.Big data classification:problems and chal⁃lenges in network intrusion prediction with machine learning[J].ACM Sigmetrics Performance Evaluation Review,2014,41(4):70-73.

[7]宋杰,孙宗哲,毛克明,等.MapReduce大数据处理平台与算法研究进展[J].软件学报,2017,28(3):514-543.

[8]Zaharia M,Chowdhury M,Franklin MJ,etal.Spark:Cluster computing with working sets[C]//Usenix Confer⁃ence on Hot Topics in Cloud Computing.US ENIX Associa⁃tion,2010.

[9]安建瑞.基于MapReduce的用户移动轨迹序列模式挖掘算法研究[D].山东:山东理工大学,2016.

[10]Issa JA.Performance evaluation and estimation model using regression method for hadoop Word Count[J].IEEE Access,2015,3:2784-2793.

猜你喜欢
配置文件命令数据处理
只听主人的命令
认知诊断缺失数据处理方法的比较:零替换、多重插补与极大似然估计法*
基于低频功率数据处理的负荷分解方法
ILWT-EEMD数据处理的ELM滚动轴承故障诊断
从Windows 10中删除所有网络配置文件
用软件处理Windows沙盒配置文件
安装和启动Docker
互不干涉混用Chromium Edge
基于Zookeeper的配置管理中心设计与实现
移防命令下达后