域名預(yù)訂/競(jìng)價(jià),好“米”不錯(cuò)過
百度開放云總經(jīng)理劉旸看來,當(dāng)今世界正面臨著由技術(shù)突破帶來的全行業(yè)升級(jí),在這場(chǎng)商業(yè)劇變中,背后是三個(gè)重要的「重新定義」:第一,云計(jì)算重新定義了「IT」。它改變了企業(yè)所需要的 IT 資源的擁有與供給的方式,基于互聯(lián)網(wǎng)級(jí)的資源管理平臺(tái),徹底改變了傳統(tǒng)企業(yè)的 IT 模式,為新的商業(yè)創(chuàng)新提供了可能;
第二,大數(shù)據(jù)重定義了「資產(chǎn)」,相較于以往的重資產(chǎn),企業(yè)在經(jīng)營(yíng)中不斷生成的數(shù)據(jù),將成為企業(yè)未來繼續(xù)生存并保持競(jìng)爭(zhēng)力的砝碼;第三,人工智能重定義了「效率」,通過語(yǔ)音、圖像、視頻、自然語(yǔ)言識(shí)別和智能處理等技術(shù),讓傳統(tǒng)的計(jì)算機(jī)具備更為強(qiáng)大的能力,大幅提升工作效率。
基于以上三個(gè)重新定義,百度開放云的重新堆棧也分為三層:云計(jì)算層、大數(shù)據(jù)應(yīng)用層、和人工智能層。
處理大數(shù)據(jù)無非以下四個(gè)步驟:
收集:原始數(shù)據(jù)種類多樣,格式、位置、存儲(chǔ)、時(shí)效性等迥異。數(shù)據(jù)收集從異構(gòu)數(shù)據(jù)源中收集數(shù)據(jù)并轉(zhuǎn)換成相應(yīng)的格式方便處理。
存儲(chǔ):收集好的數(shù)據(jù)需要根據(jù)成本、格式、查詢、業(yè)務(wù)邏輯等需求,存放在合適的存儲(chǔ)中,方便進(jìn)一步的分析。
變形:原始數(shù)據(jù)需要變形與增強(qiáng)之后才適合分析,比如網(wǎng)頁(yè)日志中把IP地址替換成省市、傳感器數(shù)據(jù)的糾錯(cuò)、用戶行為統(tǒng)計(jì)等。
分析:通過整理好的數(shù)據(jù)分析what happened、why it happened、what is happening和what will happen,幫助企業(yè)決策。
其實(shí),如果涉及到“大數(shù)據(jù)”,不得不提百度最大的業(yè)務(wù)——搜索。百度搜索已經(jīng)收錄全世界超過一萬億的網(wǎng)頁(yè),每天響應(yīng)中國(guó)網(wǎng)民大約幾十億次的請(qǐng)求。除此之外,百度還有另外20多個(gè)用戶過億的產(chǎn)品線,而且各個(gè)產(chǎn)品底層的大規(guī)模數(shù)據(jù)處理,都需要使用百度團(tuán)隊(duì)維護(hù)的大數(shù)據(jù)處理平臺(tái)。
百度分布式計(jì)算平臺(tái):離線引擎優(yōu)化
關(guān)于MapReduce
首先介紹主要的離線計(jì)算模型——MapReduce,百度從2007年開始引進(jìn)Hadoop 0.15.1,隨后快速發(fā)展,2011年百度的MR單集群規(guī)模達(dá)到5000臺(tái),到2013年已經(jīng)多達(dá)1.3萬臺(tái),這也是截止到目前為止全世界最大的單集群。Hadoop全集群規(guī)模為10萬量級(jí), 作業(yè)量達(dá)到了百萬量級(jí),日均CPU利用率超過80%,遠(yuǎn)超業(yè)界同行,百度開放云(http://cloud.baidu.com)底層依賴的大規(guī)模集群調(diào)度、資源隔離等技術(shù)能力世界領(lǐng)先。除了在規(guī)模方面不斷擴(kuò)大,百度一直在Hadoop性能分析方面進(jìn)行了大量的優(yōu)化。2013年的測(cè)試結(jié)果顯示,百度內(nèi)部MR實(shí)現(xiàn)相比于開源Hadoop性能提升30%。典型優(yōu)化,例如Hadoop中的Shuffle,百度將其做成一個(gè)統(tǒng)一的shuffle服務(wù),不再占用Map或Reduce槽位。比如對(duì)關(guān)鍵熱點(diǎn)函數(shù)采用SSE向量化等。
2014年,百度繼續(xù)對(duì)計(jì)算引擎做了大幅優(yōu)化, Native C++實(shí)現(xiàn)的DAG引擎正式上線。下圖是一個(gè) 4輪MR Job實(shí)現(xiàn)的典型業(yè)務(wù)流示例,DAG引擎上線后,可以優(yōu)化成一個(gè)DAG作業(yè),可以避免3次Reduce寫多副本引入的磁盤IO及網(wǎng)絡(luò)IO,還可以規(guī)避2次Map讀HDFS的IO以及處理耗費(fèi)。
下圖是一個(gè)真實(shí)業(yè)務(wù)由SQL計(jì)算表示層翻譯下來的,基于MR引擎時(shí),SQL會(huì)翻譯成25個(gè)MR JOB,如果百度把它優(yōu)化成DAG,能夠避免很多次磁盤IO操作。在優(yōu)化之后,運(yùn)行時(shí)間直接縮減到1個(gè)小時(shí),優(yōu)化前后的差異非常顯著。
內(nèi)存流式Shuffle
2014年,百度對(duì)Shuffle進(jìn)行重大重構(gòu),初期實(shí)習(xí)生同學(xué)完成的Demo以BaiduSort名義參與了2014年Sort BenchMark大數(shù)據(jù)排序國(guó)際大賽,并獲得冠軍(2015年百度沒再參加,國(guó)內(nèi)其他公司以同樣技術(shù)通過更大規(guī)模集群刷新記錄)。2015年,新Shuffle技術(shù)完成全面上線。Hadoop默認(rèn)Shuffle實(shí)現(xiàn)為基于磁盤Pull模式,計(jì)算過程顯式分成Map、Shuffle、Reduce過程;Baidu研發(fā)的新Shuffle采用內(nèi)存流式Push模式,Map端完成部分記錄處理后直接從內(nèi)存中將計(jì)算結(jié)果推送給下游。
舉例來說,Map處理256MB輸入數(shù)據(jù),在內(nèi)存流式Shuffle模式下,處理完100條記錄以后,直接通過內(nèi)存推送到下游,這樣就形成流水線方式處理。不再有顯式的Shuffle階段。
目前,該Shuffle組件為通用組件,正逐步推廣到其他分布式計(jì)算平臺(tái)中。
百度分布式計(jì)算平臺(tái):系統(tǒng)架構(gòu)演進(jìn)
前面重點(diǎn)介紹了百度開放云BMR服務(wù)中涉及到的規(guī)模、性能方面優(yōu)化思路和效果,接下來跟大家一起分享一下,百度遇到的整體架構(gòu)方面挑戰(zhàn)以及優(yōu)化思路。
2012年系統(tǒng)架構(gòu)中,最主要的兩個(gè)離線計(jì)算平臺(tái),左邊是以MapReduce模型為主的批量計(jì)算平臺(tái)BMR,右邊是MPI /BSP模型為主的大規(guī)模機(jī)器學(xué)習(xí)平臺(tái)BML。從最下面可以看到,MapReduce和MPI模型底層硬件就有較大差異。Hadoop分布式文件系統(tǒng)多副本以及強(qiáng)大的故障處理機(jī)制,使得Raid卡完全沒有必要,采用多塊超大容量SATA硬盤非常適合。
而MPI差別較大,MPI是一個(gè)消息傳輸框架,它在設(shè)計(jì)之初就沒有考慮太多異常處理,因此它對(duì)底層系統(tǒng)可靠性要求非常高。百度采用了非常高配置的服務(wù)器,例如帶Raid卡的sas硬盤,超大內(nèi)存、萬兆互聯(lián)等。
BMR Hadoop由大量SATA硬盤的服務(wù)器構(gòu)成,存儲(chǔ)系統(tǒng)為HDFS,資源調(diào)度層面百度有自研的調(diào)度器ARK(與社區(qū)Yarn比較類似)。而BML大規(guī)模機(jī)器學(xué)習(xí)平臺(tái)上,支持的業(yè)務(wù)樣本超過數(shù)百億計(jì)量級(jí),特征規(guī)模也遠(yuǎn)超百億。百度在運(yùn)行機(jī)器學(xué)習(xí)時(shí),需要先啟動(dòng)MapReduce,然后再將數(shù)據(jù)從HDFS分發(fā)到各個(gè)MPI節(jié)點(diǎn),這種方式對(duì)網(wǎng)絡(luò)帶寬的要求很高。
系統(tǒng)部同事持續(xù)改進(jìn)內(nèi)網(wǎng)帶寬的同時(shí),BML平臺(tái)層面也在思考應(yīng)該如何解決跨MR和MPI倆大集群間的日益嚴(yán)重的網(wǎng)絡(luò)帶寬問題。
另外還有一個(gè)需求:MPI是一種事務(wù)性調(diào)度模型,比如一個(gè)業(yè)務(wù)需要200臺(tái)機(jī)器,如果平臺(tái)此時(shí)只有199臺(tái)機(jī)器空閑,實(shí)際也很難用起來(除非修改提交參數(shù),但涉及輸入數(shù)據(jù)重新分塊處理等比較復(fù)雜)。另外MPI計(jì)算往往顯式分為計(jì)算、傳輸、計(jì)算等階段(即BSP模型),因此資源利用波動(dòng)性較大,例如CPU計(jì)算階段,網(wǎng)絡(luò)空閑;網(wǎng)絡(luò)傳輸或全局同步階段,CPU空閑。為解決這個(gè)問題,百度在MPI集群中引入IDLE計(jì)算,IDLE業(yè)務(wù)資源占用充分可控,典型的IDLE任務(wù)如MapReduce任務(wù),而執(zhí)行MR任務(wù)又會(huì)進(jìn)一步加劇MR集群和MPI集群間網(wǎng)絡(luò)帶寬問題。
基于以上考慮,百度正式將MPI底層硬件替換為替換成高配置存儲(chǔ)型服務(wù)器,硬盤同構(gòu),文件系統(tǒng)都采用HDFS,BML算法輸入和輸出均通過HDFS,不再是本地文件系統(tǒng)。
BML機(jī)器學(xué)習(xí)執(zhí)行引擎層面,百度基于MPI封裝了DVCE(Distributed VectorComputingEngine)分布式向量計(jì)算引擎,屏蔽MPI過于低層的編程接口,通過高層抽象自動(dòng)翻譯為MPI任務(wù),這就是百度第二代專門針對(duì)“并行計(jì)算”開發(fā)的系統(tǒng)框架。
2014年,BML機(jī)器學(xué)習(xí)執(zhí)行引擎遷移到ELF第三代并行計(jì)算框架, ELF采用ParameterServer架構(gòu),大幅降低機(jī)器學(xué)習(xí)算法開發(fā)代價(jià),對(duì)比于百度的第二代框架DVCE,在開發(fā)效率方面有大幅度的提升。離線計(jì)算方面,完成了Native C++ DAG引擎上線,百度內(nèi)部叫DCE(Distributed ComputingEngine)。
2014年BMR和BML底層都采用Matrix完成資源分配與隔離,其他平臺(tái)如小批量計(jì)算系統(tǒng)TaskManager和毫秒級(jí)計(jì)算延遲的Dstream系統(tǒng),都基于業(yè)務(wù)需求特殊性,采用獨(dú)立的資源隔離和調(diào)度系統(tǒng)。
2015年的架構(gòu)改進(jìn),主要是將所有的計(jì)算模型均遷移到Matrix+Normandy架構(gòu)。Normandy兼容社區(qū)Yarn調(diào)度接口,開源社區(qū)新型興計(jì)算平臺(tái)可以很輕松的接入到百度的計(jì)算生態(tài)里。
百度已經(jīng)介紹了百度大數(shù)據(jù)分析和挖掘平臺(tái)主要的底層引擎和架構(gòu),接下來談一下最新思考。
系統(tǒng)底層是IDC硬件,接著是Matrix,再是Normandy,然后是幾個(gè)主要的引擎。之前介紹底層架構(gòu)的統(tǒng)一,比如在硬件、調(diào)度、存儲(chǔ)等方面的統(tǒng)一。實(shí)際上各個(gè)系統(tǒng)對(duì)外的結(jié)果,都有自己的接口,如果要使用MR,很多人寫MR程序都是直接調(diào)用Hadoop原生接口,配置涉及到的多個(gè)參數(shù)。部分業(yè)務(wù)還需要流式系統(tǒng)完成日志清洗,在經(jīng)過MapReduce模型批量預(yù)處理,隨后通過ELF完成機(jī)器學(xué)習(xí)模型訓(xùn)練,最后再通過MapReduce模型完成模型評(píng)估,可見一個(gè)業(yè)務(wù)需要跨越多個(gè)模型,需要業(yè)務(wù)線同學(xué)同時(shí)熟悉很多模型和平臺(tái),而每一個(gè)模型又有各自特點(diǎn)和接口。只有足夠了解模型的細(xì)節(jié)和接口后,才能真正的利用好該模型。
于是百度正式立項(xiàng)BigFlow項(xiàng)目(原項(xiàng)目名DataFlow,圖片未來及修改),將模型的細(xì)節(jié)屏蔽。平臺(tái)自動(dòng)決定選擇合適的并發(fā)度,甚至智能選擇應(yīng)該把這個(gè)翻譯到哪個(gè)計(jì)算模型。BigFlow可以支持多個(gè)不同的計(jì)算引擎(每個(gè)引擎在其適合的領(lǐng)域做到極致),充分發(fā)揮各引擎性能和功能。所以用戶使用同一套接口,便能對(duì)應(yīng)到不同的任務(wù)。由于采用高層抽象,業(yè)務(wù)開發(fā)效率獲得大幅提升,代碼量大幅減少,其維護(hù)成本也大幅降低。BigFlow集成常見優(yōu)化手段,因此將大幅提升平臺(tái)有效資源占用。
百度開放云——大數(shù)據(jù)+智能
最后,向大家簡(jiǎn)要介紹百度開放云。2014年,百度正式?jīng)Q定將服務(wù)內(nèi)部業(yè)務(wù)多年的云計(jì)算技術(shù)正式對(duì)外提供服務(wù),即百度開放云,對(duì)應(yīng)官網(wǎng)http://cloud.baidu.com。百度開放云大數(shù)據(jù)方面,BMR已經(jīng)對(duì)外開放,而更多的大數(shù)據(jù)分析和服務(wù)都還未對(duì)外開放。BMR集群上可以做到按需部署,用戶專享,更關(guān)鍵的是完全兼容開源的Hadoop/Spark平臺(tái),開放云客戶基于Hadoop、Spark、Hbase等已經(jīng)實(shí)現(xiàn)的大數(shù)據(jù)業(yè)務(wù)幾乎不用修改就可以平滑遷移到云上。多維分析服務(wù)Palo,它完全兼容MySQL網(wǎng)絡(luò)協(xié)議,因此,客戶朋友們熟悉的Mysql Client的工具均可使用。
同時(shí),Palo支持JDBC、ODBC的編程接口,如果已有程序采用的是JDBC、ODBC,那么遷移成本幾乎為零。最后看到它與業(yè)界主流的BI工具商業(yè)分析的工具對(duì)接的,比如Tableau、Saiku、BIEE、R。
最后再介紹機(jī)器學(xué)習(xí)云服務(wù)BML,BML中提供的深度學(xué)習(xí)技術(shù),曾獲得2014年百度最高獎(jiǎng)。BML提供端到端的解決方案,里面提供的算法均服務(wù)百度內(nèi)部業(yè)務(wù)多年,典型如網(wǎng)頁(yè)搜索、百度推廣(鳳巢、網(wǎng)盟CTR預(yù)估等)、百度地圖、百度翻譯等。
使用開放云BMR和BML、Palo等,就可以立刻、直接享用與百度搜索同等品質(zhì)的大數(shù)據(jù)分析和挖掘服務(wù)!
申請(qǐng)創(chuàng)業(yè)報(bào)道,分享創(chuàng)業(yè)好點(diǎn)子。點(diǎn)擊此處,共同探討創(chuàng)業(yè)新機(jī)遇!