看数据与机器学习交互接口发展-阿里云开发者社区

开发者社区> 阿里云数据库> 正文

看数据与机器学习交互接口发展

简介: 从最早的RDD, 到编程版SQL的Data Frame, 再到标准的SQL, Spark和程序员的交互形态的发展变化, 也是整个数据行业发展的一个缩影。随着AI的发展,行业内普遍的做法是在python语言里集成了Data Frame, SQL。ML SQL则是一个颠覆者, 他希望SQL是顶级成员, 在SQL中内置Python, 并可通过集成Scala/Java对其进行扩展。

本文章由阿里云社群直播视频整理和而来。
讲师:祝威廉,资深数据架构,11年研发经验,同时维护和开发多个开源项目。

Stage1:分布式编程发展历程

1.MapReduce时代

大数据最开始的样子:MR(MR指:mapreduce,后文简称MR)在大数据领域的地位举足轻重,就不再赘述了。下面是一段使用MR编写的WordCount代码:

image.png

直观上看,这段代码粗糙,暴力且麻烦。在MR的初期,想要提交像如此简单的功能的代码,所需要的Jar包就有11个之多而且还有这么多的代码量,可想而知如果要搞一些复杂的需求与骚操作,简直是要累吐我这样的数据搬运工了。

当然我们MR的一个较大的弊端是用Java编写代码,又因为Java的表达能力相对较弱,这应该算是一个较大的短板。

MR时代我们会横向拓展机器,这是一个在当时比较新颖的理念,我们在横向拓展是并不要求机器的性能,项目初期,可以用尽量低的成本,用低性能且多数量的机器来支撑起我们的业务,也是很值得鼓吹的。当我们已现如今的知识储备与经验会看当时的想法,就会觉得它好low。就如同一个哲人曾经说过,今天的你如果没有觉得昨天的你很沙雕,那么你就没有进步。

2.Spark

技术是不断的进步的,上文我们说到MR是落后的,那么替代MR的就是我们接下来说到的Spark。用spark中的RDD(Resilient Distributed Dataset)来实现wordcount代码如下:

image.png

用了两行代码就替代了MR上面冗长的代码,简单且接近单机编程,spark都会有一个sc的入口,来进行对应的api调用。另一个优点就是不必如MR一般必须要在集群环境上进行调试没有很好地额交互性,spark是基于scala编写的,这里我们叫(spark-shell)也就可以边编写代码边调试查看效果,类似于python的notebook,给予了我们开发很大的帮助,且有了很多新的理念。spark还支持多语言编程,除了原生的scala,还支持python,Java等。

3.Ray

Ray是一个新的大数据平台:

image.png

看下上面的代码,首先init()方法会连接一个已有的集群,如果没有的话会自己启动一个集群。然后我们创建一个方法或者一个class,我们加上一个annotation标注这个方法为可以远程调用的。之后在调用的时候,其实是通过调用里面的remote方法。然后通过ray.get(futures)拉起一个多线程来跑程序。

Ray已经是非常非常接近单机编程,支持所见即所得,简单易用,原生支持python,可以很好的与AI整合,Ray为我们提供了更小的侵入性,更简单的代码实现。

蚂蚁金服提供了Java支持,可以通过Java来编写上面的代码

4.分布式发展历史总结

感性总结
1.MR/Spark 都是原生支持Java/Scala系的,Ray开始原生支持Python。

2.限制越来越少,MR要求你实现接口,Spark要求你从sparSession算子开始,Ray则只需要你定义函数/class的时候打个远程标记(另外还可以配置资源)。

3.启动延迟越来越低,可直接interpreter执行。

问题:平台变迁到底是什么东西在变化?
如下图:

image.png
image.png

基于以上图片我们可以看到一个趋势就是:Java与scala是MR与RDD的主力语言,python是AI的主力语言,大数据领域是Java与scala,AI则是python。Java与scala相对来说是面向平台,python则是面向用户。sql将会成为数据的主力。

问题:Ray是否会取代Spark吗?
首先分别了解一下这两个平台的架构:

image.png

通过对两个平台的对比分析,我们可以看出,他们两个是并列存在,目前并不存在谁取代谁的趋势。

核心总结:

1)Ray的python/java支持是并列的,互不影响。Spark的Python AP1是需要通过Java API的。

2)两者都分成了框架/应用,分布式编程系统分两个层(RDD==Ray Core)

3)Ray上的Python API自前主要面向机器学习,Java API还是面向传统的流,批等。

4)你可以基于Ray Java API实现类似现在的Flink APl,SQL执行引擎等,并且复用已有的大数据生态。

小结论:

1)两者体系结构类似。

2)Ray Core/RDD 都可以实现复杂的框架或者应用。

3)Ray可以实现Spark的所有功能,甚至实现一模一样的上层API(比如DataFrame等,甚至能复用更上一层的库比如MLL1b)。

4)Ray Core之上可以并行运行两套生态体系(Al,大数据)

那么到底能不能取代呢?理论上是可以的,但是还要看实际生态发展趋势。Ray可以做到All in one,会不会替代就要看Ray的发展了。

Stage2:Spark API交互发展历程

交互实际就是API,由下图来看一下Spark api演化

image.png

演化总结:

1)数据处理本质是集合操作。

2)SQL是集合操作语言的典范。

3)DataFrame/DataSet 是SQL通用语言服本。

4)DF/SQL是数据处理的事实标准。

5)Python可以写DF/DS,调用SQL,同时还可以支持机器学习学习各种库,所以Python语言成为王道。

整个API发战方向:

1)DataFrame/DataSet on python。

2)SQL。

为什么会有这样的方向?
1)数据处理本质是集合操作。

2)SQL/DF 易于无感知性能优化,可扩展性也还好。

3)Python作为C/C++的wrapper,同时是所有语音里学习成本最低的,非常适合做交互。

Stage3:从Application到Service突破一些常见模式

分布式编程的趋势:
1.越来越简单,越来越靠近单机编程。

2.执行延迟越来越低。

spark的两种运行模式:

1.提交spark程序到Yarn/k8s上,运行完成后结束就退出 Application模式。

2.Spark作为常驻程序,通过Thrift/Rest等接口提交任务 Service模式。

Ray只有一个模式:
service模式。

service模式的好处:

1)任务提交快(无进程申请,初始化等开销)。

2)执行速度快(AdHoc即席查询查询)。

3)负载均衡,集群的集群什么的都可以一起上。

4)满足数据分析如报表需求。

Service模式是一种进步。

Stage4:MLSQL是如何集大成,成为最好的分布式编程平台

MLSQL架构图:

image.png

MLSQL将会结合Spark以及Ray。

MLSQL代码示例:

image.png

MLSQL语言组成:

image.png

1.SQL 拓展版sql。

2.命令行 语法糖,本质也是sql。

3.python 内嵌于sql。

为什么要一个新语言?
1)算法-》80%的代码时SQL,20%的代码时Python。

2)研发,产品运营,分析师-》100%SQL(部分拓展使用Java/Scala)。

因为要让SQL成为头等公民,那么也就导致MLSQL应运而生。

一段典型的MLSQL脚本:

image.png

Java/Scala可以写SQL函数:

image.png

MLSQL特点:

1)简单-》SQL/命令行是一等公民,兼顾灵活可内嵌Python/Java/Scala。

2)内置权限=》 语言级别支持权限授权,一切资源都会抽象成表,精确到字段控制。

3)生态-》 可支持Spark/Ray之上的所有生态。

最后的建议:

1)请用Service模式。

2)分布式编程平台,Ray是趋势,但Spark生态够它继续辉煌。

3)Ray成为机器学习的Spark。

4)数据API标准是SQL(DataFrame/DataSet),Al是Python。

5)MLSQL作为一门新的面向算法和机器学习的语言,解释执行,内嵌权限,极度简化了大数据和A的应用们。

版权声明:本文中所有内容均属于阿里云开发者社区所有,任何媒体、网站或个人未经阿里云开发者社区协议授权不得转载、链接、转贴或以其他方式复制发布/发表。申请授权请邮件developerteam@list.alibaba-inc.com,已获得阿里云开发者社区协议授权的媒体、网站,在转载使用时必须注明"稿件来源:阿里云开发者社区,原文作者姓名",违者本社区将依法追究责任。 如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件至:developer2020@service.aliyun.com 进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容。

分享:
阿里云数据库
使用钉钉扫一扫加入圈子
+ 订阅

帮用户承担一切数据库风险,给您何止是安心!

官方博客
链接