APP下载

基于Spark的云计算平台在实验室的应用与实现

2018-05-15张恬恬孙绍华

软件导刊 2018年4期
关键词:云平台数据处理

张恬恬 孙绍华

摘 要:随着数据挖掘逐渐被应用到金融、娱乐、商业和医疗等多个行业,近年来涌现出各种用于处理海量数据的数据处理引擎,如MapReduce、Spark等。为了使高校实验室更深入地进行数据挖掘领域的理论研究,简要阐述分析了Spark技术及HDFS的概念与基本原理,详细介绍了基于Spark的云计算平台配置方法和实现过程,并对平台搭建过程中遇到的问题进行总结。实验结果证明,该平台能够有效完成分布式数据处理任务。

关键词:Spark;HDFS;云平台;数据处理

DOI:10.11907/rjdk.172906

中图分类号:TP391

文献标识码:A 文章编号:1672-7800(2018)004-0191-03

Abstract:In recent years, a variety of open source data processing engines are emerging such as MapReduce, Spark, etc., which are used to efficiently handle massive amounts of data. In order to offer the laboratory of the university deeper research of the field of data mining, this paper briefly analyzes the concept and basic principle of Spark technology and HDFS, and then introduces configuration method and implementation process of the Spark-based cloud computing platform.The experiments show that the platform can effectively complete the distributed data processing tasks.

Key Words:Spark; HDFS; cloud platform; data processing

1 Spark及分布式系统简介

1.1 Spark技术

Spark是类Hadoop MapReduce的通用数据分析集群计算框架,起源于加利福尼亚大学伯克利分校。为了解决现有Hadoop版本在计算模式、计算性能、处理能力及系统构架上的缺点,大部分计算框架采取各种计算模式与内存计算模式混合,以实现高实时性的大数据查询与计算分析[1],而其中最为完善和流行的便是Spark生态系统。

Spark处理方法一直在行业内被广泛借鉴。弹性分布式数据集(RDD)是Spark使用的主要抽象,其通过内存存储数据,以改善速度和资源问题[2];它能够在不进行复制的情况下提供容错机制,并且支持迭代计算;它支持一组丰富的高级工具,包括用于SQL的Spark SQL结构化数据处理、用于机器学习的MLlib、用于图处理的GraphX和Spark Streaming[3]。因此,Spark更适用于数据挖掘与机器学习等需要迭代的算法。

1.2 分布式系统

Hadoop分布式文件系统(HDFS)是Hadoop集群中所有节点进行数据存储的文件系统,适用于通用硬件及大规模数据集的应用,具有高容错性、高吞吐率、高扩展性和高可靠性等特点[4-7]。

HDFS采用master/slave架构。一个HDFS由一个NameNode(master)和多个DataNode(slave)组成,其中master负责管理文件系统命名空间和Client对文件的访问,slave负责管理所在节点的存储。HDFS对外提供一个文件系统命名空间,允许用户将数据存为文件格式。

2 Spark云平台实现方法

Spark云平台是西安石油大学服务器虚拟出的4个节点,使用内部地址,无密码登录。下面主要介绍在Ubuntu系统下部署Spark云平台的方法,所用操作系统为Ubuntu 14.04.1 LTS,Hadoop[8]版本为2.6.4,Spark版本为1.6.2。

2.1 网络配置

集群中包括1个主节点:tulip01,3个从节点:tulip02、tulip03、tulip04。其中tulip01节点主要配置NameNode和JobTracker角色,负责总管分布式数据并分解任务执行;3个从节点配置DataNode和TaskTracker角色,负责分布式数据存储以及任务执行。

2.2 SSH无密码验证配置

云平台各节点间需要进行数据访问,如果每个节点访问均需要验证,效率将大大降低,所以配置 SSH免密码的方法直接远程连入被访问节点,以提高效率。

(1)确认联网的情况下,在Ubuntu服务器上安装SSH,并验证SSH是否安装成功:

root@tulip01:~# apt-get install ssh

root@tulip01:~# ssh -V

(2)生成密钥:

root@tulip01:~# ssh-keygen -t dsa -P ‘ -f ~/.ssh/id_dsa

(3)生成公私密鑰,主节点执行以下命令:

root@tulip01:~# cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys

从节点将工作节点的密钥发送到主节点,并将密钥添加进公钥中,然后将生成的公钥发送到每个节点上,执行以下命令:

root@tulip02:~#scp /root/.ssh/id_rsa.pub root@tulip01:/root/.ssh/id_rsa.pub.worker

root@tulip01:~# cat ~/.ssh/id_rsa.pub.workerx >> ~/.ssh/authorized_keys

root@tulip01:~# scp ~/.ssh/authorized_keys root@tulip02:~/.ssh/authorized_keys

(4)使子节点通过SSH免密码登录主节点,先将文件复制到从节点与主节点相同的文件夹内,然后用同样方法配置另外两个子节点:

root@tulip01:~# scp authorized_keys tulip02:~/.ssh/

至此,主节点和每个从节点能够相互无密码地验证登录。

2.3 Java环境配置

所有节点上都需安装 JDK,先在主节点安装,然后其它节点按照步骤重复进行即可(注意:安装JDK以及配置环境变量,需要以root身份进行)。

(1)上传并解压JDK安装包,将JDK安装包解压在“/usr/data”文件夹下。

(2)在“/etc/profile”文件下配置环境变量,添加以下内容:

export JAVA_HOME=/usr/data/jdk-8u111-linux-x64

export JRE_HOME=MYMJAVA_HOME/jre

export CLASSPATH=.:MYMJAVA_HOME/lib:MYMJRE_HOME/lib

export PATH=MYMJAVA_HOME/bin:MYMPATH

export HADOOP_HOME=/usr/data/hadoop-2.6.4

export PATH=MYMPATH:MYMHADOOP_HOME/sbin:MYMHADOOP_HOME/bin

2.4 Hadoop集群部署

運行Spark需要用到Hadoop的HDFS作为数据存储设施,所以各个节点都要安装Hadoop。先在主节点上安装,然后其它节点按照相同步骤进行安装配置。下面以root身份安装和配置Hadoop:

(1)上传并解压Hadoop安装包,并在“/usr/data/hadoop-2.6.4”目录下分别创建tmp。dfs/name、dfs/data步骤类似,用于存放命名空间及数据信息,并将所建的文件夹权限分给Hadoop用户。

root@tulip01:~# chown -R hadoop:hadoop /usr/data/hadoop-2.6.4

(2)配置文件hadoop-env.sh和yarn-env.sh,分别添加Java路径信息,注意步骤(2)~(5)所配置的文件均在“/usr/data/hadoop-2.6.4/etc/hadoop/”目录里。

export JAVA_HOME=/usr/data/jdk-8u111-linux-x64

(3)配置文件core-site.xml。将fs.default.name的value值改为hdfs://202.200.84.234:9000,将hadoop.tmp.dir的value值改为file:/usr/data/hadoop-2.6.4//tmp。

(4)配置文件hdfs-site.xml。将dfs.namenode.secondary.http-address的value值改为202.200.84.234:50090。

(5)配置文件 mapred-site.xml ,将mapred.job.tracker的value值改为tulip01:9001。

(6)配置文件yarn-site.xml,将yarn.resourcemanager.hostname的value值改为tulip01,mapred.job.tracker改为202.200.84.234:9001。

(7)在“/usr/data/hadoop/etc/hadoop-2.6.4/slaves”文件下添加从节点信息。

(8)在剩余节点上安装配置Hadoop,拷贝Hadoop安装目录到tulip02节点,并赋予该节点读权限。其它节点作相同操作:

root@tulip01:~# scp -r ./hadoop-2.6.4 tulip02:/usr/

root@tulip01:~# chown - R root:tulio02 /usr/data/hadoop-2.6.4/

(9)启动及验证。首先,格式化HDFS系统,在 master 上使用用户 Hadoop 进行操作:

root@tulip01:~# hdfs namenode -format

然后启动并验证Hadoop,使用jps命令查看进程,若主节点上出现NameNode、SecondaryNameNode、ResourceManager和 Jps,从节点上出现 DataNode、NodeManager 和 Jps 等进程,则表示集群配置成功。

root@tulip01:~# ./sbin/start-dfs.sh

2.5 Spark集群部署

所有节点都要安装Spark,先在主节点上安装,然后其它节点按照相同步骤进行安装配置。下面以root身份安装和配置Spark:

(1)上传并解压Spark安装包。将Spark安装包解压在“/usr/data”文件夹下。

(2)进入Spark的conf中复制模板配置。 注意步骤(2)~(5)所配置文件均在“/usr/data/spark-1.6.2/conf/”目录里。

root@tulip01:~# cp spark-env.sh.template spark-env.sh

(3)修改Spark配置变量。编辑“/etc/profile”文件,将SPARK_MASTER_IP设为tulip01、SPARK_WORKER_MEMORY设为16g、SPARK_WORKER_CORES设为3,然后执行source命令使配置生效。

root@tulip01:~# vim spark-env.sh

(4)添加从节点信息。节点修改信息同Hadoop步骤。

root@tulip01:~# cp slaves.template slaves

(5)修改系统默认配置。修改信息详情如图1所示。

root@tulip01:~#cp spark-defaults.conf.template spark-defaults.conf

root@tulip01:~# vim spark-defaults.conf

(6)将配置好的Spark文件复制到各子节点对应目录,即将Spark下的Spark1.6.2拷贝到tulip01节点的对应目录中。其它节点作相同操作:

root@tulip01:~# scp -r./spark-1.6.2/ tulip01:/usr/

(7)启动及验证。首先,启动并验证Spark,使用jps命令查看进程,若发现主节点上有master进程,从节点上有worker进程,说明Spark集群配置成功。

root@tulip01:~# ./sbin/start-all.sh

然后进行Spark集群监控,通过监控页面http://202.200.84.234:8080/查看,若可以看到1个master节点和3个slave节点,表明Spark集群已经正常运行。

3 Spark云平台测试

Spark集群搭建完成后,通过Spark Shell的交互界面进行交互式编程。通过一个实例对云平台进行测试,即统计HDFS上一个文件README.md中“spark”的出现频率。

在Spark Shell交互界面scala>运行如下代码:

val file=sc.textFile("hdfs://202.200.84.234:9000/usr/data/root/README.md")

val sparks=file.filter(line => line.contains("Spark"))

sparks.count

然后,使用Linux自带的wc命令进行统计:

root@tulip01:~# grep Spark README.md

最后,将Spark Shell下的运行结果与Linux命令执行结果进行对比,若结果相同,则说明Spark云平台搭建成功。

4 结语

Spark云平台目前具备以下优势:①数据存储可靠、安全,能有效避免数据丢失、病毒入侵等问题;②对硬件设施要求不高,使用方便快捷;③计算能力强,不再局限于单机运行,可利用成千上万台计算机和服务器执行超级计算类任务;④存储容量大,具备良好的可扩展性。值得注意的是,目前Spark云平台还有诸多问题有待完善,如脱机问题、故障问题等。下一步工作主要是在Spark云平台下进行相关算法的研究与应用。

参考文献:

[1] MORAIS T S. Survey on frameworks for distributed computing: Hadoop, Spark and storm[C].DSIE'15 Doctoral Symposium in Informatics Engineering.2015.

[2] MENG X, BRADLEY J, YAVUZ B, et al. MLlib: machine learning in apache spark[J]. Journal of Machine Learning Research,2015,17(1):1235-1241.

[3] ZAHARIA M, CHOWDHURY M, FRANKLIN M J, et al. Spark: cluster computing with workingsets[C].Usenix Conference on Hot Topics in Cloud Computing. USENIX Association, 2010:10.

[4] 許吴环,顾潇华.大数据处理平台比较研究[J].软件导刊,2017,16(4):212-214.

[5] 范素娟,田军锋,FANSU-JUAN,等.基于Hadoop的云计算平台研究与实现[J].计算机技术与发展,2016(7):127-132.

[6] 王彦明,奉国和,薛云.近年来Hadoop国外研究综述[J].计算机系统应用,2013,22(6):1-5.

[7] 孟小峰,慈祥.大数据管理:概念、技术与挑战[J].计算机研究与发展,2013,50(1):146-169.

[8] LANDSET S, KHOSHGOFTAAR T M, RICHTER A N, et al. A survey of open source tools for machine learning with big data in the Hadoop ecosystem[J]. Journal of Big Data,2015,2(1):24.

(责任编辑:黄 健)

猜你喜欢

云平台数据处理
认知诊断缺失数据处理方法的比较:零替换、多重插补与极大似然估计法*
ILWT-EEMD数据处理的ELM滚动轴承故障诊断
企业云平台建设研究
MATLAB在化学工程与工艺实验数据处理中的应用
Matlab在密立根油滴实验数据处理中的应用
基于POS AV610与PPP的车辆导航数据处理
依托陆态网的GNSS远程数据处理软件开发