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