Hadoop和Spark在实验室中部署与性能评估

2015-04-17 12:30薛志云张丹阳曹维焯
实验室研究与探索 2015年11期
关键词:分布式计算PC机公钥

薛志云, 何 军, 张丹阳, 曹维焯

(南京信息工程大学 电子与信息工程学院,江苏 南京 210044)



·计算机技术应用·

Hadoop和Spark在实验室中部署与性能评估

薛志云, 何 军, 张丹阳, 曹维焯

(南京信息工程大学 电子与信息工程学院,江苏 南京 210044)

随着互联网技术的发展,数据量成爆炸性增长趋势,单机难以存储、组织和分析这些海量数据。面对单机难以处理海量数据的现状,建立分布式计算平台对于今后科研工作和实验教学具有重要的意义。就如何在实验室环境下搭建分布式计算平台做了详细说明并对hadoop和spark的性能进行比较,包括Hadoop和Spark集群的安装和部署,Spark集成开发环境的建立,同一组数据集在两个平台上进行Kmeans聚类的时间对比。对于建设分布式计算平台具有一定的指导意义。

大数据; 分布式计算; Hadoop; YARN; Spark

0 引 言

随着计算机技术的发展,互联网已渗透到工作和生活的各个方面,互联网所产生的数据量成爆炸性增长。如何高效地存储、组织和分析这些海量数据成为现今的研究热点。分布式计算概念是将一个大任务分布到大量通过网络连接的计算机集群上,每个计算机处理一个或多个子任务,这些子任务可以同时被处理,共同协作来完成对大任务的计算。分布式计算开发和维护需要考虑的情形非常多变,使得分布式编程相对于传统编程显得更加复杂,分布式框架可以通过封装分布式计算细节来解决这一问题,使得开发效率成倍提高。

Hadoop[1-3]是一种基于MapReduce[4-5]的分布式计算框架,它由MapReduce框架和HDFS文件系统组成。最初的Hadoop版本存在单节点故障问题,直至Hadoop 2.X版本,本平台所用Hadoop版本为Hadoop2.2.0.。Spark[6-7]是用Scala编写、基于RDD弹性分布式内存数据集的分布式计算框架。相较于Hadoop,Spark允许将MapReduce的中间结果存储在内存中,省去大量的磁盘I/O操作,运行效率更高。Spark on YARN(Yet Another Resource Negotiator)模式可以将Spark作业提交到Hadoop集群上,由Hadoop集群对作业进行资源调配。

Hadoop和Spark可被配置在通用硬件上,将实验室中闲置的PC机汇聚起来,形成一个分布式计算集群以便提供高性能的计算和海量数据的存储[8-9]。本文将就如何在实验室环境中搭建分布式计算平台做了详细的说明,包括实验室机器的基本配置和拓扑结构,Hadoop和Spark集群的安装部署以及Spark开发环境的建立。最后以Kmeans[10]为例,将Hadoop和Spark做性能对比。

1 Hadoop安装部署

1.1 安装环境准备

1.1.1 硬件环境

利用实验室机房中闲置的PC机,通过集线器将PC机连接成局域网。本平台先选用4台PC机,由于Hadoop和Spark的可扩展性,可以很方便地添加新的结点到集群中。

每台PC机器装有虚拟机[11-12]并搭载Ubuntu 32 bit操作系统,配有4GB内存和20GB的存储。设置虚拟机的网络连接方式为桥接模式,并给虚拟机设置静态IP,确保虚拟机之间可以相互ping通。这样,就实现了机器之间的互联。选定其中1台PC机作为master(即为namenode),另外3台作为slave(即为datanode)。

为了方便对集群的管理,在每台PC机上建立Hadoop用户,并给Hadoop用户赋予root权限。将有关Hadoop和Spark的操作均放在Hadoop用户下进行。

修改每台机器的主机名,将其主机名依次修改为master、slave1、slave2和slave3。在每台机器用gedit打开/etc/hosts文件,并修改文件内容。

$sudo gedit /etc/hosts

将其内容修改为:

192.168.1.120 master

192.168.1.121 slave1

192.168.1.122 slave2

192.168.1.123 slave3

这样,每个结点就拥有集群中每个结点与其IP对应的映射。

1.1.2 安装JDK

Hadoop是用Java语言开发的分布式计算框架,所以集群中的每个结点需要安装JDK。从官网上下载JDK的ubuntu版本jdk-8u25-linux-i586.tar.gz到桌面上,在/usr/loca/下新建java 文件夹,并将jdk-8u25-linux-i586.tar.gz从桌面复制到java文件夹下,解压缩该文件:

$sudo scp -r jdk-8u25-linux-i586.tar.gz

/usr/local/java/

$sudo tar xzvf jdk-8u25-linux-i586.tar.gz

解压完成后,打开~/.bashrc文件,配置java环境变量:

$sudo gedit ~/.bashrc

在该文档末尾加上如下内容:

export

JAVA_HOME=/usr/local/java/jdk1.8.0_25

export PATH=JAVA_HOME/bin:PATH

运行以下命令使环境变量生效:

$source ~/.bashrc

1.1.3 配置ssh免密码登陆

Hadoop集群在运行时需要通过ssh[13]免密码服务来进行通信。Ubuntu自带ssh客户端,需要自行下载ssh服务器。在连网的情况下,输入如下命令来安装ssh服务器:

$sudo apt-get install openssh-server

$sudo apt-get update

使用ssh登陆到集群的另一结点时需要输入结点的密码,为方便通信避免每次输密码的麻烦,需要配置集群之间ssh免密码登陆。具体操作过程如下:

(1) 生成公钥和私钥。在每个结点输入以下命令,生成公钥和私钥:

$ssh-keygen -t rsa -P ""

提示选择目录时,直接按enter键即可。这样,公钥和私钥直接在~/.ssh/目录下。

(2) 登陆。以master和slave1结点为例,配置master与slave1间免密码登陆,依次进行以下操作。

在master结点操作,将master的公钥拷贝到slave结点上:

$scp id_rsa.pub Hadoop@slave1:~/

在slave结点操作,将拷贝过来的公钥追加到authorized_keys中:

$cat id_rsa.pub >> authorized_keys

(3) 配置slave1。免密码登陆master

在slave结点操作,将slave1的公钥拷贝到master结点上:

$scp id_rsa.pub Hadoop@master:~/

在master结点操作,将拷贝过来的公钥追加到authorized_keys中:

$cat id_rsa.pub >> authorized_keys

用同样的方法可以实现master和集群中其他结点之间的免密码登陆。

1.2 配置Hadoop文件

Hadoop版本比较多,本实验平台采用Hadoop2.2.0,该版本提出了YARN[14]的概念,稳定性较以前也有了提升,并可支持Spark作业。

从Hadoop官网下载Hadoop-2.2.0.tar.gz保存到master结点的桌面上,将其复制到/usr/local/目录下并对其解压缩,执行命令如下:

$sudo scp Hadoop-2.2.0.tar.gz /usr/local

$sudo tar xzvf Hadoop-2.2.0.tar.gz

将解压缩生成的文件重命名为Hadoop:

$sudo mv Hadoop-2.2.0 Hadoop

将Hadoop文件夹的权限赋予Hadoop用户:

Hadoop

下面需要对Hadoop中的文件进行配置,Hadoop2.2.0所需配置的文件都在/usr/local/Hadoop/etc/Hadoop目录下

(1) 配置slaves。打开slaves文件并添加如下内容:slave1,slave2,slave3。

(2) 配置Hadoop-env.sh。修改JAVA_HOME的值:

export

JAVA_HOME=/usr/local/java/jdk1.8.0_25

(3) 配置yarn-env.sh。修改JAVA_HOME的值:

为便于分析,假设储罐内LNG经BOG换热后完全变为饱和态LNG,分析所需要的LNG过冷度。其中,LNG储罐内压力为0.3 MPa,对应饱和温度为-146.6℃。

export

JAVA_HOME=/usr/local/java/jdk1.8.0_25

(4) 修改该目录下的四个.xml文件。其中将mapred-site.xml.template文件另存为mapred-site.xml文件。

打开core-site.xml进行编辑:

打开hdfs-site.xml进行编辑:

打开mapred-site.xml进行编辑:

mapreduce.framework.name

打开yarn-site.xml进行编辑:

yarn.resourcemanager.admin.address

最后,将Hadoop文件通过scp命令发送到各个slave结点。这样,就完成了Hadoop集群的部署。

2 Spark集群搭建

2.1 安装Scala

Spark是由Scala语言开发实现的,需要Scala运行环境的支持。首先将scala-2.10.4.tar.gz下载到master结点桌面上并将其复制到/usr/local/目录下,并对其解压缩:

$sudo scp scala-2.10.4.tar.gz /usr/local/

$sudo tar xzvf scala-2.10.4.tar.gz

解压完成后,打开~/.bashrc文件,配置Scala环境变量,在该文档末尾加上如下内容:

export SCALA_HOME=/usr/local/scala

export PATH=$PATH:$SCALA_HOME/bin

再source一下使环境变量生效,安装scala跟之前安装JDK相类似,这里不做详细阐述。

2.2 配置Spark文件

实验平台选用Spark1.0.0版本,从Spark官网上下载已预先编译好的spark-1.0.0-bin-Hadoop2.tar.gz,按照之前安装Hadoop的步骤将Spark解压缩至/usr/local/目录下:

$sudo scp spark-1.0.0-bin-Hadoop2.tar.gz

/usr/local/

$sudo tar xzvf

spark-1.0.0-bin-Hadoop2.tar.gz

解压缩好Spark之后需要配置Spark的文件,所需配置的文件均在/usr/local/spark/conf目录下。

(1) 配置slaves。打开slaves文件并添加如下内容:slave1,slave2,slave3。

(2) 配置spark-env.sh。将spark-env.sh.template文件另存为spark-env.sh文件,打开spark-env.sh,在文件最顶端输入以下内容:

export

JAVA_HOME=/usr/local/java/jdk1.8.0_25

export SCALA_HOME=/usr/local/scala

export HADOOP_CONF_DIR=

$HADOOP_HOME/etc/Hadoop

export SPARK_MASTER_IP=master

export SPARK_WORKER_MEMORY=2g

Spark在master结点上安装完成之后,通过scp命令将spark发布到各个slave结点,至此Spark集群的安装部署成功。

3 Spark on YARN运行与测试

YARN是第二代MapReduce,主要是为了解决第一代MapReduce扩展性差,不支持多计算框架而被提出,YARN可作为Spark资源调度的管理器。Spark on YARN资源管理调度如图1所示。

图1 Spark on YARN资源管理调度

3.1 启动Hadoop集群

集群安装配置成功之后,首先要格式化HDFS,在master结点的/usr/local/Hadoop目录下输入以下指令:

$bin/Hadoop namenode -format

格式化成功之后,通过Hadoop/sbin目录下的一个脚本start-all.sh来启动Hadoop集群的各个服务功能:

$sbin/start-all.sh

集群启动成功之后,可以通过登录web界面输入:master:8088和master:50070来查看集群启动和运行情况。

3.2 Spark-submit提交作业到YARN

Spark可以单独运行,也可以运行在已有的集群上,如Amazon EC2、Apache Mesos、Hadoop YARN。采用YARN模式运行,其实就是把spark作为一个客户端提交作业给YARN,用YARN来管理作业的资源调度。

Spark中可以通过Spark-submit将作业提交到Hadoop YARN,输入以下指令,运行一个Demo计算π的值:

bin/spark-submit

--class

org.apache.spark.examples.SparkPi

--master yarn-cluster

lib/spark-examples*.jar 2

运行成功之后从Hadoop Web管理界面可以查看到作业被提交到了Haddop平台上,并可查看运行状态和结果。

4 Intellij IDEA集成开发环境

Spark运行环境搭建完成之后,为了方便对Spark应用程序的开发,使用Intellij IDEA来配置Spark开发环境。

4.1 Intellij IDEA的安装

下载ideaIC-13.1.4b.tar.gz,并解压缩到/usr/local/目录下。进入idea/bin目录,在终端输入:./idea.sh打开Intellij IDEA的界面。需要进入Configure-->Plugins-->Install JetBrains plugin页面下载和安装scala插件,安装完成后重启IDEA。至此,IDEA可用于开发Scala程序,IDEA安装成功。

4.2 Spark Kmeans运行

以Kmeans为例来说明spark源码在IDEA中的执行步骤,以后可以在IDEA中开发Spark应用程序。首先新建一个Scala工程,为方便开发,新建时要选择SBT,SBT完成之后会自动建立好一些目录。此时右击src目录下的main下的scala,在弹出的“New”下选择“Scala Class”,输出文件名为Kmeans,Kind选为Object。

将Spark 中Kmeans的源码拷贝到新建的工程中,此时代码中有些变量不被识别,需要导入Spark-Hadoop对应的jar包。点击编译,此时系统会报没有指定master URL等错误。需要配置Kmeans的执行环境,指定运行所需用到的参数。至此,Spark Kmeans运行成功。

5 Spark和Hadoop性能对比

集群搭建成功之后,准备了5组数据集在Hadoop和Spark平台上做Kmeans运算。其中Kmeans在Spark平台上的运行4.2中已做说明。Mahout[15-16]是基于Hadoop Mapreduce 的机器学习算法库,Hadoop Kmeans已在Mahout中实现。将Mahout配置到集群中即可在Hadoop平台上运行Kmeans。由于Mahout配置相对而言比较容易,这里不做详细说明。

实验后分别记下5组数据集在2个平台的运行时间,并通过matlab画出运行时间对比直方图如图2所示。我们可以看出Spark对于处理Kmeans算法的效率比Hadoop快100倍。

图2 Kmeans运行时间对比

6 结 语

该实验平台分别搭建了Hadoop和Spark分布式计算平台,可以被运用于大规模的数据计算。通过分别在两个平台上运行Kmeans算法,我们发现,Spark更适合用于需要迭代的机器学习算法,随着数据集的增大,Spark的优势更加明显。

在今后工作中,可以在了解和掌握Spark编程机制的基础上,在现有的平台上做一些分布式开发,将传统的单机版本的机器学习算法部署到分布式计算平台

上,已解决单机无法承载大数据计算的问题。

[1] 陆嘉恒. Hadoop实战[M].北京:机械工业出版社,2012.

[2] 周 品.Hadoop 云计算实战[M]. 北京:清华大学出版社,2012.

[3] Shvachko Konstantin. The Hadoop distributed file system[C]//Mass Storage Systems and Technologies (MSST),2010,26th Symposium on IEEE:1-10.

[4] Dean J, Ghemawat S. MapReduce: simplified data processing on large clusters[J]. Communications of the ACM, 2008, 51(1):107-113.

[5] Dean J, Ghemawat S. MapReduce: a flexible data processing tool[J]. Communications of the ACM, 2010, 53(1): 72-77.

[6] Karau H. Fast Data Processing With Spark[M].Bermingham:Packt Publishing Ltd, 2013.

[7] Zaharia M, Chowdhury M, Das T,etal. Fast and interactive analytics over Hadoop data with Spark[J]. USENIX; login, 2012, 37(4): 45-51.

[8] 付 伟,严博,吴晓平.云计算实验平台建设关键技术研究[J]. 实验室研究与探索,2013,32(11): 78-81.

[9] 陈慧芬,卢庆武. 云计算在高校机房管理中的应用[J]. 实验室研究与探索,2013,32(7):213-216.

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

[11] 何增颖.虚拟机技术的实验教学应用[J].实验科学与技术,2010,8(1): 80-82.

[12] 郁书好,苏守宝.VMware下的多操作系统实验环境构建[J].实验室研究与探索,2013,32(9):106-108.

[13] OpenSSL官网. http://www.openssh.com/. 2012

[14] 董西成.Hadoop技术内幕:深入解析YARN架构设计与实现原理[M].北京:机械工业出版社,2013.

[15] Owen S,Anil R,Dunning T,etal. Mahout in action[M]. New York: Manning Publications Co,2011.

[16] Giacomelli P. Apache Mahout Cookbook [M].Bermingham:Packt Publishing Ltd, 2013.

The Deployment and Performance Evaluation of Hadoop and Spark in Laboratory Environment

XUEZhi-yun,HEJun,ZHANGDang-yang,CAOWei-zhuo

(School of Electronic and Information Engineering, Nanjing University of Information Science and Technology, Nanjing 210044, China)

With the development of the Internet technology, data volume is streaming. A single machine cannot store, organize and analyze massive data. Facing to the current situation, it is meaningful to build distributed computing platform for further research and experimental teaching. This paper gives a detailed description of the establishment of distributed computing platform and makes a performance comparison between Hadoop and Spark. The comparison focuses on the time consuming, and includes the building of Hadoop and Spark platforms, establishing the Spark development environment, using an identical set of dataset to do Kmeans clustering. It will be helpful for someone who is going to construct distributed computing platform.

distributed computing; Hadoop; YARN; Spark

2015-03-30

国家自然科学基金项目(61203273);江苏省自然科学基金项目(BK20141004);南京信息工程大学大学生实践创新训练计划项目(201410300175)

薛志云(1990-),女,江苏泰州人,硕士生,研究方向为大数据机器学习。E-mail:nuistxzy@163.com

何 军(1978-),男,河南郑州人,博士,讲师,主要从事大数据机器学习和计算机视觉等方面的研究。

E-mail:jhe@nuist.edu.cn

TP 302.1

A

1006-7167(2015)11-0077-05

猜你喜欢
分布式计算PC机公钥
一种基于混沌的公钥加密方案
基于三菱FXPLC的感应淬火机床与PC机的串行通信实现
VC.NET下实现dsPIC单片机与PC机的通信
基于云计算的移动学习平台设计与实现
排除OLT设备登录故障
云计算中MapReduce分布式并行处理框架的研究与搭建
HES:一种更小公钥的同态加密算法
面向异构分布式计算环境的并行任务调度优化方法
SM2椭圆曲线公钥密码算法综述
VIVID3彩色超声仪结构原理及维修