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