阿里云ODPS的愿景、技術(shù)實現(xiàn)與難點

責(zé)任編輯:一三

2014-04-09 11:05:37

摘自:InfoQ

2014年1月,阿里云將其ODPS服務(wù)開放公測。2014年4月,阿里巴巴大數(shù)據(jù)競賽的所有參賽者將在ODPS平臺上進行算法的調(diào)試、測試;同月,ODPS也將開放更高級的功能進入公測。

2014年1月,阿里云將其ODPS服務(wù)開放公測。2014年4月,阿里巴巴大數(shù)據(jù)競賽的所有參賽者將在ODPS平臺上進行算法的調(diào)試、測試;同月,ODPS也將開放更高級的功能進入公測。

InfoQ中文站近日跟ODPS平臺的技術(shù)負責(zé)人徐常亮進行了采訪,交流了有關(guān)ODPS的愿景、技術(shù)實現(xiàn)、實現(xiàn)難點等話題。

InfoQ:先介紹一下ODPS現(xiàn)在的情況吧。這個產(chǎn)品能做什么?

徐常亮:ODPS是2011年正式有的名稱,全稱叫做Open Data Processing Service,簡單來說就是數(shù)據(jù)處理的服務(wù)。它的定位是在飛天之上,提供數(shù)據(jù)倉庫、數(shù)據(jù)挖掘和其他數(shù)據(jù)應(yīng)用等功能。

2011年的時候我們嘗試對外提供ODPS,當(dāng)時有一些小試點,但是后來發(fā)現(xiàn)各方面條件沒有完全成熟,不管是外部對云的了解還是內(nèi)部對ODPS未來的預(yù)期都不是很清晰,所以一直到2012、2013年,它發(fā)展的節(jié)奏都比較慢。去年大概6、7月的時候有一些變化,因為飛天到了5K的里程碑,在技術(shù)能力方面的顧慮已經(jīng)小了很多。因為飛天是分布式操作系統(tǒng),它提供最基本的存儲、CPU調(diào)度能力、內(nèi)存使用、網(wǎng)絡(luò)等功能,是最基本的資源包裝整合,相當(dāng)于是一臺計算機,而我們是在它上面開發(fā)的應(yīng)用,相當(dāng)于是一個分布式的數(shù)據(jù)倉庫,讓用戶可以在上面做基本的ETL處理、SQL查詢、數(shù)據(jù)導(dǎo)入導(dǎo)出等,還有一些MATLAB、統(tǒng)計軟件的功能。

除了這些基本功能之外,我們還提供了一整套數(shù)據(jù)挖掘算法Xlib(見 http://102.alibaba.com/competition/addDiscovery/faq.htm 的說明),讓用戶可以建模、做高級的數(shù)據(jù)分析。另外,我們還可能提供一些編程框架,讓用戶自己可以編寫程序進行數(shù)據(jù)處理,比如單機上有Python、Java,我們就提供MapReduce編程框架、或者專門為了解決迭代問題的Graph編程框架(也叫做BSP,跟Google Pregel模型很類似)。我們會逐漸加入各種內(nèi)容,凡是涉及數(shù)據(jù)處理的工具和編程框架我們都會想辦法加進去,讓開發(fā)者和用戶可以對數(shù)據(jù)進行各方面的操作。

總而言之,ODPS就是基于飛天分布式系統(tǒng)提供的一套關(guān)于數(shù)據(jù)處理各方面工具和框架的服務(wù)。

InfoQ:對應(yīng)AWS的話,相當(dāng)于是RedShift和EMR吧?

徐常亮:可以這么去對應(yīng)。純粹從功能來講,我們會提供類似EMR和RedShift的功能。但我們不僅于此,我們還有建模的庫、機器學(xué)習(xí)的庫,從編程框架的豐富性上面也不僅僅是MapReduce,還有迭代框架。暫時來看我們做的可能更多,當(dāng)然AWS也在逐步提供更多的功能。

另外有一個很大的不同是,ODPS是作為一個有機的整體來提供這些服務(wù)的,不同的功能是服務(wù)的不同層面,而不是單賣的功能。比如在我同一個體系里面,我數(shù)據(jù)倉庫類型的一個SQL處理好了,我緊接著一個MapReduce的作業(yè)就可以很好地關(guān)聯(lián)起來,他們的物理存儲數(shù)據(jù),以及描述這些數(shù)據(jù)的元數(shù)據(jù),都是在同一個體系里面。不像RedShift和EMR,它們是在一邊處理完了之后,要把數(shù)據(jù)導(dǎo)出到另一套系統(tǒng)里面去處理,它們的元數(shù)據(jù)描述不是互相共享的,要有一個第三方來做對應(yīng),比如RedShift表結(jié)構(gòu)是怎樣的,EMR的結(jié)構(gòu)要怎樣相應(yīng)的去設(shè)計。ODPS希望讓對象都在一起,讓要處理的對象和元數(shù)據(jù)都在一個ODPS體系里。在此之上,你要做授權(quán)也好,管理維護也好,都是同一個界面,對用戶而言就是在一套系統(tǒng)里面做不同的處理,用戶覺得我就是在一臺機器里面,只不過在不同的文件夾。AWS的話,用戶會感知這是兩臺計算機。

另一個區(qū)別是,ODPS希望做成服務(wù):open data processing service,我們希望看到用戶把數(shù)據(jù)往里灌,相當(dāng)于是公有云的用法,總之?dāng)?shù)據(jù)都放在同一個系統(tǒng)里面。如果以后用戶之間希望他們的數(shù)據(jù)之間發(fā)生一些作用,則能夠非常容易的做到,只需做一些互相授權(quán)就可以。而AWS的RedShift和EMR對各自用戶而言都相當(dāng)于是私有云,它自己處理的東西只在它自己的空間里,如果要跟外部交互,可能必須要借助S3等外界方式。當(dāng)然了,可能它原本的設(shè)計目標(biāo)就是這樣,這個也談不上優(yōu)劣,只是目標(biāo)不同。

在我們這個體系里,因為用戶的東西都在一個平臺上,所以我們其實也可以像蘋果那樣開一個應(yīng)用市場,用戶把數(shù)據(jù)挖掘算法或者清理流程當(dāng)做一個應(yīng)用來發(fā)布,別人如果想用可以來買。當(dāng)然這個可能之后有一系列的如何算錢之類的問題要處理,但平臺在這兒,如果商業(yè)、產(chǎn)品愿意多考慮,這個事情也是水到渠成的。這個和整個阿里巴巴的愿景是相關(guān)的:阿里巴巴想成為數(shù)據(jù)分享的第一平臺。這就真的要有這么大的一個地方做存儲,要有那么大的計算能力,讓用戶有能力來處理大數(shù)據(jù),還要保證安全。其實安全也是這次大賽我們比較緊張的地方:我們既要允許用戶的代碼跑上來,又要保障用戶的數(shù)據(jù)安全,這是個非常大的挑戰(zhàn)。

InfoQ:你們組是怎樣分工的?

徐常亮:大致有三個方向:數(shù)據(jù)倉庫場景,數(shù)據(jù)挖掘場景,編程框架場景。其中編程框架不僅是SDK,還會有一些重新定義,會引入一些新的框架。比如Hadoop上有Hive這樣用SQL做的,還有Yahoo的Pig——完全是另外一種語言,還有現(xiàn)在很火的Spark,雖說是基于Scala,但數(shù)據(jù)處理那一層又是抽象了一層出來,提供了groupby、filter這些算子。我們也會提供類似的東西,或者讓用戶根據(jù)我們提供的基礎(chǔ)編程能力來定義自己的框架。也可以說我們今后可能會自己再造一套分布式系統(tǒng)的處理語言,或者讓用戶來創(chuàng)造也有可能。

面向數(shù)據(jù)倉庫的SQL,和數(shù)據(jù)挖掘有一個Xlab讓用戶能像寫R或者Madlib、MATLAB一樣建模,這些是基本算法的包裝,都是用戶可見的。還有很多模塊,大家不一定看得見比如SQL的執(zhí)行引擎怎么做,數(shù)據(jù)的存儲怎么做。去年我們做了一個比較大的事情,我覺得跟飛天5K可以媲美:飛天5K是單集群5000臺,但今天5000臺當(dāng)然也是不夠的,你需要有多個5000臺。ODPS就有一套系統(tǒng)能夠管理多個集群,同時讓用戶覺得自己只是面對一個集群。這里涉及很多策略,決定你的計算到底在哪個集群上跑,數(shù)據(jù)在哪個集群的哪臺機器上存放,是否在多個集群上都有存放,多個集群間數(shù)據(jù)的平衡復(fù)制怎么做等等。這個東西管的事情是比較多的,我們對外希望做到比較透明化。

InfoQ:你個人主要關(guān)注的方向是什么?

徐常亮:和計算相關(guān)的我都關(guān)注。比如數(shù)據(jù)倉庫SQL這塊,從解析到執(zhí)行計劃到執(zhí)行引擎、存儲,我都會看。這塊是我直接負責(zé)。另外還有編程框架這塊也是我這邊會看的。這兩塊的同學(xué)直接匯報給我。另外,整體ODPS的架構(gòu)怎么做、上面的控制集群怎么做的,我也會參與。

InfoQ:你們做過的這些東西當(dāng)中,你覺得最值得跟我們分享的一件事是什么?

徐常亮:可能有一點是比較有難度的,就是怎么做開放。今天我們看Hadoop社區(qū),因為它是開源的,大家對它各方面都有所了解,所以可以基于它的架構(gòu)出很多新的東西。新東西都是有跡可循的,不是突然就冒出來的,Hadoop上的很多新東西都是基于單機時代的理論,比如數(shù)據(jù)庫上的理論,這些東西都是有一定基礎(chǔ)的,可能今天是有人把它們應(yīng)用到了分布式環(huán)境下就成了新東西。

ODPS是開放數(shù)據(jù)處理服務(wù),而開放不一定是開源,目前飛天和ODPS的代碼都還沒有公開的計劃,即使現(xiàn)在公開出去你也用不了,因為要依賴很多配套設(shè)施。所以,在不開源的情況下做開放,這里面需要很好的平衡。

開放,意味著讓用戶自由、方便的使用我們的計算能力,充分挖掘數(shù)據(jù)的價值。對ODPS而言,要做到開放,讓用戶的想象力充分激發(fā),取決于我們能把編程框架做得多漂亮。編程框架很重要。SQL、算法庫這些可能更多面向BI的人員,他們可以拿相對現(xiàn)成的東西來用;開放數(shù)據(jù)處理服務(wù)在編程框架上做的事情更多是面向開發(fā)者,讓他們根據(jù)我們開放的引擎、構(gòu)造通過接口暴露出去,讓他們能夠用,又不至于把下面的運作模式都暴露出來,既要讓用戶有很高的定制權(quán),又不違背我們的安全原則和我們對分布式和單機的平衡選擇。

MapReduce就是一個很好的方式,因為有人給我們領(lǐng)過這條路,大家覺得這個方法比多線程處理鎖的關(guān)系要容易很多,仿佛在寫一個單機程序,只不過步驟不同。所以,我們提供的MapReduce可以照抄已有的東西。但是今后很多東西可能不是兩個步驟就能處理完的,我們想用DAG——就是有向無環(huán)圖,用比如現(xiàn)在的YARN或者MapReduce 2.0來支持這樣的理念,像Hortonworks那個Tez框架就能支持一連串的、若干個task相繼的關(guān)系,只要你不要成環(huán),能描述依賴關(guān)系為有向無環(huán)圖,我們都能把它分解出來,讓用戶在各個階段做什么操作,這樣來定制。這個東西我們會拿出來給用戶用。當(dāng)然對開發(fā)者來說,DAG就比MapReduce復(fù)雜一些,但它的處理能力和自由度更高。

我們還在想一些能幫用戶做包裝的東西,比如寫一個wordcount:可能用戶寫一個MapReduce也很簡單,但如果在SQL里面寫就只要一個select和groupby就完成了,一句話就覆蓋了wordcount的東西。所以,我們能不能給用戶再包裝一些語義?我們提供一個groupby的算子,用戶就可以用。SQL雖然也被稱為一門編程語言,但是它畢竟不像我們一般語言的邏輯,你可以寫for循環(huán),if之類的,控制能力很強,而SQL就感覺你只能表述一下自己想干什么,后面的細節(jié)很難控制,所以開發(fā)人員會感覺受局限。提供類似于SQL的基本算子——groupby、filter這種想法,在Spark里面也有類似的體現(xiàn),我們可能也會做類似的事情。我們會考慮是否有一些東西能沉的更底層一些,或者有些東西可以拔高一些,以此來做一些設(shè)計或權(quán)衡。

當(dāng)然這個思路可能有很多,我只是提出幾個點,如MapReduce、DAG、結(jié)合SQL算子來提供高層功能,讓用戶跟寫程序一樣。我覺得寫一個SQL可能還不是寫程序,寫程序還是有變量賦值、關(guān)系等更多操作。今后我也不知道會不會有別的,但這幾個地方我們會下很大的力氣,希望在整個大體系下做到安全并提供關(guān)鍵功能,在里面能做迭代、廣播等MapReduce不提供的東西,讓這些都能通過編程框架放出去,外面的人就能更好的控制分布式系統(tǒng)所具有的能力。如果真能做到的話,我覺得就能把開放做的很好。

InfoQ:所以從某種程度上而言,Hadoop下面出來這么多子項目,也是因為MapReduce的局限性?

徐常亮:某些方面是這樣。你看Hadoop 2.0,或者說YARN調(diào)度器的出現(xiàn),很大的原因就是Hadoop 1.0的job tracker只支持MapReduce和map only這兩種簡單的調(diào)度模型。在YARN上你就可以做MPI或者迭代等各方面事情,Spark也可以在YARN上跑,各方面的事情都相對容易。對ODPS而言,因為基于飛天,而飛天的調(diào)度——伏羲——從第一天開始就支持YARN今天能支持的模式。從這點也可以看到飛天的發(fā)展歷程,一開始很多想法還是比Hadoop好的。

InfoQ:如果想提供這些比較豐富的模式,也是可以直接復(fù)制現(xiàn)成的子項目的吧?

徐常亮:這是一個做法。比如SQL,因為有標(biāo)準(zhǔn)的定義,我們就可以很容易的復(fù)制,只要你寫出這個SQL,我的解析器就能按你想的那樣解析它,你也想不出別的花招來。這方面已有的理論和體系都比較成熟了。但是Spark你拿出來,雖然這套東西我覺得也很不錯,但是畢竟還沒有像數(shù)據(jù)庫理論那么定型,或者說自成體系,它有一些缺點。

我們是拿來主義,它好的地方我們就拿過來。Spark基于Scala寫的,對于很多同學(xué)還是比較陌生的,如果我們把它移植成Java或者Python,這兩個語言的社區(qū)更大,可能會更容易做。其實Spark這個東西在今天的ODPS上也可以跑起來,但我們這上面跑起來的Spark可能執(zhí)行體系是完全不一樣的。這塊也是開放編程框架未來的一個方向,以后比如你可以把Pig也搬上來,都是有可能的。Spark有十幾二十個算子,現(xiàn)在已經(jīng)差不多都能在我們上面跑起來了。

今天我們做飛天也好,ODPS也好,我們做這些自主研發(fā)的東西并不意味著我們在閉門造車,我們一定會看外面好的東西,有些東西我們會結(jié)合我們自己的場景做整合或者微創(chuàng)新、創(chuàng)新。

InfoQ:對于ODPS,目前業(yè)務(wù)部門來提需求的多嗎?

徐常亮:有一些業(yè)務(wù)部門的需求很明確,比如業(yè)務(wù)部門可能做一些數(shù)據(jù)分析,說我想更快,或者要處理更大的數(shù)據(jù),以前支持TB級,現(xiàn)在可能要PB級。有些需求很明確,這些我們就想辦法去解決,而且這些在分布式系統(tǒng)下,數(shù)據(jù)量變大本身就是線性擴展必須解決的問題,否則分布式系統(tǒng)就沒有意義了。而處理速度更快這方面,我們也在做一些自己的探索,比如剛才我提到我們在里面做迭代很容易,有一些數(shù)據(jù)不落地,在實時化處理上,今天我們內(nèi)部的SQL跑的速度非??炝?,比Hive這些都要快。今后感興趣的話我們可以公布一些benchmark的數(shù)據(jù)。

另外一些方面,比如編程接口,這些用戶都是開發(fā)人員,他們的品味都會不一樣,所以這就是為什么我們希望把底層包裝好、放出來,讓開發(fā)人員可以自己定制。這樣每個人都會高興。當(dāng)然今天可能就是只能有一部分人高興,畢竟把Java、C、PHP、Python的同學(xué)放在一起肯定是會意見不同的,我們希望還是把底層的算子、我們定義的一些東西拿出來,這樣以后定制能力更高。如果每個人的需求都一個一個去搞,我覺得很難實現(xiàn)。

InfoQ:你覺得實現(xiàn)過的最有挑戰(zhàn)的東西是什么?

徐常亮:我覺得那些學(xué)術(shù)性的、理論性的東西其實都解掉了,也看得到別人已經(jīng)做好的產(chǎn)品,這方面沒什么特別的難題。一路走來,我覺得還是工程問題居多。比如分布式系統(tǒng)里面本來是小概率的事件變成常態(tài),而且因為不斷地交互會放大,解決這些小概率事件變成了挺難的事情,因為這些問題往往在你的防范之外,你要怎么定位、解決,是非常有挑戰(zhàn)的事情。

再一方面就是早期,不管飛天還是ODPS在人員配備上,人數(shù)和工作進度的壓力都很大,有一些工程、項目管理上的問題。當(dāng)然這個不是技術(shù)上的挑戰(zhàn)了。挑戰(zhàn)都是有的,但是一定會解決。

最常見的小概率事件就是設(shè)備壞掉。硬盤壞掉大家聽到很多,另外網(wǎng)卡也會壞掉。雖然理論上盤古團隊會處理硬盤壞掉的問題,但早期不管是調(diào)度還是存儲都是坐在一起的,所以大家一起處理,更何況我們這兒有真實的場景,有大數(shù)據(jù)量,可以發(fā)現(xiàn)很多問題。

我們之前碰到一個網(wǎng)卡的問題:一臺機器大概有千分之一的幾率網(wǎng)卡壞了,它壞了又不是全壞,大概是萬分之五的機會會把一個數(shù)據(jù)傳錯,一個bit會翻轉(zhuǎn)——比如1變成0??偟膩碚f是將近億分之一的機會出一個錯誤。但是因為交互的數(shù)據(jù)量大,就給撞上了。

這個問題怎么發(fā)現(xiàn)的呢,剛才提到ODPS的幾個特點,其實有一點很重要但是我沒說,就是正確性。我們對正確性的要求很高,因為我們的第一個正式的商業(yè)客戶是小微金服,就是阿里小貸。他們的業(yè)務(wù)關(guān)系到錢,直接關(guān)系到你能否把這個錢貸出去,所以我們要對他們的壞賬率負責(zé)。在這個層面上,我們對準(zhǔn)確性要求很高,所以每一次發(fā)布之前,我們都會做全批量的驗證。這個過程我們需要比對各版本的數(shù)據(jù),確保他們都是對的。這個過程,因為我們有數(shù)據(jù)做對比,所以發(fā)現(xiàn)有這么一個問題。這個用戶都不一定能發(fā)現(xiàn),他可能某一次跑發(fā)現(xiàn)某個數(shù)據(jù)不能解釋,但是跑下一次又ok了,這個事情可能就過去了,因為億分之一的幾率幾乎肯定不會再次發(fā)生在他頭上,可能就換一個人。

發(fā)現(xiàn)問題后跟飛天的同學(xué)溝通,飛天網(wǎng)絡(luò)層的同學(xué)可能會覺得是不是你們上層邏輯寫錯了,造成這種隨機性,我們就要想辦法證明我們上層邏輯沒錯。后來我們專門做了一個端到端的數(shù)據(jù)校驗checksum。之前我們可能就是像HDFS那樣對存儲的數(shù)據(jù)做一個checksum,網(wǎng)絡(luò)傳輸過程中做因為會帶來一些額外的開銷所以以前是沒有全做的,但因為發(fā)生了這件事就不得不做了。所以我們必須對自己每一次的版本發(fā)布做一個很嚴(yán)謹(jǐn)?shù)幕貧w,有任何錯誤都不能放它過去。這也是我們的一大特色。

InfoQ:最后談?wù)勀銓μ斐厮惴ǜ傎惖钠诖?

徐常亮:ODPS是今年1月24日開始商用,開始邀請一些用戶進來。我們希望在這次大賽開始的時候,也就是4月底,將整個ODPS正式對外商用。到時候我覺得外面的用戶也會反饋很多,借助天池大賽也是看一看我們的競賽選手對ODPS的反饋。

首先,我們畢竟是做平臺出身,在用戶體驗方面可能做的不太好。我們在平臺底層投入很大,但是對交互式的使用、API可能并不是定義的很好。這方面用戶如果有反饋,對我們來說是很大的幫助。商業(yè)化以后,我們要對外部的方方面面要投入更多。所以希望借著大賽做出相應(yīng)的改進。

另外,我們這次提供給用戶的東西還是比較多。1月我們只有SQL,4月我們會開放Xlib機器算法平臺幫助用戶建模,這個我們覺得還是很有威力的。去年我們內(nèi)部做了一次大賽,類似這次的,得獎的前幾名基本都用了這個超級武器,這個在今天同類產(chǎn)品里面基本上是沒有的。我們也是希望借這次大賽把招牌打響,當(dāng)然也是看看用戶的反饋,讓它不僅是威力很大,也要讓用戶的整個建模流程比較流暢。

另外,我們會把一些用戶可自定義編程的東西放出來。當(dāng)然我們也不希望一次開放太多,前期有MapReduce框架和結(jié)合SQL的udf,讓用戶可以自定義一些函數(shù)。這塊我們也希望看一下用戶的體驗。這一塊4月不會商用,但是會開放出來做一個測試,可能就是以大賽的用戶為主。

最后,我們也在探索這個“數(shù)據(jù)分享第一平臺”該怎么做。今天天貓把數(shù)據(jù)分享出來讓大家建模,如果能達到很好的推薦效果,我們阿里巴巴也會受益很大。因為有幾千支隊伍,大家會有不同的想法,也許也會有新的東西。在我看來我們要做數(shù)據(jù)分享,就是要讓大家能看到數(shù)據(jù)的價值。這就要看大家的想象力了。

嘉賓介紹

徐常亮(@常亮姓徐),北京大學(xué)雙學(xué)士(主修化學(xué),轉(zhuǎn)入IT行業(yè)純屬興趣),普林斯頓大學(xué)博士(計算化學(xué)方向),曾在紐約時報網(wǎng)絡(luò)部任職搜索組組長,開發(fā)、維護自主開發(fā) 的搜索引擎,最早期的Amazon ec2、s3和Hadoop用戶。2009年加入阿里云,曾負責(zé)阿里云分布式平臺--飛天--底層基礎(chǔ)維護,現(xiàn)在主要負責(zé)ODPS平臺的架構(gòu)和開發(fā),產(chǎn)品主要滿足數(shù)據(jù)倉庫、分布式編程框架、數(shù)據(jù)交互等各種場景。

鏈接已復(fù)制,快去分享吧

企業(yè)網(wǎng)版權(quán)所有?2010-2024 京ICP備09108050號-6京公網(wǎng)安備 11010502049343號