小米數(shù)據(jù)工場的技術(shù)架構(gòu)和小團(tuán)隊(duì)如何玩轉(zhuǎn)大數(shù)據(jù)
原創(chuàng)本文是WOT2016互聯(lián)網(wǎng)運(yùn)維與開發(fā)者大會的現(xiàn)場干貨, 新一屆主題為WOT2016企業(yè)安全技術(shù)峰會將在2016年6月24日-25日于北京珠三角JW萬豪酒店隆重召開!
盧學(xué)裕的演講分為小米數(shù)據(jù)工場的技術(shù)架構(gòu)和小團(tuán)隊(duì)如何玩轉(zhuǎn)大數(shù)據(jù)兩部分,從中開發(fā)者可以知道小米數(shù)據(jù)工場的技術(shù)架構(gòu)是怎樣的? 面對大數(shù)據(jù)的技術(shù)紛繁復(fù)雜,小團(tuán)隊(duì)要如何面臨缺技術(shù)/缺分析師/缺數(shù)據(jù)等問題?在這種現(xiàn)狀下如何做好技術(shù)選型,如何權(quán)衡面臨的使用成本和數(shù)據(jù)隱私擔(dān)憂?盧學(xué)裕主張一半自建一半用云,然而這又要面臨哪些運(yùn)維挑戰(zhàn)?
小米數(shù)據(jù)工場的技術(shù)架構(gòu)
盧學(xué)裕表示, 小米數(shù)據(jù)工廠跟各家的大數(shù)據(jù)平臺、數(shù)據(jù)系統(tǒng)有很多類似之處也有自己獨(dú)特的點(diǎn)。工廠整個底層基礎(chǔ)平臺建立在Hadoop體系,除此小米跟Cloudera合作也非常緊密。小米整個底層平臺會有專門平臺組去開發(fā),***用的HDFS,上面用的Hive、Spark和Mapreduce這些是混合到一個亞運(yùn)集群上。Impala小米很早就在用,是一個很重的計(jì)算角色。
小米數(shù)據(jù)工場總體結(jié)構(gòu)
如上圖, 上半部分是自研的數(shù)據(jù)工廠,是為最頂業(yè)務(wù)層提供服務(wù)的。數(shù)據(jù)工廠主要是提供數(shù)據(jù)可視化、計(jì)算任務(wù)管理、數(shù)據(jù)管理、權(quán)限管理、任務(wù)調(diào)度、數(shù)據(jù)共享等服務(wù)。盧學(xué)裕表示,公司越大就更希望數(shù)據(jù)能夠開放給公司的各個部門,數(shù)據(jù)可相互利用。但不能沒有任何限制的去使用,所以需要對數(shù)據(jù)權(quán)限做管理。任務(wù)調(diào)度是整個工廠里面最重的部分。數(shù)據(jù)共享就是類似非?;鸬挠脩舢嬒耦悢?shù)據(jù),還有其他公共數(shù)據(jù)如IP庫,這些數(shù)據(jù)具有公共特點(diǎn),就不用重復(fù)計(jì)算,就可以通過數(shù)據(jù)共享的方式在各個團(tuán)隊(duì)之間使用這些數(shù)據(jù)。
數(shù)據(jù)管理,分為數(shù)據(jù)預(yù)覽、元數(shù)據(jù)、數(shù)據(jù)源三部分。數(shù)據(jù)預(yù)覽是每個團(tuán)隊(duì)用來互相了解數(shù)據(jù)的。
元數(shù)據(jù),就是數(shù)據(jù)使用過程中要把非結(jié)構(gòu)化的數(shù)據(jù)轉(zhuǎn)換結(jié)構(gòu)化的數(shù)據(jù)。元數(shù)據(jù)管理就是去了解每個字段的含義和機(jī)器解析。機(jī)器解析包括Mapreduce程序可直接讀文件可解析,如用Impala、Spark和Hive同樣也能解析,而不需要每個使用者再去格式化,再去解析這個數(shù)據(jù)。但面臨的問題是數(shù)據(jù)一旦出現(xiàn)格式的轉(zhuǎn)變或者某些字段的調(diào)整,以前任務(wù)可能都會出現(xiàn)問題,故一定要統(tǒng)一管理的地方。數(shù)據(jù)源,數(shù)據(jù)管理非常核心的是數(shù)據(jù)集成,能夠把各個地方的數(shù)據(jù)集成到平臺上來。
HDFS目錄管理。有公共數(shù)據(jù)空間、業(yè)務(wù)數(shù)據(jù)空間、團(tuán)隊(duì)數(shù)據(jù)空間、個人數(shù)據(jù)空間、Yarn計(jì)算空間五部分。
- 公共數(shù)據(jù)空間,是用來把公共數(shù)據(jù)放到上面,把維護(hù)權(quán)限和讀的權(quán)限分開。這樣大部分都是讀這個空間,空間數(shù)據(jù)安全性等級相對來講比較低,可以付給更多人。
- 業(yè)務(wù)數(shù)據(jù)空間,因?yàn)槊總€業(yè)務(wù)數(shù)據(jù)的增長量是不一樣的,甚至有些業(yè)務(wù)會出現(xiàn)如剛上來一個新功能,數(shù)據(jù)量迅速的增大,有的甚至?xí)霈F(xiàn)某個團(tuán)隊(duì)的數(shù)據(jù)增加,導(dǎo)致把整個集群空間全吃掉,又沒有事先招呼。這種情況下做好業(yè)務(wù)間的限額配額是非常重要,防止某一個團(tuán)隊(duì)的增長導(dǎo)致整個集群出現(xiàn)一些問題。
- 團(tuán)隊(duì)數(shù)據(jù)空間,就是把權(quán)限控制到個人,用來幫助做團(tuán)隊(duì)之間的數(shù)據(jù)協(xié)作。如把線上任務(wù)會放到團(tuán)隊(duì)賬號中去,團(tuán)隊(duì)賬號的權(quán)限要做好控制,權(quán)限不隨便開放。團(tuán)隊(duì)人員發(fā)生變動后,整個團(tuán)隊(duì)任務(wù)不用再去切換賬戶而導(dǎo)致交接的復(fù)雜性。
- 個人數(shù)據(jù)空間,數(shù)據(jù)工程師、開發(fā)工程師等是需要做一些調(diào)試或做自己的計(jì)算這就要給這些人一定空間的同時對其數(shù)據(jù)做配額。這是為了防止這些人過多的使用資源和為了空間不夠需要清理數(shù)據(jù)時,哪些數(shù)據(jù)要清理,哪些數(shù)據(jù)不能清理一目了然。這樣限制空間的情況下,這種廢文件或者垃圾文件的積累會相對較少。
- Yarn計(jì)算空間,做配額限制呢是為了杜絕空間濫用的問題。盧學(xué)裕舉例道,“之前發(fā)生過一件事,某人在Reduce里面寫了一個死循環(huán),不停的輸出數(shù)據(jù),導(dǎo)致整個集群很快就去報警。后來才發(fā)現(xiàn)這個計(jì)算造成的一些問題,***差點(diǎn)導(dǎo)致那些日志上傳、數(shù)據(jù)的寫入都出問題,幸虧處理的比較及時。”所以,Yarn計(jì)算空間是需要做一個配額限制,防止對整個集群造成過大的影響。
盧學(xué)裕表示,小米數(shù)據(jù)存儲格式統(tǒng)一采用的Parquet,優(yōu)點(diǎn)在于其使用的是列式存儲,支持Mapreduce、Hive、Impala、Spark和讀取快占用空間少。
客戶端數(shù)據(jù)接入兩種模式優(yōu)劣勢
客戶端數(shù)據(jù)接入。客戶端指的是如說Wap、App等數(shù)據(jù),存在方式有SDK和服務(wù)端Log兩種模式。上圖為兩種模式的優(yōu)劣勢。
服務(wù)器端數(shù)據(jù)源。除前端數(shù)據(jù)源外,整個處理數(shù)據(jù)時還會有大量服務(wù)器端數(shù)據(jù)源需要處理。業(yè)務(wù)數(shù)據(jù)庫類,用ETL工具做導(dǎo)入。服務(wù)器端日志,用Scribe將數(shù)據(jù)寫入HDFS。
元數(shù)據(jù)管理。當(dāng)公司業(yè)務(wù)變多后,每一個數(shù)據(jù)的處理方式都有可能不一樣,這時候就凸顯出元數(shù)據(jù)管理的重要性。如視頻播放日志,分析師希望用Hive,用Impala直接寫SQL去計(jì)算,但數(shù)據(jù)挖掘工程師就要去寫Mapreduce,寫Spark的方式去讀,去解析。元數(shù)據(jù)管理就是要做數(shù)據(jù)統(tǒng)一,既能夠滿足Hive、Spark、Impala,還能滿足Mapreduce。這樣一來節(jié)省大家對數(shù)據(jù)理解、執(zhí)行的時間。
元數(shù)據(jù)管理
如上圖,小米數(shù)據(jù)工廠是每一份數(shù)據(jù)的描述都需要在數(shù)據(jù)工廠上提交,之后數(shù)據(jù)工廠會在MetaStore中做建表的同時帶上元數(shù)據(jù)的行為,供Hive、Spark、Impala使用。數(shù)據(jù)管理還會生成Jave Class,給Mapreduce使用。當(dāng)去解析用某個數(shù)據(jù)時候,可以直接用這樣的方式把它解析成Jave類。
計(jì)算管理
計(jì)算管理。盧學(xué)裕表示,計(jì)算是很重要的事情,數(shù)據(jù)管理相對來講是一次性的活,計(jì)算就是很復(fù)雜的事情。計(jì)算任務(wù)數(shù)一天達(dá)到幾千或過萬時,就會變得非常復(fù)雜。對于計(jì)算管理這快優(yōu)化,小米做了如上圖的一些工作。
Docker。為了管理好這些紛繁的計(jì)算框架和模型,在計(jì)算的執(zhí)行方面,小米使用Docker來解決對環(huán)境的不同需求和異構(gòu)問題,并且與Hive、Impala、Spark這些不同的計(jì)算模型都進(jìn)行了對接,去適配不同應(yīng)用場景計(jì)算不同數(shù)據(jù)的模型。另外,在不同業(yè)務(wù)場景下,同一個計(jì)算邏輯也可以選用不同的計(jì)算模型,Docker 的使用也避免了資源的浪費(fèi)。比如一個計(jì)算任務(wù)每天凌晨運(yùn)行,為了追求吞吐量,可以放到Hive里跑;還是同樣一個計(jì)算模型,現(xiàn)在就要跑,可以不用更改,就放到Impala里運(yùn)行。Docker不僅解決了環(huán)境的異構(gòu),也解決了資源問題。另外,Docker的環(huán)境適應(yīng)性很強(qiáng),做橫向擴(kuò)展會比較容易。對于數(shù)據(jù)隱私方面,小米考慮得非常重。采用Docker與自身安全策略的綜合,小米用戶數(shù)據(jù)的隱私和安全性也得到了極其嚴(yán)格的控制。
小團(tuán)隊(duì)如何玩轉(zhuǎn)大數(shù)據(jù)
小團(tuán)隊(duì)玩大數(shù)據(jù)會面臨哪些問題?小團(tuán)隊(duì)會面臨人力資源不足,技術(shù)儲備不足,時間有限等問題。面對這些問題,盧學(xué)裕在技術(shù)選型上給出如下三個建議。
- 選擇熱門技術(shù)。因?yàn)槿瞬疟容^多,相對獲取這樣人才會比較容易。技術(shù)成熟,因?yàn)樾F(tuán)隊(duì)沒有時間去踩坑。還有幫助多,這如說網(wǎng)上文檔幫助、社群幫助,朋友幫助等。
- 夠用。針對一些小團(tuán)隊(duì)或者初創(chuàng)公司的特點(diǎn),業(yè)務(wù)變化特別快,也不穩(wěn)定,這種情況下做到夠用就好,不需要過分的設(shè)計(jì)和采用過重的系統(tǒng)。盡量根據(jù)業(yè)務(wù)驅(qū)動,業(yè)務(wù)需要什么數(shù)據(jù)就抓什么數(shù)據(jù)。
- 演進(jìn)。隨著需求的變化需要不斷的演進(jìn),包括系統(tǒng)演進(jìn)、使用方式演進(jìn)。
一定要做好數(shù)據(jù)積累。盧學(xué)裕表示,無論你用什么樣的技術(shù),用Hadoop也好,不用Hadoop也好,一定要做好數(shù)據(jù)的積累,這是對一家數(shù)據(jù)公司非常重要的部分。這就需要提前規(guī)劃好數(shù)據(jù),還要避免邏輯孤島。還需要注意ID問題,也就是關(guān)聯(lián)的問題。當(dāng)采集了數(shù)據(jù),卻發(fā)現(xiàn)沒有采用戶ID,沒有提前做好這個規(guī)劃,當(dāng)算到用戶級別時候那就尷尬了。
演講***,盧學(xué)裕強(qiáng)調(diào):“現(xiàn)在越來越多業(yè)務(wù)都回到了用戶時代,以前講的是流量時代,講的是PV如何。回到用戶時代,核心問題就是我們要做好用戶的數(shù)據(jù)積累,尤其是用戶模型建立。模型包括的畫像、用戶點(diǎn)點(diǎn)滴滴行為等。這些行為在業(yè)務(wù)發(fā)展之后,尤其是要做數(shù)據(jù)挖掘,做推薦系統(tǒng)時,會非常非常的有幫助。建議大家做好這樣的數(shù)據(jù)積累,在數(shù)據(jù)技術(shù)上隨著變化可以不停的再做一些改變,甚至做一些混合,在不同的地方用不同的方式。
演講視頻:http://edu.51cto.com/lesson/id-100757.html
講師簡介:
現(xiàn)任火線數(shù)據(jù)創(chuàng)始人兼CEO,前小米科技小米云團(tuán)隊(duì),負(fù)責(zé)小米數(shù)據(jù)工場。之前擔(dān)任優(yōu)酷土豆大數(shù)據(jù)團(tuán)隊(duì)技術(shù)總監(jiān),打造了優(yōu)酷土豆的大數(shù)據(jù)開放平臺、數(shù)據(jù)分析、數(shù)據(jù)挖掘、推薦系統(tǒng)等。最早服務(wù)于騰訊客戶端安全團(tuán)隊(duì)做技術(shù)開發(fā)。