時至今日,“Big data”(大數據)時代的來臨已經毋庸置疑,尤其是在電信、金融等行業,幾乎已經到了“數據就是業務本身”的地步。這種趨勢已經讓很多相信數據之力量的企業做出改變。恰逢此時,為了讓更多的人了解和使用分析大數據,CSDN(微博)獨家承辦的大數據技術大會于今日在北京中旅大廈召開。本次大會匯集Hadoop、NoSQL、數據分析與挖掘、數據倉庫、商業智能以及開源云計算架構等諸多熱點話題。包括百度、淘寶、新浪等業界知名專家與參會者齊聚一堂,共同探討大數據浪潮下的行業應對法則以及大數據時代的抉擇。

以下為文字實錄:
今天我給大家講一下MapReduce的框架,這主要是我們自己實現的一個框架,基于C++能夠提升資源利用率的一個框架,簡稱HCE。首先我做一個大概介紹。我做分布式大概有6,7年的時間,剛才劉主編也說過,上Twitter每秒要處理上百萬條數據。當然這不是我今天演講主題,像FaceBook處理每天海量數據,要存儲這些數據需要利用到快存儲。在傳統快存儲上要做簡單的索引,所以就利用到一些把非結構化轉變成結構化的一些工具。在基于這些上面,他要做一些計算,而分布式計算大概分為兩個,一類是批量分布式計算,MapReduce是最典型批量計算。有一部分衍生品,像機器學習,有很多迭代性計算,為了高效會有一些延伸。還有現在雅虎說的MPI,是因為MapReduce現象還是計算,而MPI是面向通信,對一些數據挖掘,機器學習方面的東西有不同的模型。
今天我講HCE,是基于MapReduce的一個擴展。這個HCE框架,本身也是一個開源軟件,一年前我們就作為有所涉及。今天我講的主要分四個部分:Backgroundand Motivation,性能評估,總結。
第一方面我們介紹三部分,現狀,遇到的挑戰和一個簡單解決方案。為什么要提出HCE這個框架呢?首先,我們用集群一般會考慮幾方面問題,我們希望集群是容易控制的,這些都是成本問題。第二,我們需要考慮集群的高效性,因為對于百度來說,前陣子一個分會上雅虎公布他最新的數據,雅虎每個月大概有500萬個作業,他節點數應該超過5萬,每天處理的數據量是超過200PB。百度我們每天有5萬個作業,超過總數有1萬5千個節點,每天要處理10TB的規模,而且這種規模的擴展是每天都在遞進的。作業每天都會增加100、200,數據存儲也可能每天以零點幾或1%的速度在遞增。面對這種不斷數據爆炸性的增長,我們需要用合理的手段去控制他,以及我們能夠高效利用整個集群的一些資源,而不至于資源浪費。如果能節省一些成本,按現在機器性價比來說,現在一般大存儲的機器一般是2到3萬,就算定制高性能,大概也是在5萬塊錢以下。如果你能省10%的成本,就能為公司節省上千萬的財產。所以說,技術上的一個小缺口,可能給公司帶來很大的收益。
HCE目標有兩個方面,第一,需要提升整個集群使用效率;第二,附加價值給開發者一個更好的開發接口。面對的挑戰,提升集群資源利用效率,業界一般有幾種做法,最典型是做以兆級優化,一個是資源調度。換句話說,主要是在資源調度上有大的改進,傳統調度是每次作業就是兩階段來提交,其實MapReduce不能準確進行描述,還有存儲等等。所以,新的MapReduce2.0會把這些資源調度描述更細,他通過分配的一些算法,一些資源分配來描述每一個作業真正需求,真正能夠把作業力度切到更細,這樣整個集群資源使用率也會提高。
第二種方法是Task optimization。因為用戶提交一個作業,集群是不知道用戶什么配置。大家都了解,一個作業可能需要上百個配置,而這些配置用戶怎么能正確配置好,而且很多用戶他是不愿意去配置的,即使是在公司內。如果在平臺方看來就需要做一個動態,這塊是比較難做的。我剛才說的這些都是業界傳統一些優化方法,當然這些傳統方法我們也做了。我們有一些另辟蹊徑,每一個作業被切成多個來運行,實際上作業執行效率,除了調度期快慢以外,還取決于單機執行。
而Task的優化很多人是不去關注的,我們在這里分了一下Task,什么叫small tasks?什么是big tasks?如果用戶作業是零就由框架來占,什么是用戶開銷是零呢,如果用戶沒有做任何結算,你數據流也要流過整個框架,管這種作業叫small tasks,用戶就沒有其他額外的工作,這就是一個small tasks。而做一些工作你會發現這一個small tasks會跑的很快,會在幾十秒內結束。對用戶程度比較重,用戶需要做迭代,需要做復雜的的操作,這個任務會執行很長,會幾分鐘,甚至幾十分鐘。
總而言之,我們把那種用戶,用戶定義的很簡單執行時間很短的任務我們稱為small tasks,對于哪些用戶在營銷里面進行大量的,大家都知道這是一個主要因素,我就先指出這里面有復雜計算邏輯而且執行很長時間的我們就叫big tasks。
對集群做一個統計,因為你抽象為要抽象small tasks和big tasks,我抽取四個主要因群來看的話做一個統計,統計的標準是什么呢?這個tasks到底執行多長時間,不是一個作業,而是一個tasks,tasks是作業切分之后,平行化之后在電極上執行的任務叫tasks。通過4個集群統計會看到,超過80%作業,其實他本身任務都是小于2分鐘就完成的,而且應該是超過75%都是在一分鐘之內完成。
因為本身這是符合邏輯,你的集群跑到一個公有計算平臺,一定是輕量級。大家都了解機器學習里面有一些復雜的迭代性算法,相關有一些MPI五做的這些東西是處理那些復雜計算邏輯。一般統計無非是操作,都是很輕量級這是符合邏輯。比如任務都是小于1分鐘,而且你要跑Map的時候就需要知道,我們統計得出Map數據基本上是Reduce數據量倍,這樣數據量會大幅下降。一般根據FaceBook統計結果,平均有5到10倍介紹,你輸入假設100倍,收入就是10個,Reduce是很輕量的,你能大幅提升Map,因為你的大頭在Map,這一個發現。
換句話說,本身對于那些輕量級的。第二點對于用戶來講,在國內大部分人使用寫CDI出身,讓你能夠實現多語言支持,你可以寫C++,可以寫各種腳本,說白通過管道,通過pad通過STD,把數據傳給JAVA進行執行。這樣的話有一個問題,用戶作業是獨立于你框架,你框架只干了一件事就是把用戶任務啟動起來讓他執行,看整個框架是怎么編譯優化。有人說我框架不需要關注這個東西,因為很多用戶,比如說用戶在編制程序的時候不去加JAVA,或者用戶用低版本,本身學過編譯的人都了解,編譯的好壞,編譯手段不一樣,也會產生影響。
推薦閱讀
時至今日,“Big data”(大數據)時代的來臨已經毋庸置疑,尤其是在電信、金融等行業,幾乎已經到了“數據就是業務本身”的地步。這種趨勢已經讓很多相信數據之力量的企業做出改變。恰逢此時,為了讓更多的人了解和使>>>詳細閱讀
本文標題:百度楊棟:HCE助MapReduce提升資源利用率
地址:http://m.sdlzkt.com/a/kandian/20120305/36929.html