天天看點

看資料與機器學習互動接口發展

本文章由阿裡雲社群直播視訊整理和而來。

講師:祝威廉,資深資料架構,11年研發經驗,同時維護和開發多個開源項目。

Stage1:分布式程式設計發展曆程

1.MapReduce時代

大資料最開始的樣子:MR(MR指:mapreduce,後文簡稱MR)在大資料領域的地位舉足輕重,就不再贅述了。下面是一段使用MR編寫的WordCount代碼:

看資料與機器學習互動接口發展

直覺上看,這段代碼粗糙,暴力且麻煩。在MR的初期,想要送出像如此簡單的功能的代碼,所需要的Jar包就有11個之多而且還有這麼多的代碼量,可想而知如果要搞一些複雜的需求與騷操作,簡直是要累吐我這樣的資料搬運工了。

當然我們MR的一個較大的弊端是用Java編寫代碼,又因為Java的表達能力相對較弱,這應該算是一個較大的短闆。

MR時代我們會橫向拓展機器,這是一個在當時比較新穎的理念,我們在橫向拓展是并不要求機器的性能,項目初期,可以用盡量低的成本,用低性能且多數量的機器來支撐起我們的業務,也是很值得鼓吹的。當我們已現如今的知識儲備與經驗會看當時的想法,就會覺得它好low。就如同一個哲人曾經說過,今天的你如果沒有覺得昨天的你很沙雕,那麼你就沒有進步。

2.Spark

技術是不斷的進步的,上文我們說到MR是落後的,那麼替代MR的就是我們接下來說到的Spark。用spark中的RDD(Resilient Distributed Dataset)來實作wordcount代碼如下:

看資料與機器學習互動接口發展

用了兩行代碼就替代了MR上面冗長的代碼,簡單且接近單機程式設計,spark都會有一個sc的入口,來進行對應的api調用。另一個優點就是不必如MR一般必須要在叢集環境上進行調試沒有很好地額互動性,spark是基于scala編寫的,這裡我們叫(spark-shell)也就可以邊編寫代碼邊調試檢視效果,類似于python的notebook,給予了我們開發很大的幫助,且有了很多新的理念。spark還支援多語言程式設計,除了原生的scala,還支援python,Java等。

3.Ray

Ray是一個新的大資料平台:

看資料與機器學習互動接口發展

看下上面的代碼,首先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執行。

問題:平台變遷到底是什麼東西在變化?

如下圖:

看資料與機器學習互動接口發展
看資料與機器學習互動接口發展

基于以上圖檔我們可以看到一個趨勢就是:Java與scala是MR與RDD的主力語言,python是AI的主力語言,大資料領域是Java與scala,AI則是python。Java與scala相對來說是面向平台,python則是面向使用者。sql将會成為資料的主力。

問題:Ray是否會取代Spark嗎?

首先分别了解一下這兩個平台的架構:

看資料與機器學習互動接口發展

通過對兩個平台的對比分析,我們可以看出,他們兩個是并列存在,目前并不存在誰取代誰的趨勢。

核心總結:

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演化

看資料與機器學習互動接口發展

演化總結:

1)資料處理本質是集合操作。

2)SQL是集合操作語言的典範。

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

4)DF/SQL是資料處理的事實标準。

5)Python可以寫DF/DS,調用SQL,同時還可以支援機器學習學習各種庫,是以Python語言成為王道。

整個API發戰方向:

1)DataFrame/DataSet on python。

2)SQL。

為什麼會有這樣的方向?

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架構圖:

看資料與機器學習互動接口發展

MLSQL将會結合Spark以及Ray。

MLSQL代碼示例:

看資料與機器學習互動接口發展

MLSQL語言組成:

看資料與機器學習互動接口發展

1.SQL 拓展版sql。

2.指令行 文法糖,本質也是sql。

3.python 内嵌于sql。

為什麼要一個新語言?

1)算法-》80%的代碼時SQL,20%的代碼時Python。

2)研發,産品營運,分析師-》100%SQL(部分拓展使用Java/Scala)。

因為要讓SQL成為頭等公民,那麼也就導緻MLSQL應運而生。

一段典型的MLSQL腳本:

看資料與機器學習互動接口發展

Java/Scala可以寫SQL函數:

看資料與機器學習互動接口發展

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的應用們。