2014年4月19日“中国Spark技术峰会”(Spark Summit China 2014)将在北京召开,国内外Apache Spark社区成员和企业用户将首次齐聚北京。AMPLab、Databricks、Intel、淘宝、网易等公司的Spark贡献者及一线开发者将分享他们在生产环境中的Spark项目经验和最佳实践方案。
在Spark技术峰会召开前夕,记者和本次Spark峰会的演讲嘉宾尹绪森做了一次简单的沟通,他就Spark技术优势、Spark技术发展做了简要的回答,同时他表示更多的内容将会在4月19日“中国Spark技术峰会”和大家分享!点击报名!
尹绪森,Intel工程师 @尹绪森
熟悉并热爱机器学习相关内容,对自然语言处理、推荐系统等有所涉猎。目前致力于机器学习算法并行、凸显优化层面的算法优化问题,以及大数据平台性能调优。对Spark、Mahout、GraphLab等开源项目有所尝试和理解,并希望从优化层向下,系统层向上对并行算法及平台做出贡献。
以下是记者采访原文:
- 什么原因吸引你钻研Spark技术?
我是典型的“师父领进门”。在吴甘沙老师的带领下,在Intel研究院和一帮挚爱技术的小伙伴们钻研到现在。我个人是比较相信“黑天鹅”的说法的,人生是由一连串的随机事件组合起来的,从去年迷茫地进入Intel研究院,到接触Spark以及有机会参加这次峰会都是曾未可知的。如果放在一年前,我怎么都不会想到有一天自己会跟Spark有所关联。我的专业是机器学习,从研究生生涯刚开始就立志做一名热爱数学的“机器学习者”,因为机器学习不仅很有趣,而且看起来也高大上。做模型发paper是我的夙愿。去年到Intel之前一直在犹豫,不清楚一个梦想中的“机器学习者”到Intel能做什么。实际上,回头来看能做的实在太多了,Intel研究院提供了一个绝对大的舞台。
甘沙老师和小伙伴们都是扎实的系统专家,一起讨论的时候各种听不懂,导致我压力特别大。我想是该改变自己的时候了,应该拥抱变化,而不是把自己陷入到自己的小圈子内, 这是一种“自掘坟墓”的玩法。随后玩命的看了各种系统方面的paper,写Spark程序,读Spark源码,看Scala书籍,跟小伙伴们激烈的争辩和讨论,慢慢感到自己对Spark运行模式有了一丝了解。尤其是看过James Iry的Monads are Elephants系列博客之后,感觉愈来愈明晰了。
技术方面,Spark最吸引我的地方有三处: 一是新,新就意味着还不成熟,存在很多问题,这个时候恰是切入的好时机。有很多未完成的工作,以及大数据栈整体性能进行发掘。实际上,现阶段我主要做的就是如何从Spark大数据栈整体来优化机器学习算法的实现。这样既能做机器学习,又能玩系统,每天都很开心;二是RDD实现之优雅。我更愿意把RDD当做一种“分布式+函数式的编程语言”, 而且我认为它会向这个方向继续前进, 其实现策略之精妙, 让人惊叹不已;三是Scala, 不论别人怎么看待这种编程语言, 我感觉Scala是我用的最顺的一种语言,在很多时候我都感觉不到“语法”的存在,很顺畅的写出程序,它就是你要的结果。简洁明晰,极富表达力。最重要的是,正如Martin所期望的,Scala带给我们的是思维的改变。
- 对于解决哪些问题Spark独具优势?
RDD的表现力让Spark成为多面手。这一点上与Scala的表现力让Spark开发简洁明快是一个道理,这也就是我为什么更倾向于把RDD看成一种分布式编程语言。 Spark 甫一出道,便以多迭代,内存计算为主打,自然免不了进军机器学习领域。Spark 对于程序员,尤其是机器学习者来说,简直是福音一样的存在。轻量级的框架设计,让多迭代逻辑不必游离在主线程之外; 简洁的job 提交方法让job 切换时间大大降低;复合函数的思想摆脱了大量使用磁盘缓存中间结果的桎梏;大量现有,可定制算子的呈现简化机器学习算法设计;甚至BDAS框架兼容并包,一种体系提供所有功能。
- 目前企业应用Spark最大的困难是什么?
熟练使用Scala语言的程序员不多,现状如此。实际上, 企业想招人进来直接玩转Spark是不太现实的,这样的人目前还比较少,尤其是不熟悉Scala的情况下。虽然存在Java和Python的API,但是Spark老东家重心还是在Scala实现的核心上,其他两个社区支持可能没那么及时。
熟知Spark运行时框架的人不多,很多人的理解存在误区。直接导致的一个严重结果就是写出来的程序“不靠谱”,运行很慢,或者出现错误的结果。在这种情况下,“傲慢与偏见”的心理作用会让人产生对Spark的抵触,甚至武断地对Spark盖棺定论。这是非常不好的事情。会上会讲到一点这方面的案例。
比起Mahout这么多年的发展,MLlib成熟度不够,不仅在算法数量上,也在于整体设计上。这就导致很多时候要自己写很多算法。整体设计上有点偏面向对象的风格,我并不是面向对象的厌恶者,但是机器学习算法用函数式语言写起来更直观。
- 根据您的了解,目前Spark发展的情况如何?
首先Spark在Apache社区里的贡献者数目是首屈一指的,将来只会更多。Spark本身已经快要到1.0版本了。其流处理以及SQL的使用可能是大家最关心的,从Spark邮件组里就能看出来。GraphX前段时间并入了Spark主线,这两天Catalyst也并入了Spark主线。因此Spark的活跃度绝对没有问题。另外,Databricks团队的开发者以及社区的小伙伴们都是非常认真严肃的贡献代码, 其pull request审查非常严格。
不过相比于其他组件,MLlib发展相对较慢。首先MLlib的开发需要程序员在机器学习和系统两方面都有很好的知识背景,不过现在社区机器学习和系统做的好的人越来越多了。另外Spark RDD对机器学习算法还是有一定的限制的,想要玩的好还需要下功夫。我同意“专业的工具会有更好的效果”的说法,对于机器学习算法来说,各自有适合自己的并行模式及优化算法。但是如果下功夫好好玩的话,Spark MLlib是很给力的。你会发现,在Spark的框架下实现高效的机器学习算法是件既有挑战又很有趣的事情。不论我们未来是否跳出RDD的限制,都能做出很出色的事情来。
- 请谈谈你在这次大会上即将分享的话题。
机器学习方法在这十年中取得了巨大的成就,大有百家争鸣之势。然而,机器学习领域一直受到多种问题的困扰。首先是模型准确性和计算有效性的取舍; 其次数据可用性也严重制约着机器学习算法的进展;最后机器学习的可用性也制约着机器学习的发展。从性能上来看,机器学习算法的加速方法由四个境界。总结起来,分别是scale-up ,scale-out,算法本身打破串行限制,以及较好的编程模型。IBM计算机体系结构师阿姆达尔在1967 年提出阿姆达尔定律,表明了并行系统存在的性能提升总是受到其中串行性最明显一环的控制。这就要求如果一个系统真正要实现较好的加速并行,就要在各个层面上充分进行并行化。机器学习算法并行存在着四个层次的加速可能,因此也有四个层次的问题需要考虑。
近年来有越来越多的人进入“系统与机器学习联姻”的领域,这方面的呼声也越来越高。CMU大学的Eric Xing老师无疑是个中旗手,学术界与工业界也有大量的研究人员在这方面取得了不俗的进展,据我所知像计算所,微软等都有“大牛”在研究。未来的研究点是机器学习算法指导的大数据系统构建,或者大数据系统支撑的机器学习算法。机器学习和大数据系统并非“非此即彼”的二元选项,随着2014年机器学习盛会ICML 和系统界一流的workshop APSys 一起在北京召开,以及机器学习从业者和系统架构师不断的交叉融合可见趋势。通过算法指导系统搭建可以获得动态的系统结构,反之会使得机器学习算法性能更高。
- 哪些听众最应该了解这个话题,这个话题可以帮助听众解决哪些问题?
这次分享的话题将会包含下面几个问题,根据实际情况会有所侧重。首先是MLlib介绍,可能有些人还不太清楚,所以稍微提及一下MLlib现有的基本算法,整体模式等。其次是机器学习深入理解。我不会喋喋不休的向大家灌输机器学习中常见的一堆堆公式,那会把大家吓跑。实际上我自己有时候也看不下去。相反,我会以一种自己的理解去讲一讲机器学习方面的注意事项、关键点、着重强调与系统结合的部分。之后是希望能带大家熟悉Spark运行时的一些情况。不了解Spark是怎么运行的,就永远不可能写出好的Spark程序,就跟优秀的程序员都有很深的系统方面,编译器方面,以及语言方面的知识一样,可以说是“Spark玩家的自我修养”,并会提及一些实例来做更好的探究。最后我会说一说Spark机器学习实战及调优。时间有限, 不可能事无巨细。
这些话题应该比较适合那些从事机器学习建模,并有期望转入更加扎实的系统研究的人,也很有利于系统界的兄弟们多了解一下机器学习的背景知识。
更多精彩尽在2014年4月19日中国Spark技术峰会,3月31日前购票订票可享受最低票价优惠。马上报名!
往期采访内容:
Spark独门秘籍:打造结构一体化、功能多元化的高效数据流水线
网易王健宗:革命Hadoop,Spark带来百亿市场价值!