Hulu大数据架构组负责人董西城:Spark2.0新特性与展望

Spark是一个生态系统,很多人不会编程,你可以用Spark SQL处理,你只要会写SQL就OK了。你有图的数据,做图计算,可以使用Graphx,如果你想做距离的分类,推荐等等,有一个Mllib,这样的话,你直接利用这里提供的就OK了,Spark是一个生态系统,是一个软件站。不同的软件会解决不同的问题,比如说是不是我只用SQL就行了,不好意思,有一些机器学习算法不可能只用SQL来表达,大数据,包括人工智能,这些机器学习,深度学习已经越来越流行。这块是SQL解决不了的,很多必须要用APR来写,当然更多的是做一些实时统计,这种可以Spark SQL。随着大数据地发展,很多很多的数据处理都逐渐的流式化,所以streaming也越来越受欢迎。

接下来我们看一下Spark在互联网上的应用。

这是做了一个汇集,首先第一个是腾讯,它用Spark做什么呢?一个产品是广点通,这里面有一个推荐的功能,这里主要是用Spark实现算法,就是迭代,直到得到这个模型就停止了。在腾讯内部得到了广泛的应用。另外是日志分析,现在转移到了SparkSQL,这是实现的一些算法,预测用户的广告点击概率,计算两个好友间的共同好友数。

阿里巴巴有哪些应用呢?主要是在搜索和广告业务里用到了Spark。之前他们的很多算法都是用Mahoout来实现的,它是非常低效的。阿里巴巴的量非常的大,需要很长的时间。有了Spark后,可以把这个做的非常的高效。另外就是图算法,阿里巴巴有一些图像化的数据,可以用graphx来分析用户的关联关系。

第三个是优酷土豆,他们也是来解决Mapreduce存在的一些问题,比如说性能问题,迭代计算上的性能比较低效等等。他们最后把它应用在极其机器学习图计算等等。Spark最大的优势就是用在机器学习领域,比如说做一个人的关系的挖掘,比如说SQL肯定解决不了,Mapreduce非常低效,这个时候你必须得自己写一些算法来实现。

接下来我们看看Spark2.0,它是最近发布的一个版本,有重大的改进。我们看看到底做了哪些改进。

首先看性能方面,首先是它的SQL计算方面用到了datooFrame中的算子性能优化2到10倍。另外是向量化计算,提供Parquet扫描吞吐率,还有提升了ORC读写性能。另外产品优化器是CATALYST。

在功能方面,在三个关键组建里做了大量优化和功能上的改进。一个是执行优化方面做了工作,这是突出的优化项目,优化的计划,支持sprk SQL2003,机器学习方面做了重大的改进。

首先是SparkSQL,是基于SQL的引擎,当然不仅仅支持SQL还支持DSL,。它不是类型安全的,缺乏函数式编程能力,在1.6和2.0里面增加了新的编程方式,是DATASET它是类型安全的,面向对象编程方式,支持非结构化数据,JAVA与SCALA统一了接口,性能极和了序列化框架。在这里,做了非常重大的改进,比如说编码,之前你如果用Spark写程序的话,用JAVA表示的话,可能是几十个字节,Spark里做了大量的优化,比如说编码之后只占少量,Spark做了非常大的改进。

给大家看一个例子,在现在绝大部分人用比较典型的RGD来写程序,认为非常的简单,都非常容易。的确是非常方便,但是现在看来不够更进阶,比如说很多人看了这个不知道他做什么。但是跟你后面的程序一眼就可以看出来。Spark2.0里面可以把写程序变得这么简单。Dataframes是非常简捷的,相当于SQL。另外是SparkSQL在执行上做了大量的优化。提出了未来五年的计划,主要是在优化CPU和memory做了优化,怎么样提高CPU的计算,怎么样充分的利用CPU的资源,它提出了三方面的优化,一个是关于对象的表示,对心的序列号方面做了优化,它是用JAVA写的,对象内存开销比较大,序列号的开销也比较大,这有一系列的问题。这个方面的优化,想用类C语言的方式来表示JAVA的对象,JAVA允许你用二进制的方式来表达,而且它的内存完全是自己管理,实现了一整套管理的序列化机制。

第二个是cache-aware,可以尽可能的合理使用CPU的cache,宣布实现了数据结构的算法。

第三个是可去除条件检查,尖沙虚函数调度等。

它的目标是逼近物理性能的极限,渣干机器可以利用的资源加速计算。

第三个优化是对SQL的支持,现在已经支持准的SQL2003,可跑通所有的TPC-DS查询。对SQL的支持花了越来越多的力气,在不久的将来可能对SQL的支持会越来越好。对SQL的支持是很多用户的需求,也是期望。所以Spark支持了。