周显春 肖衡
摘要摘要:Spark分布式框架具有利用数据集内存缓存、启动任务的低迟延、迭代类运算、实时计算的支持和强大的函数式编程接口等特征。描述Spark 集群环境的搭建过程,将Spark 应用到预测森林植被中,对基于RDD和基于Data Frame接口的Spark随机森林算法的性能差异进行比较。实验结果表明,基于Dataset结构的随机森林法预测效果好、执行时间短,可以广泛使用。
关键词关键词:Spark 2.0;随机森林算法;Dataset;集群环境
DOIDOI:10.11907/rjdk.171184
中图分类号:TP391
文献标识码:A文章编号文章编号:16727800(2017)005014903
0引言
数据爆炸式增长和隐藏在这些数据之后的商业价值催生了一代又一代的大数据处理技术。2004年Hadoop横空出世,由Google公司提出的开源的MapReduces的大数据处理框架拉开了其在企业应用的序幕,它被视为解决高性能处理大数据的有效方案。但是MapReduces框架不仅存在单点故障,而且对实时数据和流式数据访问能力弱,导致基于MapReduces框架的Hadoop平台应用推广受到较大影响。
Apache Spark是另一种分布式、开源计算框架,目的是简化基于计算机集群的并行程序的编写。Spark不仅可以发挥MapReduces对大数据的处理能力[1],还可以充分利用数据集内存缓存、启动任务的低迟延、迭代类运算、实时计算的支持和强大的函数式编程接口[2]。Spark是Apache的顶级开源项目,功能不断完善。现在最新版本为Spark 2.10,它集成了基于RDD和DataFrame(Dataset)两种编程接口。为了简化编程,方便更多人使用,同时进一步提高数据处理速度,Spark 3.0版本会摒弃直接面对用户的基于RDD编程接口。目前,Spark分布式框架在基于机器学习和迭代处理的大数据分析上有广泛应用。
1Spark2.0 基本原理
Spark继承了MapReduces的线性扩张性和容错性,同时对它作了一些重量级扩展,主要包括核心数据结构:RDD(Spark 3.0以后使用Data Frame、Dataset)。
RDD是Spark的核心数据结构,是一种基于内存弹性分布式数据集[3]。利用RDD可以把一部分数据,包括中间结果缓存在内存中,为后续计算所重复利用,不需要像其它计算结构需要反复访问磁盘,节省了大量时间。与Hadoop MapReduce相比,其实验的性能要快100倍,访问磁盘的性能快10倍[4]。基于DataFrames/Dataset的高层API,利用PipeLine可以方便用户构建和调试机器学习流水线,完成高效的数据处理。RDD(DataFrames、Dataset)数据结构解决了MapReduces存在的很多问题。
(1)解决了MapReduces启动迟缓问题[5]。利用Spark采用的有向无环图的任务调度机制,可以对多个Stage的Task进行串联或并联Excutor,无需将每个Stage的中间结果保存到HDFS,不需要访问磁盘,因此可以节省时间。尤其在计算机集群的环境下,可以避免运算时过量的网络和磁盘IO开销。
(2)支持迭代计算。迭代计算需要访问相同的数据集,采用基于内存的RDD/DataFrame/Dataset结构可以避免重新计算和从磁盘加载。
(3)支持实时计算。基于Spark构建Spark Straming 是在Spark基础上的二次开发,主要是将其实时、流水任务离散化成一系列的DStream的数据窗口[6],最小窗口选择只需要0.5~2s,满足大多数的准实时计算场景。
(4)性能优化。Dataset API建立在Spark SQL引擎之上,它可以利用Catalyst来优化逻辑计划和物理查询计划。而且采用特殊的Encoder,不仅可以有效序列化JVM object,还可以直接被Spark的许多操作,如Filter、Sort、Hash等使用,从而提高执行速度。
2Spark2.0在预测森林植被中的应用
目前,Spark支持4种运行模式。本地单机模式、集群模式、基于Mesos、基于YARN、基于EC。本文的Spark分布式集群基于YARN,即Hadoop2。
2.1Spark分布式集群環境搭建
实验环境所需的软硬件设备如下:
软件:操作系统采用Ubuntu Server 16.10 版本,Hadoop 2.7 版本,JDK 1.8 版本,虚拟软件VMware Station Pro 12;硬件:1 台联想台式机,CPU 是主频3.4GHz的Intel的酷睿i7,超频4.2 GHz,硬盘容量1T,内存16GB。
Spark集群环境的搭建过程如下:
(1) 安装3台虚拟机,OS版本ubuntu server 16.10 版本,并通过Hostname、Interfaces、Hosts文件分别设置主机名(Master、Slave1、Slave2)、IP地址,以及DNS映射关系,执行sudo ufw disable、Ping分别关闭防火墙以及检验3台虚拟机互通无阻。
(2)在每台虚拟机上安装JDK、Scala、Hadoop、Spark并配置相关的Java环境变量。
(3)在每台机器上执行安装openssh-server服务,执行ssh-keygen生成SSH 密钥文件,保证相互直接建立不需要密码的SSH可信通道。
(4)修改Spark目录下conf/core-site.xml、mapred -site.xml、 yarn-site.xml、hdfs-site.xml、hdfs-env.sh、masters、slaves文件,确保能够正常启动Spark。
2.2随机森林算法预测森林植被实现
在Spark机器学习中,用于分类的算法有很多,其中效果较好的有SVM和随机森林算法。随机森林(Random Forest,RF)是由 Leo Breiman 将 Bagging 集成学习理论[7]与随机子空间方法[8]相结合,于2001年提出的一种机器学习算法[9]。RF利用Bootstrap重抽样方法从原始样本中多次随机抽取不同特征的子集数据组成训练样本,构建多棵、合理、独立的子树,然后融合多棵决策树的预测结果。在大数据背景下,RF不仅能够与Spark和Map Reduce的并行处理特征完美结合,预测效果好,而且基于Dataset 的执行时间要比基于RDD的少。
为了更加深入地了解RF性能,尤其是测试效果,需要在实践中进行检验。本实验数据采用Kaggle大赛的数据Forestcover-Type-Prediction,记录了美国科罗拉多州不同地块森林植被特征:海拔、坡度、与水源的距离、遮阳情况和土壤类型,并给出了地块的已知森林植被类型,共54特征,有581012个样本[10]。本实验主要比较基于RDD和基于Data Frame[Row]/Dataset API接口的Spark随机森林算法的性能差异。关键代码及参数如下:
2.3性能分析
通过对决策树、随机森林模型的impurity、maxDepth、maxBins、minInfoGain、numTrees(只有随机森林才有此参数)、maxMemoryInMB等参数进行调试,对比其性能,找到最优参数及模型。下面分别从训练时间、最佳参数、预测效果的Accuracy 3个方面进行比较。
2.3.1寻找最佳参数训练时间比较
由表1可以发现,随机森林算法的训练时间,无论是基于RDD数据结构还是基于Datase结构,都要比决策树算法的训练时间长。实验过程中的数据也显示,随着随机森林算法的树深度的加大和树数量的增加,训练时间明显延长。
2.3.2寻找最佳模型参数
从表2中可以发现,与决策树的最佳参数相比较,随机森林算法的最佳参数深度相近,桶数数量相差很大,该数据为调试最佳参数有一定的参考意义。
2.3.3预测效果Accuracy比较
由表3可知,与决策树的Accuracy相比,随机森林算法的Accuracy明显要高(无论是训练数据、交叉数据,还是测试数据)。这说明多棵树的评价效果比单棵树的预测效果好。
3结语
Spark实现了分布式计算框架,它是采用分布式处理大规模数据的最有效途径。在搭建好的实验环境下,对基于RDD和基于Data Frame[Row]/Dataset API接口的Spark随机森林算法的性能差异进行了比较,相对而言,基于RDD接口的随机森林算法的执行效率较差。并且将随机森林算法与决策树算法比较,更好地体现了随机森林算法良好的预测效果,但是训练的时间进一步延长了。如何在集群环境中针对数据的特性,利用Spark平台快速找到相应的模型并通过调整模型参数使预测效果达到最佳,将是下一步研究的重点。
参考文献参考文献:
[1]唐振坤.基于Spark的机器学习平台设计与实现[D].厦门:厦门大学,2014.
[2]NICK PENTREATH.Spark机器学习[M].蔡立宇,黄章帅,周济民,译.北京:人民邮电出版社,2016:13.
[3]ZAHARIA M,CHOWDHURY M,FRANKLIN M J,et al.Spark:cluster computing with working sets[C].Proceedings of the 2nd USENIX conference on Hot topics in cloud computing,2010.
[4]XIN R S,ROSEN J,ZAHARIA M,et al.Shark:SQL and rich analytics at scale[C].Proceedings of the 2013 international conference on Management of data,2013:1324.
[5]刘军,林文辉,方澄著.Spark大数据处理原理、算法与实例[M].北京:清華大学出版社,2016:2023.
[6]ZAHARIA M,DAS T,LI H,et al.Discretized streams:an efficient and faulttolerant model for stream processing on large clusters[C].Proceedings of the 4th USENIX conference on Hot Topics in Cloud Computing,2012.
[7]BREIMAN L.Bagging predictors[J].Machine Learning,1996,24(2):123140.
[8]HO T.The random subspace method for constructing decision forests[J].IEEE Transactions on Pattern Analysis and Machine Intelligence,1998,20(8):832844.
[9]BREIMAN L.Random forests[J].Machine Learning,2001,45(1):532.
[10]SANDY RYZA,URIL LASERSON,SEAN OWEN,et al.Spark高级数据分析[M].龚少成,译.北京:人民邮电出版社,2016.
责任编辑(责任编辑:孙娟)