WOT2016楊大海:優(yōu)酷土豆Hadoop集群挑戰(zhàn)海量數(shù)據(jù)與高并發(fā)之道
原創(chuàng)伴隨著移動(dòng)互聯(lián)網(wǎng)的高速發(fā)展,人們的生活方式和行為習(xí)慣已經(jīng)在不知不覺中發(fā)生了改變,獲取信息的渠道也開始向新興媒體轉(zhuǎn)移?,F(xiàn)在的網(wǎng)民不再甘愿成為信息的被動(dòng)接收者,而是習(xí)慣于主動(dòng)尋找自己感興趣的內(nèi)容。這也使近幾年的國內(nèi)視頻網(wǎng)站邂逅難得的發(fā)展機(jī)遇。
楊大海,優(yōu)酷土豆大數(shù)據(jù)平臺高級架構(gòu)師,主要負(fù)責(zé)優(yōu)酷土豆開放大數(shù)據(jù)平臺的研發(fā)和運(yùn)營
對于視頻網(wǎng)站來說,僅提供基礎(chǔ)服務(wù)已經(jīng)不能滿足用戶的需求。能否通過挖掘大數(shù)據(jù)的價(jià)值為用戶提供差異化的優(yōu)質(zhì)內(nèi)容,成為視頻網(wǎng)站艷壓群芳的關(guān)鍵。
目前,優(yōu)酷土豆每天播放的視頻將近10億條,由此形成的數(shù)據(jù)量約20T。通過運(yùn)用大數(shù)據(jù)技術(shù),優(yōu)酷土豆可以為用戶提供“猜你喜歡”的視頻推薦;為主告主提供精準(zhǔn)的內(nèi)容投放;為優(yōu)質(zhì)內(nèi)容的產(chǎn)出和采購提供指導(dǎo)性的決策支撐;也推動(dòng)著公司其他產(chǎn)品分析問題,找到優(yōu)勢,從而推動(dòng)公司整體業(yè)務(wù)的發(fā)展。
為支持公司業(yè)務(wù)的迅猛發(fā)展,優(yōu)酷土豆大數(shù)據(jù)平臺一直在經(jīng)歷著成長和演進(jìn)。近日,優(yōu)酷土豆數(shù)據(jù)平臺高級架構(gòu)師、WOT2016講師楊大海在接受51CTO記者的獨(dú)家專訪時(shí)談到,要發(fā)揮大數(shù)據(jù)的價(jià)值,就要打破部門間數(shù)據(jù)獨(dú)立存在的格局,構(gòu)建開放的數(shù)據(jù)平臺,讓所有同事都知道如何利用數(shù)據(jù)改善工作,將數(shù)據(jù)文化要融入公司運(yùn)營當(dāng)中。
圖1:優(yōu)酷土豆hadoop平臺演變
優(yōu)酷土豆大數(shù)據(jù)平臺架構(gòu)
楊大海談到,優(yōu)酷土豆運(yùn)營的數(shù)據(jù)主要包括播放、用戶交互、搜索、廣告等。整個(gè)平臺以Hadoop集群為基礎(chǔ),目前已經(jīng)達(dá)到1000個(gè)節(jié)點(diǎn)的集群規(guī)模,并還將結(jié)合業(yè)務(wù)繼續(xù)擴(kuò)展。
圖2:基于haodoop的hdfs和yarn的數(shù)據(jù)平臺設(shè)計(jì)架構(gòu)圖
由于跨機(jī)房等問題,優(yōu)酷土豆自研了一套日志系統(tǒng),對各個(gè)團(tuán)隊(duì)將近500種日志統(tǒng)一進(jìn)行收集。收集到的日志按照業(yè)務(wù)類型有不同策略的存儲方案,原始日志直接以文件的形式離線存儲在HDFS上,做一些離線的分析和處理;另外,平臺搭建了一套近五十臺服務(wù)器規(guī)模的開放的Kafka,滿足了一些實(shí)時(shí)業(yè)務(wù)讀取和訪問數(shù)據(jù)的需求。
平臺全部的計(jì)算采用YARN實(shí)現(xiàn)動(dòng)態(tài)資源管理。目前基于YARN 集群部署MapReduce、DAG、Spark等計(jì)算模型。為避免一些在線業(yè)務(wù)查詢的相互影響,目前HBase與Storm是通過單獨(dú)的集群運(yùn)行。為了***限度地合理使用服務(wù)器資源,團(tuán)隊(duì)也正在進(jìn)行HBase on YARN 以及Storm on YARN的測試。
圖3:HDFS分層存儲
楊大海談到,團(tuán)隊(duì)使用Storm已經(jīng)有4年多的時(shí)間,Storm與Spark Streaming相比,對于實(shí)事計(jì)算的需求響應(yīng)得更好。舉例來說,平臺每一秒都有可能產(chǎn)生很多視頻的播放數(shù)據(jù)?,F(xiàn)在要算某一個(gè)視頻的播放量,只要Storm的計(jì)算程序負(fù)載不出現(xiàn)問題,就可以實(shí)現(xiàn)對需求的實(shí)時(shí)響應(yīng),進(jìn)行計(jì)算,呈現(xiàn)的是簡單的線性數(shù)據(jù)流的形態(tài)。但是Spark Streaming不會直接計(jì)算,它會等10秒鐘或者20秒,等到數(shù)據(jù)量達(dá)到幾千條甚至幾萬條,再統(tǒng)一進(jìn)行計(jì)算。相當(dāng)于形成很多時(shí)間窗口,雖然這個(gè)時(shí)間窗口可能足夠小,但與數(shù)據(jù)流相比還是有很大區(qū)別的。
數(shù)據(jù)平臺團(tuán)隊(duì)整個(gè)技術(shù)棧之上創(chuàng)建了Hadoop的擴(kuò)容和優(yōu)化、Storm問題的排查和優(yōu)化等應(yīng)用,開放了一個(gè)HBase集群和一個(gè)Redis集群做Cache,以接口的方式為全公司去提供服務(wù)。
海量數(shù)據(jù)與高并發(fā)的挑戰(zhàn)
楊大海談到,現(xiàn)在幾乎所有公司在搭建大數(shù)據(jù)平臺時(shí)都會面臨兩大難題,就是如何應(yīng)對數(shù)據(jù)量和并發(fā)量的挑戰(zhàn)。
海量數(shù)據(jù)
前文提到,優(yōu)酷土豆每天產(chǎn)生的播放量將近10億,在此基礎(chǔ)上,用戶還會產(chǎn)生非常多的周邊行為,比如點(diǎn)贊、評論等。楊大海表示,現(xiàn)在市場上鮮有能對如此大的數(shù)據(jù)量提供即時(shí)、靈活且多維查詢的數(shù)據(jù)產(chǎn)品,都存在一定的局限性?,F(xiàn)在大家通用的做法是綜合考慮數(shù)據(jù)量和需求兩個(gè)方面,通過多種技術(shù)的結(jié)合來實(shí)現(xiàn),但都不能解決得非常***。
比如現(xiàn)在計(jì)算每一條視頻的播放曲線。現(xiàn)在優(yōu)酷土豆的視頻總量超過3億,每一條視頻在每一天都會產(chǎn)生一條數(shù)據(jù),代表它今天的播放量。這樣一來,就算不加其他維度,每天入庫的數(shù)據(jù)量都等于視頻量,一定是需要NoSQL支撐的,比如HBase。但HBase.不支持多維查詢,只能通過一個(gè)Key,比如視頻ID來查詢。如果這時(shí)需要加一個(gè)維度,比如在安卓手機(jī)上的播放情況,就要加上終端是安卓還是iOS這個(gè)維度,想實(shí)現(xiàn)即時(shí)的查詢就非常困難。
為了實(shí)現(xiàn)這個(gè)需求,楊大海和他所在的數(shù)據(jù)團(tuán)隊(duì)也在逐步摸索。早期他們通過建立索引表,使安卓終端與視頻ID對應(yīng)的終端這兩個(gè)維度產(chǎn)生一個(gè)Key,進(jìn)而找到數(shù)據(jù)庫的主鍵,一條get就可以查詢。后來社區(qū)開源了Phoniex,這是一套多維查詢的辦公組件,就簡化了做索引的工作。但在實(shí)際的過程中,楊大海發(fā)現(xiàn)用這種方式發(fā)法支持全表掃描,因此在程序設(shè)計(jì)上就盡量避免全表掃描,讓后臺算一部分?jǐn)?shù)據(jù)。楊大海表示,對于NoSQL技術(shù)的探索,大家還有很長的路要走。
高并發(fā)
在所有的系統(tǒng)需要有很大的吞吐量,但機(jī)房的網(wǎng)絡(luò)環(huán)境卻不理想想的情況下,需要數(shù)據(jù)團(tuán)隊(duì)有非常強(qiáng)的能力,通過操作系統(tǒng)找到系統(tǒng)瓶頸。比如一段寫得不太好的程序,可能上線之初并發(fā)量低的時(shí)候不會出現(xiàn)任何異常,但是并發(fā)量高的時(shí)候可能會出現(xiàn)內(nèi)存泄露導(dǎo)致崩潰,這都是非常常見的。
這時(shí)候就需要數(shù)據(jù)部門通過分析系統(tǒng)的命令看到它所占有的資源,然后再反向推導(dǎo)可能會有的問題來解決。往往做一個(gè)系統(tǒng)編碼占用的時(shí)間非常短,但是這個(gè)系統(tǒng)是能夠經(jīng)得住大流量的考驗(yàn)正常運(yùn)行,需要很長的時(shí)間來迭代。
圖4:Hadoop平臺挑戰(zhàn)
數(shù)據(jù)是平臺發(fā)展的源動(dòng)力
楊大海表示,數(shù)據(jù)是優(yōu)酷土豆的大數(shù)據(jù)平臺架構(gòu)不斷演進(jìn)的驅(qū)動(dòng)力。公司的數(shù)據(jù)采集集統(tǒng)和數(shù)據(jù)化的概念推廣得非常早,這使業(yè)務(wù)部門對數(shù)據(jù)都非常敏感,不管是運(yùn)營,還是銷售,幾乎所有的業(yè)務(wù)部門都知道如果利用數(shù)據(jù)創(chuàng)造價(jià)值,怎么走數(shù)據(jù)流程。
現(xiàn)在優(yōu)酷土豆的日志類型達(dá)四、五百種,并且用戶數(shù)據(jù)的結(jié)構(gòu)化做得非常好,每種日志都是有結(jié)構(gòu)的。每個(gè)字段的描述在公司內(nèi)都有開放的API,供員工查看。在這樣的數(shù)據(jù)環(huán)境和氛圍內(nèi),員工通過查看數(shù)據(jù)結(jié)構(gòu),想到研發(fā)一些之前沒有想到的產(chǎn)品,比如廣告投放如何基于數(shù)據(jù)做精準(zhǔn)算法等等。
正如本文之前所提到的,大數(shù)據(jù)平臺搭建本身是一項(xiàng)非常偏重技術(shù)底層的工作,需要消耗大量的人員投入到先期的搭建和后期運(yùn)維當(dāng)中。如果每個(gè)業(yè)務(wù)部門都分別去搭建基礎(chǔ)系統(tǒng),再做業(yè)務(wù)去開發(fā),不僅浪費(fèi)資源,更浪費(fèi)時(shí)間。因此,打通公司各業(yè)務(wù)部門之前的數(shù)據(jù)壁壘,構(gòu)建一套開放的大數(shù)據(jù)平臺,才能更好地發(fā)揮技術(shù)的價(jià)值。
然而在公司內(nèi)部實(shí)際運(yùn)營大數(shù)據(jù)平臺并不容易。由于整個(gè)團(tuán)隊(duì)的業(yè)務(wù)不能因?yàn)槟骋粋€(gè)人或某一個(gè)團(tuán)隊(duì)來影響這個(gè)平臺,因此數(shù)據(jù)訪問會涉及到很多權(quán)限的問題。那么如何在這種情況下讓其他業(yè)務(wù)部門人員愿意用數(shù)據(jù)平臺,并且體驗(yàn)非常好,是需要通過綜合考慮數(shù)據(jù)量、任務(wù)數(shù)、資源爭搶等問題,及時(shí)制定好資源管理和訪問策略的規(guī)劃。
楊大海談到,針對使用過程中遇到的問題,他所在的團(tuán)隊(duì)也在不停地想辦法解決。 在構(gòu)建客戶端的初期就需要制定嚴(yán)格的規(guī)范,哪些目錄供生產(chǎn)使用、哪些目錄供測試使用以及對每個(gè)用戶團(tuán)隊(duì)實(shí)行配合管理。當(dāng)然還需要對機(jī)器資源進(jìn)行監(jiān)控,防止用戶在客戶機(jī)上提交非相關(guān)的程序。前期規(guī)范好可以減少很多后期維護(hù)成本。
楊大海也分享了幾條值得借鑒的經(jīng)驗(yàn),比如構(gòu)建一些小工具,來盡可能滿足大家的需求,比如將所有服務(wù)器的日志作為服務(wù)開放給各團(tuán)隊(duì);在技術(shù)層要規(guī)劃作業(yè)的應(yīng)用資源占比,設(shè)定一個(gè)資源在整個(gè)資源的***占比;另外,由于大家都沒有主動(dòng)刪除數(shù)據(jù)的習(xí)慣,需要利用技術(shù)手段找到這些沒用的數(shù)據(jù),等等。
安全健壯是開放平臺的前提
采訪***楊大海談到,在公司內(nèi)部開放數(shù)據(jù)平臺對業(yè)務(wù)的促進(jìn)、公司的發(fā)展都起到非常積極的作用。然而,開放就意味著公司任何有需要數(shù)據(jù)平臺的其他職能團(tuán)隊(duì)都有機(jī)會使用,這其中包括技術(shù)團(tuán)隊(duì)與非技術(shù)團(tuán)隊(duì)。平臺上存放的各種數(shù)據(jù),有公用的,有機(jī)密的,不同的用戶可以訪問不同的數(shù)據(jù)。因此,保證平臺的安全性及健壯性,是搭建開放性平臺的前提。