张维 王玥 罗珅
摘要:在大数据的时代里,实现高效的大数据的机器学习系统,需要开发人员要搭建一个计算机机器学习系统,并且该系统能够同时完成机器学习和大规模数据处理的任务。现有的训练数据集重复使用,场景信息较少,已经不能满足大规模机器训练的需要,所以需要包含大规模数据、分布式的计算机系统完成训练。本文介绍了现有大数据机器学习基本概念和一种称为Spark的大数据分布式计算方法。
关键词:机器学习;大数据;分布计算模型
中图分类号:TP311.13 文献标识码:A 文章编号:1007-9416(2018)09-0027-02
1 背景
近年来,随着大数据的兴起,推动了大数据在机器学习领域的运用和迅猛发展,基于大数据的机器学习能够更有效更精准的完成机器训练,基于大数据的机器学习系统已经成为计算机研究开发领域的一个热点研究问题。机器学习和大数据分析是运用现有的计算机系统模型,将计算机获取到的大量的数据或称大数据转换成有用信息的技术。运用的数据规模越大,机器学习训练效果越好,精度更准,识别内容更多,减少过拟合和欠拟合现象的发生[1-3]。
大数据机器学习既不是单纯的机器学习,也不是简单的大数据处理的问题,而同时涉及机器学习和大数据处理两个方面的技术难题的攻克与融合的运用[4]。这个过程中,研究人员不仅需要继续关注机器学习的函数方法和算法,而且还需要继续研究新的、高效的算法或改进的现有的不完善的机器学习方法,保证能够提升在实际运行中的结果的准确性。搭建一个基于大数据的机器学习系统,同时涉及机器学习和大数据处理两方面的问题,如机器学习的算法模型、数据集、训练方法、精度、拟合等问题,大数据处理方面的分布式存储、并行化计算、网络通信、任务调度、容错冗余备份等[5,6]。这些因素互相影响,增加了系统设计的复杂性和设计完成系统的稳定性精准性,给设计人员的系统开发设计带来了一些挑战。在设计大数据机器学习系统和研究其方法和算法时,还要关注如何结合分布式和并行化的大数据处理技术,以便在可接受的时间内完成计算。
2 Spark方法
Spark[3]诞生于伯克利大学的AMPLab实验室,2010年正式开源,开放代码提供给开发测试人员使用,2014年成为Apache的顶级项目。Spark在2014年11月的Daytona Gray Sort 100TB Benchmark竞赛中,打破了保持排序纪录的Hadoop MapReduce框架结构。Spark利用1/10的节点数,把100TB数据的排序时间从72min降低到了23min。
Spark主要具有如下特点:(1)计算效率高。通过有向无环图DAG支持循环数据流,在内存中存储中间数据,拥有高效的迭代运算效率。(2)通用性强,提供丰富的组件。Spark为开发人员提供了各种完整强大的组件庫,包括sql查询、流式计算、机器学习和图算法组件等多种组件。(3)使用方便,兼容多种开发语言。提供Spark Shell脚本,用户可以进行交互式编程开发,同时支持Scala、Java、Python和R等多种编程语言开发。(4)模式多样,对外部环境依赖少,兼容多种服务器。可以独立运行于各种集群服务器中,兼容Hadoop、Amazon EC2等云环境,可以访问多种数据源如HDFS、Cassandra、HBase、Hive等。
Spark具有极其多的有点,是由于其采用了不同于一般框架的数据结构,spark采用弹性分布式数据集(resilient distributed dataset,RDD),RDD是Apache Spark平台的基础,RDD是以逻辑分块进行划分的对象集合,缓存在内存中,在内存中数据储存满了以后,数据会保存到硬盘上。RDD有两层含义:数据结构RDD和编程模型RDD。(1)数据结构RDD本质上来说,是一个只读、可分区的记录集合,一个RDD包含多个分区,每个分区是包含一个数据集的片段。RDD本质上是一个内存数据集,解决了磁盘读写密集和网络通信负载过大的问题。(2)编程模型RDD上定义了两类操作:转换和动作。转换操作返回新的RDD,动作操作的结果在存储系统中导入一个值。Spark在RDD上定义的采用惰性调用机制,只有在调用作操作时才会真正触发所有定义的操作。
由转换操作得到的父子RDD之间存在依赖关系,包括窄依赖和宽依赖。窄依赖:父RDD中的一个分区只被一个子RDD的一个分区使用。窄的依赖关系有利于高效的执行,而广泛的依赖关系会带来瓶颈,因为它们会破坏流水线,而且需要通信密集的随机操作。宽依赖:父RDD的一个分区被一个子RDD的多个分区使用。
在Spark中,计算被建模为有向无环图(DAG,directed acyclic graph),其中的每个顶点表示弹性分布式数据集RDD,每个边表示RDD上的实际操作。spark用户将计算作为有向无环图进行建模,该有向无环图会转换并运行RDD上的动作。有向无环图DAG会分阶段进行编译,每个阶段将并行执行一系列的任务。Spark中的分布式执行操作,是通过对机器上的有向无环图阶段进行分块来实现的。Driver包含了两个调度组件,有向无环图调度器和任务调度器,用于给workers分配任务,以及协调workers。
在基本的设置中,Spark将模型参数存储在driver节点中,而workers与driver进行通信,以便在每次迭代后更新参数。在大规模的部署中,模型参数不是特别适合在driver中存储,而应将其作为RDD进行维护。这引入了很大的开销,因为需要在每次迭代中创建新的RDD以保存更新过的模型参数。更新模型包括在机器和磁盘之间混洗数据限制了Spark的可扩展性。这是Spark中基本数据流模型有向无环图不足的地方。Spark的设计目的是为一般数据处理设计的,而不是为机器学习设计的。然而,开发人员可以利用专用于Spark的MLlib的工具包,在Spark上进行机器学习。同时Spark的缺点还有不支持机器学习所需的迭代操作。
3 结语
基于大数据的机器学习系统的研究和开发,不仅是研究算法问题,更是解决一个大规模系统之间相互关联、协同运行的问题。相比传统的机器学习,基于大数据的机器学习系统,大大的扩充了机器学学所需训练数据样本的数量,使机器学习的训练数据不再拘泥于已有的、大量已被频繁使用过的数据集,使得机器学习的训练过程和结果更加多样化,挖掘分析出更多更隐藏的、不为人知的有用信息。随着硬件技术的提升和编程算法的不断优化,越来越多的科研人员参与其中,数据采集的过程已经不再是影响大数据发展的首要因素,通过数据挖掘,分析出数据的关系,发现数据潜在的价值,提取有用的数据归纳总结,抽象出普遍特征,避免无用数据对需要的数据进行干扰是当前大数据学习面临的首要挑战。机器学习也需要通过大量数据完成训练,通过不断优化,将大数据与机器学习相互融合,提升二者关联性,完成更好的数据挖掘过程和更精准的完成机器训练。
参考文献
[1]焦嘉烽,李云.大数据下的典型机器学习平台综述[J].计算机应用,2017,(11):7-15+20.
[2]何清,李宁,罗文娟.大数据下的机器学习算法综述[J].模式识别与人工智能,2014,(04):41-50.
[3]唐振坤.基于Spark的機器学习平台设计与实现[D].厦门大学,2014.
[4]Jiang, J., Yu, L., Jiang, J., Liu, Y., Cui, B.: Angel: a new large-scale machine learning system. National Science Review nwx018(2017).
[5]ZAHARIA M, CHOWDHURY M, FRANKLIN M J, et al. Spark:cluster computing with working sets [C]Proceedings of the 2ndUSENIX Conference on Hot Topics in Cloud Computing. Berkeley, CA: USENIX Association,2010: Article No.10.
[6]K Zhang , S Alqahtani , M Demirbas: A Comparison of Distributed Machine Learning Platforms. International Conference on Computer Communicatio,2017:1-9.