BT

如何利用碎片时间提升技术认知与能力? 点击获取答案

王道远:Spark SQL后续发展重点
录制于:

| 受访者 王道远 关注 0 他的粉丝 作者 赵震一 关注 0 他的粉丝 发布于 2015年12月4日 | QCon北京2018全面起航:开启与Netflix、微软、ThoughtWorks等公司的技术创新之路!
13:25

个人简介 王道远,英特尔亚太研发有限公司大数据团队软件工程师,毕业于浙江大学计算机科学与技术学院,在大数据领域具有丰富的经验。他是Hive/Spark开源项目的资深贡献者,目前专注于Spark SQL模块开发,拓展Spark SQL的兼容性,同时根据性能测试的结果对Spark SQL进行性能优化。在进入Spark社区前,他主要负责为IDH(Intel Distribution of Apache Hadoop)中的Hive开发SQL92支持。同时他还是《Spark快速大数据分析》(人民邮电出版社)中文版的译者。

QCon是由InfoQ主办的全球顶级技术盛会,每年在伦敦、北京、东京、纽约、圣保罗、杭州、旧金山召开。自2007年3月份首次举办以来,已经有包括传统制造、金融、电信、互联网、航空航天等领域的近万名架构师、项目经理、团队领导者和高级开发人员参加过QCon大会。

   

1. 大家好,这里是2015上海Qcon的现场,今天我们有幸邀请到了来自因特尔亚太研发有限公司大数据团队的工程师王道远,先让道远简单做下自我介绍,让大家认识一下。

王道远:大家好,我是来自因特尔的王道远,我在因特尔是一名软件工程师,主要从事的是Spark方向的开发工作。在参与Spark开发工作之前,我也参与过因特尔版本的Hadoop中的Hive的工作,主要是为当时比较早期的版本的Hive添加了SQL92的支持,在这个过程中也学习到了很多。这次能够到QCon的现场来跟大家交流,也是我的荣幸。

   

2. 开源和大数据现在是时下最吸引眼球的两个关键词了,刚才通过介绍我们也了解到道远是Hive和Spark这两个大数据领域相当有影响力的开源项目的资深贡献者。能聊聊是怎样的契机让你接触开源项目,然后让你能够投身其中的?

王道远:这个契机就是当时因特尔为了基于Hive去实现SQL92的性能支持,这也是为了满足当时IDH客户的需求,提出来这样一个方案,就是通过一些对SQL执行计划的变动,能够让现有的Hive支持更复杂的语法,在这样的框架下我就加入到了这个项目中,然后为这个项目也开发了很多Feature,包括甚至重新架构了它的转换过程。因为SQL on Hadoop的解决方案也是非常的多,除了Hive,还有Spark,还有像impala等等这些东西,那么我们当时看到了Spark SQL出现之后,也是积极的投入到了对Spark SQL的支持中,由于我对SQL这方面也有了一定的积累,于是我就很水到渠成的加入了Spark SQL这边的开发中来。

   

3. 我们了解到道远在Spark上面现在主要是专注于Spark SQL模块的开发,以及性能优化,那能不能聊一下,在这些经历中,你遇到了怎样的挑战,你又是怎样去解决的?

王道远:其实我们整个因特尔团队都跟我们的客户和合作伙伴在这方面做了很多的工作,主要是针对一些合作伙伴的需求,我们在这方面有了很多的贡献。主要集中在三个方面,首先是Spark SQL这个功能的易用性,我们根据客户的需求,因为很多客户可能已经有了它们的Hive部署,已经在Hive上跑了许多业务,然后我们去把它Hive上已有的业务迁移到Spark SQL上来的时候,也发现了很多问题,因为Spark SQL早期的hivecontext可能对Hive兼容性的支持比较弱,我们在这方面也去做了,包括像Hive中的view的支持,还有像一些Data type我们对它进行了一些添加,让Spark SQL能够获得和Hive尽量高的兼容性。这是一方面,还有一方面就是像有一些客户,因为他们以前没有用过Hive,他们用的是传统的数据库,那么就有一些更加奇怪的query,然后我们就会对这些query去进行一些支持,超越了Hive本身的语法。另一块对于Spark SQL的稳定性,很早的时候试用过Spark用户可能也会发现Spark有的时候会遇到一些Out of Memory之类的异常,会退出,包括还有一些其他的问题。在这个过程中,因特尔团队为Spark做了相当多的工作,包括对两张非常大的表进行Join,我们可能有时候内存不够,就会出现很多问题,我们针对这样的情况采取了一些新的Join的算法,能够让这些Join顺利的执行下去,包括像其他的一些针对shuffle端的文件过多产生的各种各样的问题,我们都有相应的解决方案,都已经merge到了upstream中。然后第三方面,我们还做了很多关于它的性能优化的事情,因为Spark的立身之本,就是它的性能能够比Hadoop更好,去解决Hadoop架构上的一些问题,那么在这个过程中,我们也发现Spark本身的架构也需要不断的演进,我们在其中也贡献了一些包括像aggragation的优化,以及很多其他的方面的工作。

   

4. 那Spark SQL后续的发展重点会有哪些,你们又会专注于哪些方面的工作呢?

王道远:就像刚才已经说过的Spark SQL发展的重点还是集中在这样的三个方面,就是易用性,还有它的性能,还有另外就是它对于一些新出现的硬件的支持。首先是易用性方面,我们看到Spark的设计是一个非常开放的结构,它支持了很多模块可插拔式的设计,那么我们就可以针对这种可插拔的设计对各家厂商去做相应的个性化的实现,包括支持厂商自己构建的一些数据结构之类的东西,还有就是我们可以让更多的模块也成为可插拔的部分,这样让Spark能够更加的灵活,能够充分的运行在各种平台上。还有一方面就是性能的优化,性能当然还是一个老话题了,Spark现在在性能方面已经做出了相当多的改变,相当多的改进,我们在这一块还会继续的去提供相应的支持,包括像add hook query,还有像common table expression等等方面的支持,包括像1.6中,Spark会计划去加入cost-based optimization,那这一块,我们也会基于adaptive execution的算法,去实现一些相应的功能。最后就是对一些新硬件的支持,大家也知道,现在已经出现了很多跟传统硬件结构完全不一样的硬件,他们跟传统硬件可能在一些性能的参数上都有一些很大的区别,包括成本上,那么根据各大厂商的要求,我们也会对这些硬件进行相应的支持,能够让Spark永远领先于这个时代。

   

5. Spark是采用Scala开发的,但它支持采用Java,Scala,Python等语言来编写应用,那么使用不同语言编写Spark程序的过程中,我们对于性能优化的考虑是不是会有所不同呢?

王道远:这个问题在Spark的早期版本中确实是存在的,当时Spark可能有太多的在不同语言之间把对象进行serialize和deserialize的过程,在这个过程中,确实是消耗了很多性能,但是Spark社区早就意识到了这个问题,所以说在Spark1.3中,Spark社区推出了DataFrame API,这个是根据R和pandas中的DataFrame的灵感所设计的一种API,它只要让开发者告诉Spark我们需要做的是什么,Spark就会根据开发者的需求去生成一个最优化的执行计划,在这个过程中,不论开发者使用的是什么语言,我们开头的区别只是把它调用的API转换成我们的这个逻辑计划,后面的过程都完全一样,我们会对逻辑计划进行resolve,resolve完会进行优化,然后再生成对应的物理计划,最后再执行,这样的话,我们就可以把性能的差异都转换成逻辑计划这一部分,那么在这一部分的代价其实相对于后面的执行来说是非常小的,也就是说使用各种语言的API,它们的性能差异几乎是可以忽略不计的。在这个过程中性能的考虑,都会交给Spark的开发者去完成,而对于Spark应用的开发者来说,他们只需要关注他们需要做什么,社区里会根据所有的情况去优化Spark的执行引擎本身,因特尔这边也会根据因特尔新出的—些硬件去进一步的优化Spask,也会把优化的结果贡献给开源社区,始终保持Spark在因特尔architecture上获得最优的性能。

   

6. 现在大数据行业有很多与Spark相似的,性能非常强的一些引擎,比如像阿帕奇Flink,经常有同行会拿Apache Flink来与Spark进行比较,那你能谈谈,你是如何看待这个项目的,它是否可能会取代Spark?

王道远:Flink现在也是一个非常火热的项目,其实Spark和Flink在设计思想上有很多的相似点,因为他们都是最早看到了Hadoop在MapReduce这个架构上的一些不足之处才出现的架构,所以说在新的架构设计方面,他们也会有相互的借鉴,我个人觉得Spark和Flink都是非常有前景的项目,现在来看的话,他们还远远没有到谁会取代谁的程度,因特尔反正一直会大力的去支持开源软件的发展,能够让最优性能的软件得到用户的使用。

   

7. 说到开源,很多朋友都觉得能参与开源项目是件非常酷的事情,但是不知道如何才能参与进去,作为过来人,你能否给那些想要投身开源项目的同行一些好的建议?

王道远:其实要投身到开源项目中,最关键的还是个人的兴趣,因为开源这个事情,首先它是不求回报的,必须要有自己的兴趣支撑,才能去投身到其中。有了兴趣之后,你要知道你的兴趣是集中在哪个方面,因为方方面面都有各种各样的开源软件,你可以在你所喜好的方向中选择一款开源软件去深度的跟进它,从它的设计思想,到它的具体的代码实现,以及它的使用方面都可以入手,去了解这款开源软件,然后在使用的过程中肯定会发现很多不足,毕竟开源软件总是有一些不足,即使是商业软件也有一些不足。然后这些不足之处,由于你可以阅读到代码,你可能很容易就发现它的不足之处是怎样产生的,那么你就可以把你的解决方案提交到社区,让大家共享,这也是基于人人为我,我为人人的原则,享受到了开源软件的便利,当然也会进一步的把你自己踩过的坑去跟大家共享出来,这也有助于后面的有志之士去共享这个开源软件的成果,而在你把你的改进提交到开源社区的过程中,你也会跟社区的大牛一起讨论这个软件的设计思想和它的发展方向,在这个过程中,我相信大家也能获得很多的个人的提升。

   

8. Spark在开源社区是一个备受关注的项目,你对那些想要开始学习Spark的新人有什么好的建议?

王道远:要学习Spark的话,我建议大家还是从实际上手开始,首先可以自己去下载一个Spark的编译好的版本,然后在自己的机器上实际的运行一下,可以去跑一些Spark官方所提供的例子,感受到了Spark的强大之处之后,再去有针对性的去了解Spark的某一个模块,知道怎样使用这个模块,提高自己的生产力,这个才是比较重要的。像对于入门的观众来说,我觉得可以去参考的方向,一个是Spark的官方文档,还有就是由Spark官方写的一本Learning Spark的书籍,我也翻译了一本Learning Spark的中译板,刚刚已经上市了,也欢迎大家购买。

   

9. 今天我们还是非常感谢道远的到来。

王道远:好,谢谢。

登陆InfoQ,与你最关心的话题互动。


找回密码....

Follow

关注你最喜爱的话题和作者

快速浏览网站内你所感兴趣话题的精选内容。

Like

内容自由定制

选择想要阅读的主题和喜爱的作者定制自己的新闻源。

Notifications

获取更新

设置通知机制以获取内容更新对您而言是否重要

BT