扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
9月1日,由工业和信息化部指导,中国信息通信研究院、中国通信标准化协会主办,数据中心联盟承办的“2016可信云大会”在京隆重召开。在9月2日下午的大数据分论坛上,Hulu大数据架构组负责人董西城发表了题为《Spark2.0新特性与展望》的演讲。
目前成都创新互联已为上千的企业提供了网站建设、域名、网站空间、网站改版维护、企业网站设计、凤山网站维护等服务,公司将坚持客户导向、应用为本的策略,正道将秉承"和谐、参与、激情"的文化,与客户和合作伙伴齐心协力一起成长,共同发展。Hulu大数据架构组负责人 董西城
以下是演讲实录:
大家好,我叫董西城,今天很高兴跟大家分享Spark2.0。我我现在是就职于美国的一家公司,做正版的美剧和电影。主要的市场是在北美。我之前写过Hadoop的技术内幕这本书,主要工作是围绕Hadoop和Spark方面。
今天主要介绍的是Spark2.0,我会从以下几个角度给大家剖析Spark2.0。
首先简单介绍Spark,第二部分是会给大家谈谈当前Spark在互联网公司的应用,都做什么。第三部分是Spark2.0里面新的一些特性。
第一部分,Spark2.0的简介。
Spark主要是原自于Mapreduce,是美国的一些大学的博士一些大数据的研究,首先是Mapreduce有一些局限性,它受限,你要实现复杂的功能,要做很多的工作。大家从名字上也可以看出来,Mapreduce的优点是写起程序来非常简单,缺点是太简单了,以至于写复杂的程序要做大量的工作。第二个是性能,十年前磁盘是比较廉价的,内存是比较昂贵的,那时候很多的观念都是基于磁盘上设计一些都是,而Mapreduce是这样做的,很多的设计理念是基于磁盘进行的。所以导致他的性能非常低效。而到今天已经发生了变化了,磁盘已经成为过去了,所以在这块做了一些尝试,想尽可能的在内存上做一些工作,优化框架。
另外一个背景是多种框架并存。当研究Mapreduce的这些人,在设计Mapreduce的时候,发现了当时多种框架是并存的,当时有三种并行计算的场景,第一个是批处理,比如说我要产生一个报表,明天看到就可以了。最典型的是批处理,当时简单的是Mapreduce/Hive,第二个是交互式处理,最典型的是impala/presto,第三种是实时处理,典型的是storm。像阿里巴巴有个滚动的大屏幕,要实时的统计截至1点的时候交易量是多少,那是实时的统计,实时的汇总交易数据,做一个汇总展示,这是一个实时数据,有一笔记录我就做一个汇总。这是多种框架并存的局面。
如果你们公司每一种应用场景都需要的话,你可能至少要有三套系统,有三个集群,这样的话管理起来,运行起来非常的麻烦。是不是能设计一套系统解决这三个场景,而且他们是一套,这样的话学习起来都是统一的,接口都是统一的,维护起来也是统一的。而不是说你要搭建三套,每一套都需要单独学习,因为它由不同的生态构成的。这样的话,你需要三个系统,这三个系统是完全的不同的方式,你的学习成本和运维成本都会非常高。
那么我们做了一个尝试,Spark的特点,一个是非常的高效,统计上看,比Mapreduce快10到100倍,从数据上可以看到,Mapreduce是非常慢的框架。快多少倍取决于具体的场景。为什么这么高效呢?第一,它是DAG的引擎,而Mapreduce也可以把它看成DAG的引擎,但是是非常简单的,它只有两个,点和边。如果想做非常复杂的运算,是非常非常大量的作业。如果你用Mapreduce做的话这个要做四个作业,这个是通过存储不不同的Mapreduce作业衔接在一起的。而通用的DAG引擎,所有的数据都不需要落在这种文件系统里,直接可以通过流式的,或者是其它的方式衔接起来。这是Spark的一个核心的设计理念。
第二个,它可以充分的使用内存。SparK提供了充分使用内容的能力,可以把数据处理完之后做落到磁盘上或者是其它地方,是非常灵活的。实际上,如果你不想用内存,可以关掉,这个时候可以做一些简单的运算。
另外是易用的,提供了四种编程语言,代码量也比Mapreduce要小2到5倍。现在有一个趋势,就是还是编程语言越来越受欢迎,鄙视说Scala,python。
第三个是与Hadoop集成,可以读写hdfs/hbase,与YARN集成。
Spark核心理念,一个是RDD,弹性分布式数据集,对分布式数据抽象,你可以采用其它方式来实现,也是没有问题的。在RDD上,如果把这个数据转成RDD后,它提供了丰富的编程接口。比说有map,filter等等,有多少个结点都可以扩展。
Spark还有个非常强大的方式,就是部署方式非常的灵活,你可以运行在本地,也可以运行在standalone上,也可以部署在mesos/yarn。
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支持了。
第二个是Spark structured,每个小时我们要启动一个Spark作业,来处理前一个小时的用户日志或者是用户行为,这个时候这个作业要有一个调度引擎,这时候要加一个调度器来实现这个功能。如果你处理完前一个小时的数据,下一个小时处理的时候,有可能跑来前一个小时的日志,比如说发生的过程中可能有延迟的问题,Spark streaming可以很好的解决这个问题,是结构化的数据,这个批处理程序,你只要给一下这个源就可以,整体的实现体是一模一样的,这样的话实现了批处理流式计算,一个代码既可以跑流式计算,也可以跑批处理。它提供了很多的设置,来对接不同的数据源,比如说对接各种各样的程序引擎。
另外,可以跟一个静态数据做一个连接,另外也可以做交互式查询,通过接口来查询流式计算统计的结果。这是Spark streaming跟其它的流式计算做的对比,在一致性上,在API上,对事物的支持上,对交互式的支持上等等,它自己跟前一带的Spark streaming,跟Hadoop,跟STORM等做了对比。
第三个模块,在2.0里做了大量的优化,一个是ML pipeline,它实现了所有的模型都可以替换,可以持久化到磁盘。基于Dataframe的API,它可以自动做大量的优化,使用传统的传统关系数据库里的一些优化机制,自动的优化。
另外,它有一个非常重要的功能,一个是实现了广义线性模型,第二个是支持python和api第三个是模型持久化能第四个是pipieline定制化。它可以很好的把组建结合在一起,训练做完之后有哪种评估模型对训练的做一个评估,然后做一个打分等等,所有的东西都做成了组建,你可以插拔的方式来做。
前面我把Spark2.0做了介绍。这是今天的所有内容。Spark2.0已经发布,但是远不成熟,因为改进的东西太多太多了,按照传统的经验,至少调到2.1,2.2,2.3才可以。
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流