楊大海:大數(shù)據(jù)研發(fā)面臨的問(wèn)題和挑戰(zhàn)
2016年4月23日下午,華為開(kāi)發(fā)者社區(qū)攜手51CTO在魔都上海啟動(dòng)了“華為開(kāi)發(fā)者匯”的第一場(chǎng)沙龍。本次活動(dòng)共邀請(qǐng)了華為公司、星網(wǎng)信通、優(yōu)酷土豆的五位講師做了分享。其中,來(lái)自優(yōu)酷土豆大數(shù)據(jù)平臺(tái)的高級(jí)架構(gòu)師楊大海分享了他在優(yōu)土所經(jīng)歷的大數(shù)據(jù)平臺(tái)發(fā)展歷程。里面從前后端的技術(shù)選型一直講到自己遇到的Hadoop問(wèn)題和挑戰(zhàn)。讓大家領(lǐng)略到大型視頻網(wǎng)站在數(shù)據(jù)處理方面的不易之處,相信大家在看到楊老師填過(guò)的坑之后,能少走很多彎路。
現(xiàn)場(chǎng)實(shí)錄如下:
楊大海:感謝大家。我先介紹一下我今天分享的內(nèi)容。因?yàn)槲疫@個(gè)團(tuán)隊(duì)是從12年開(kāi)始去做,經(jīng)過(guò)將近五年的時(shí)間,從零開(kāi)始,做到支撐整個(gè)集團(tuán)的數(shù)據(jù)平臺(tái)團(tuán)隊(duì)。我目前為止還是在優(yōu)酷,現(xiàn)在的話給我們一個(gè)合作伙伴,然后獨(dú)立出來(lái)一家公司,現(xiàn)在還沒(méi)有開(kāi)始推廣,也是一家做大數(shù)據(jù)的公司,包括數(shù)據(jù)平臺(tái)、用戶精準(zhǔn)運(yùn)營(yíng)、網(wǎng)站流量運(yùn)營(yíng)這一塊的東西,算是一個(gè)硬廣吧。然后這一塊,我拿PPT,就是上周在背景之上,51CTO一次的技術(shù)論壇,我給他們分享的模板,但是內(nèi)容是重新又開(kāi)始做的。
我先介紹一下我們這個(gè)團(tuán)隊(duì)的情況。我們是一個(gè)做技術(shù)平臺(tái)的團(tuán)隊(duì),因?yàn)榍懊鎯晌焕蠋熞呀?jīng)介紹過(guò),第一是搭建了這么一套內(nèi)部的類似于github的管理平臺(tái)。莊老師也介紹了一些軟件管理、軟件開(kāi)發(fā)的一些系統(tǒng)管理方面的經(jīng)驗(yàn)。我這邊就是一個(gè)實(shí)現(xiàn),就是非??啾频囊粋€(gè)實(shí)現(xiàn)。我們這個(gè)團(tuán)隊(duì)主要支撐的是,整個(gè)優(yōu)酷、土豆視頻的日志收集。這個(gè)日志包括網(wǎng)站前端所有的點(diǎn)擊日志,就是你點(diǎn)了哪些按紐,瀏覽了哪些頁(yè)面。另外一些是視頻播放,你看了什么視頻,看了多長(zhǎng)時(shí)間,什么時(shí)間開(kāi)始看的,然后在什么時(shí)間點(diǎn)了拖拽,快進(jìn)了,還是又拖回來(lái)了,然后什么節(jié)點(diǎn)的廣告等等,就是所有的行為日志,大概每天30個(gè)T左右。然后現(xiàn)在的集群規(guī)模,現(xiàn)在做了存儲(chǔ),整個(gè)集群現(xiàn)在也做了一千多臺(tái)了。整個(gè)存儲(chǔ)一千多臺(tái)的機(jī)器,整個(gè)存儲(chǔ)擴(kuò)到38T,現(xiàn)在用到的存儲(chǔ)將近30個(gè)T,其實(shí)使用率還是蠻高的。另外支撐服務(wù),第一是日志收集的服務(wù),需要把網(wǎng)站這么多的日志收集過(guò)來(lái),第二這些日志需要很快的存儲(chǔ)到不同平臺(tái)上去。第一個(gè),就是我剛才說(shuō)的(02:40英語(yǔ))平臺(tái),需要把這些日志給存上去。另外有一些我們有實(shí)時(shí)計(jì)算的東西,所以需要類似于卡夫卡的消息隊(duì)列里面。然后計(jì)算模型的話,這一塊是指我們會(huì)基于(02:55英語(yǔ))等等這些開(kāi)源的系統(tǒng),在它上面搭建一些平臺(tái)和一些管理系統(tǒng)運(yùn)營(yíng),來(lái)支撐其他團(tuán)隊(duì)的業(yè)務(wù)開(kāi)發(fā)。
我先介紹一下這個(gè)前提,因?yàn)楫?dāng)一個(gè)業(yè)務(wù)團(tuán)隊(duì)去開(kāi)發(fā)一個(gè)業(yè)務(wù)系統(tǒng)的時(shí)候,你不能要求他,你這邊團(tuán)隊(duì)需要一個(gè)懂hadoop的人去搭建一套hadoop平臺(tái)。再需要一些懂緩存的人,搭建一套緩存系統(tǒng),當(dāng)然這個(gè)在這樣的公司,是不現(xiàn)實(shí)的,在團(tuán)隊(duì)內(nèi)部也是不現(xiàn)實(shí)的,所以才有我們這個(gè)團(tuán)隊(duì)出現(xiàn)。然后我們提供了一堆平臺(tái),然后你們用的話,就是在我們內(nèi)部系統(tǒng)里面申請(qǐng)一個(gè)賬號(hào)接入,然后申請(qǐng)直接去用就好了,服務(wù)器什么都不用管。緩存就是我們自己搭建的一套緩存系統(tǒng),每天就是支持的QPS將近兩千億左右。隊(duì)列的話,也是基于開(kāi)源卡夫卡去做的。監(jiān)控的話,剛開(kāi)始我們自己開(kāi)發(fā)了一個(gè)名字叫天眼鏡(音)的監(jiān)控系統(tǒng),可以接入所有這些分布式平臺(tái)的監(jiān)控,包括業(yè)務(wù)監(jiān)控、流量監(jiān)控等等,但是后來(lái)做著發(fā)現(xiàn),我們做了一件和外面一個(gè)開(kāi)源的系統(tǒng)非常像的一件東西,所以我們現(xiàn)在又重建搭了一套?,F(xiàn)在支撐的業(yè)務(wù)系統(tǒng),有廣告系統(tǒng)、推薦系統(tǒng),來(lái)瘋就是我們現(xiàn)在優(yōu)酷的直播,類似于六間房的直播。移動(dòng)就是我們APP的業(yè)務(wù),openApi前面智勇提到過(guò),其實(shí)就是公司對(duì)外的一個(gè)數(shù)據(jù)接口的平臺(tái),其實(shí)量還蠻大的。然后云娛樂(lè),就是優(yōu)酷最近做的廣告盒子,游戲?qū)Я鬟@塊的業(yè)務(wù)。其實(shí)我們這個(gè)平臺(tái),基本上支撐了,優(yōu)酷80%以上的團(tuán)隊(duì)。
其實(shí)現(xiàn)在我來(lái)分享的目的是,告訴大家我們組建這么一個(gè)團(tuán)隊(duì),把這個(gè)經(jīng)驗(yàn)分享給大家,因?yàn)槲易约邯?dú)立出來(lái)做這個(gè)數(shù)據(jù)公司的時(shí)候,因?yàn)槲椰F(xiàn)在還沒(méi)有完全離職。到下一周的周五,可能是我工作的最后一天。剛剛?cè)A為的兩位老師已經(jīng)說(shuō)了,他們可能是僅代表的是個(gè)人觀點(diǎn),然后星網(wǎng)的這位哥們說(shuō)了,他代表的是公司觀點(diǎn),如果我講的對(duì)的話,可以代表公司的觀點(diǎn),如果講的不對(duì)的話,僅代表個(gè)人觀點(diǎn)。然后這個(gè)問(wèn)題是因?yàn)?,我自己做公司的時(shí)候發(fā)現(xiàn)之前有過(guò)一些培訓(xùn)機(jī)構(gòu),包括51CTO、(05:34英語(yǔ))等一些做大數(shù)據(jù)的開(kāi)源社區(qū)里面,有一些合作,他們這邊會(huì)推薦我跟客戶去解釋一些問(wèn)題,但是我發(fā)現(xiàn)客戶一些問(wèn)題是非常多的。因?yàn)樗麄儚囊粋€(gè)做傳統(tǒng)企業(yè)的應(yīng)用團(tuán)隊(duì),突然間接了一些大數(shù)據(jù)的項(xiàng)目,需要做大數(shù)據(jù)的工作,然后發(fā)現(xiàn)第一就是技術(shù)儲(chǔ)備不足。為什么說(shuō)技術(shù)儲(chǔ)備不足?我跟他講過(guò)你要用hadoop,要用這些東西可以解決現(xiàn)在的問(wèn)題,他告訴我這些東西我們都沒(méi)玩過(guò),突然你給我介紹這么十幾套開(kāi)源的系統(tǒng)進(jìn)來(lái),然后在后面完全是一個(gè)黑匣子,我不敢用。包括很大的企業(yè),像中電普華開(kāi)源下面的一家國(guó)企,挺大的一個(gè)企業(yè),他們營(yíng)銷處的主任這么跟我說(shuō)的,另外一個(gè)他接到項(xiàng)目以后,時(shí)間周期是非常有限的。他沒(méi)有時(shí)間再去,從一個(gè)零都沒(méi)有的團(tuán)隊(duì),從研究這個(gè)技術(shù)到市場(chǎng)投入使用,是這么一個(gè)情況。
然后技術(shù)選型上面,現(xiàn)在基于大數(shù)據(jù)的技術(shù)越來(lái)越多了,這些技術(shù)也是非常雜亂,其實(shí)每個(gè)技術(shù)都有它自己的特點(diǎn),但是我們拿了這個(gè)方案去和客戶講了的時(shí)候,客戶會(huì)覺(jué)得,我之先就用一個(gè)java,或者用一個(gè).net什么,就開(kāi)發(fā)一套系統(tǒng),頂多有一套數(shù)據(jù)庫(kù)、緩存技術(shù),但是你現(xiàn)在突然間告訴我,我用這么一堆的開(kāi)源東西,我真不敢用。其實(shí)就是一個(gè)技術(shù)種類繁雜,他們?cè)谶x擇的時(shí)候,出現(xiàn)迷茫,就是說(shuō)這個(gè)查詢,我可以用ES去實(shí)現(xiàn),也可以用(07:15英語(yǔ)),也可以用HB實(shí)現(xiàn),我深知可以用(07:14英語(yǔ))實(shí)現(xiàn),我怎么去選擇的一個(gè)問(wèn)題,其實(shí)每個(gè)技術(shù)都有它自己的特點(diǎn),當(dāng)然這里面不排除,比如說(shuō)(07:23英語(yǔ))都能干成同樣的事情,但是你的團(tuán)隊(duì)更適用于哪些技術(shù),你的團(tuán)隊(duì)哪些技術(shù)里面有特長(zhǎng),出了問(wèn)題我們更好解決,這是一方面。另外一個(gè)就是適應(yīng)場(chǎng)景。有的技術(shù),大家用來(lái)解決相同的問(wèn)題,但是有的技術(shù)架構(gòu)比較艱難,用來(lái)解決數(shù)據(jù)量不是太大的問(wèn)題。有些技術(shù)他搭建這么一套系統(tǒng),他的系統(tǒng)本來(lái)設(shè)計(jì)也特別復(fù)雜,因?yàn)榉植际较到y(tǒng)越完善,他設(shè)計(jì)越復(fù)雜,因?yàn)樗獮樗植际?,包括為他的高可用、高并發(fā)來(lái)付出很大的精力去這些這塊的東西,就造成他的系統(tǒng)非常復(fù)雜。所以在這一塊,使用場(chǎng)景你是不是需要這么一套更復(fù)雜的系統(tǒng)?因?yàn)槟愕臄?shù)據(jù)量非常大,其實(shí)就是根據(jù)我們不同的業(yè)務(wù)場(chǎng)景,不同的數(shù)據(jù)場(chǎng)景去來(lái)挑選的。
另外一塊,就是服務(wù)的挑戰(zhàn)。為什么說(shuō)服務(wù)的挑戰(zhàn)?就是說(shuō)之前的話,比如說(shuō)華為和移動(dòng)做了一套(08:18英語(yǔ))系統(tǒng),上線之后現(xiàn)場(chǎng)需要運(yùn)維在那兒運(yùn)維著,大部分的開(kāi)發(fā)就撤出來(lái)了,但是你上這么一套系統(tǒng),給客戶上了之后,這個(gè)hadoop的玩意兒,Stor指不定哪天掛了一個(gè)節(jié)點(diǎn),或者你需要處理了,這些東西我們專業(yè)做服務(wù)運(yùn)維的團(tuán)隊(duì),不一定能去解決,甚至是需要開(kāi)發(fā),就是更專業(yè)的一些做開(kāi)發(fā)的去解決這些問(wèn)題。然后并不是說(shuō)你重啟一下就能解問(wèn)題的。另外一個(gè),就是我剛才提到的易控、簡(jiǎn)單,找最適合,最簡(jiǎn)單的方案。因?yàn)樵綇?fù)雜的話,出了問(wèn)題之后其實(shí)坑是越大。
然后系統(tǒng)特征,基于大數(shù)據(jù)的系統(tǒng)特征,往往有一個(gè),就是分布式,為什么我們一直在推廣分布式?因?yàn)榉植际娇梢詸M向拓展、縱向拓展。它的拓展能夠滿足你,數(shù)據(jù)量日益遞增的需求,能滿足你的吞吐量的需求,但是它做到分布式之后,這個(gè)系統(tǒng)在設(shè)計(jì)的時(shí)候,因?yàn)橐獫M足分布式,滿足你本身業(yè)務(wù)需求的情況下做了很多基于分布式這塊的設(shè)計(jì)。因?yàn)樗缍鄠€(gè)虛擬機(jī)甚至多個(gè)服務(wù)器來(lái)做,甚至多個(gè)機(jī)房來(lái)做這件事情。假如說(shuō)我舉一個(gè)例子,本來(lái)這個(gè)系統(tǒng)在一個(gè)機(jī)房都能搞定的,你類似于阿力的ODPS,現(xiàn)在他們要跨多個(gè)機(jī)房,機(jī)房之間的帶寬問(wèn)題怎么解決等等,這 問(wèn)題基于分布式的特性,需要去考慮的。
然后高吞吐量,因?yàn)檫@些系統(tǒng)往往一天需要處理多大的數(shù)據(jù)量,這樣的一個(gè)系統(tǒng),我們需要對(duì)它進(jìn)行不斷的優(yōu)化。為什么呢?可能我們一套系統(tǒng)在一千臺(tái)機(jī)器或者兩千臺(tái)機(jī)器上去搭建,如果我們提供10%的性能,我們可能剩了兩百臺(tái)服務(wù)器,這一點(diǎn)是非常樂(lè)觀的。另外一點(diǎn)高可用,因?yàn)楦呖捎玫脑?,也就是說(shuō)我平臺(tái)越大,我的業(yè)務(wù)越多,那就需要保證我這個(gè)平臺(tái)足夠的穩(wěn)定,如果這個(gè)平臺(tái)出現(xiàn)某一天宕機(jī)或者有一個(gè)小時(shí)不可用,這個(gè)帶來(lái)的問(wèn)題是非常大的。其實(shí)在一個(gè)月前,美團(tuán)的緩存系統(tǒng),他用的是淘寶(10:33英語(yǔ))緩存系統(tǒng)出現(xiàn)問(wèn)題,整個(gè)持續(xù)恢復(fù)了一個(gè)過(guò)程,好好壞壞的過(guò)程,持續(xù)了將近一周,這個(gè)影響是非常大的。所以就需要做高可用,高可用這塊,我們需要做多機(jī)房,多活等等的方案,這里面我對(duì)系統(tǒng)的設(shè)計(jì)提高更高的要求,所以就導(dǎo)致分布式系統(tǒng)非常復(fù)雜。另外一個(gè)就是大規(guī)模。大規(guī)模的話,也就是說(shuō)這個(gè)系統(tǒng),可能去滿足我們比如說(shuō)整個(gè)網(wǎng)站等等這些非常大規(guī)模的業(yè)務(wù),或者是數(shù)據(jù)這種需求。最后這個(gè)不穩(wěn)定,我加了引號(hào),并不是說(shuō)這個(gè)系統(tǒng)不穩(wěn)定,因?yàn)樗恿诉@么多因素,這么多業(yè)務(wù)額外的工作在系統(tǒng)里面,就導(dǎo)致這個(gè)系統(tǒng)出現(xiàn)問(wèn)題的可能性比較大。我舉一個(gè)例子,如果你這個(gè)系統(tǒng)基于一臺(tái)服務(wù)器去部署的,這個(gè)服務(wù)器很可能兩年、三年,甚至五年、十年都不會(huì)宕機(jī)一次,但是如果你這個(gè)系統(tǒng)基于一萬(wàn)臺(tái)服務(wù)器基于部署的話,可能這一萬(wàn)臺(tái)服務(wù)器里面每天都會(huì)有十臺(tái)、八臺(tái)服務(wù)器去宕機(jī)重啟的,這個(gè)不穩(wěn)定需要我們不斷的有人去完善它,去維護(hù)它,所以就造成需要我們使用這些技術(shù)的團(tuán)隊(duì),去對(duì)這個(gè)技術(shù)更了解,然后做更多的跟蹤,并不是說(shuō)我們把系統(tǒng)給你部署,就OK了,這么一個(gè)工作。當(dāng)然現(xiàn)在有一些自動(dòng)化,我們也想盡辦法去做一些,把人脫離出來(lái),交給我們系統(tǒng)去干的一件事情,但其實(shí)這一部分還是沒(méi)法往前脫離的。
然后我這邊覺(jué)得這么一個(gè)做大數(shù)據(jù)開(kāi)發(fā)的團(tuán)隊(duì),需要這么幾點(diǎn)特質(zhì):第一點(diǎn),就是經(jīng)驗(yàn)、前輩。我說(shuō)經(jīng)驗(yàn)、前輩并不是說(shuō)我花五十萬(wàn)的年薪,去其他公司招一個(gè)大牛過(guò)來(lái),這個(gè)對(duì)于很多公司來(lái)說(shuō)眼前不能很快的實(shí)現(xiàn),也不是這個(gè)意思。我的意思是,我們?cè)谘芯恳婚T(mén)技術(shù)的時(shí)候,我們這個(gè)團(tuán)隊(duì)要引入這個(gè)技術(shù),要使用這個(gè)技術(shù)的時(shí)候,是不是找一個(gè)人專門(mén)去研究它,這個(gè)人到兩年系統(tǒng)上線之后,是不是能夠成為這一方面技術(shù)的專家?然后推進(jìn)我們其他團(tuán)隊(duì)去使用。其實(shí)這也是就是一個(gè)專業(yè)、專注的問(wèn)題。我們團(tuán)隊(duì)并不大,我們支撐整個(gè)公司的數(shù)據(jù)平臺(tái)也就七八個(gè)人。比如說(shuō)緩存出了問(wèn)題,我知道這個(gè)人能解決,OK,我找他。然后,我們平臺(tái)出了問(wèn)題,我說(shuō)這個(gè)人能解決,我找他。每個(gè)人都有自己的特長(zhǎng),然后能非??焖俚慕鉀Q問(wèn)題。學(xué)習(xí)能力我指的,因?yàn)樯鐓^(qū)迭代非??斓模鐓^(qū)基于大數(shù)據(jù)是非??斓?,有很多新數(shù)據(jù)出來(lái),并不是說(shuō)老的技術(shù)不用了,但是這些新的技術(shù)可能在一定程度上,可以替代我們老的技術(shù),或者說(shuō)是它的性能各方面會(huì)更好,我們花一定的,在團(tuán)隊(duì)里面抽出來(lái)一部分精力,去嘗試,去解決這個(gè),就是說(shuō)一些更好的技術(shù)方案,引進(jìn)一些更好的技術(shù)方案進(jìn)來(lái)。另外就是思考,就是我們做一個(gè)階段之后,我們思考一下這個(gè)階段得到了什么,如果覺(jué)得我們是有問(wèn)題的,或者說(shuō)我們迭代比較慢的話,是不是我們的方向不對(duì)等等。然后責(zé)任心,因?yàn)槲矣X(jué)得做大數(shù)據(jù)的是比較苦逼的,特別苦逼,苦逼到什么程度。晚上可能告訴你一個(gè)數(shù)據(jù)有問(wèn)題,然后你出來(lái)需要解決。另外一點(diǎn)責(zé)任心的話,因?yàn)榛诖髷?shù)據(jù),大家都知道這里面有一個(gè)非常不好的問(wèn)題,我們的數(shù)據(jù)來(lái)自互聯(lián)網(wǎng),互聯(lián)網(wǎng)上的數(shù)據(jù)是非常亂的,因?yàn)槲覀儗?duì)外的協(xié)議大部分都是(14:12英語(yǔ))誰(shuí)都可以給你發(fā),給你發(fā)什么內(nèi)容都可以,現(xiàn)在反作弊我們也在做。責(zé)任心就是說(shuō),很可能因?yàn)槟骋粋€(gè)程序的問(wèn)題,或者你程序?qū)懙牟缓玫膯?wèn)題,造成(14:26英語(yǔ))任務(wù)有問(wèn)題等等,你需要起來(lái)去處理,而不是說(shuō)我把這個(gè)任務(wù)掛上之后,我再也不管了,這個(gè)其實(shí)是特別重要的,就是團(tuán)隊(duì)里面成員的責(zé)任心。然后溝通、分享和影響,這塊的話,我這個(gè)人我對(duì)這塊技術(shù)研究OK了,我覺(jué)得可以用了,我把這個(gè)平臺(tái)給搭建起來(lái)了,我去推廣了,然后我是不是在內(nèi)部進(jìn)行一些公開(kāi)會(huì)議,去推廣一下?教大家怎么去使用這個(gè)東西。因?yàn)橥茝V并不是說(shuō),讓大家知道我們的東西,你讓大家知道的,大家都知道,但是大家都不知道怎么去用,也不行。就是我們需要舉行一些內(nèi)部分享的機(jī)制。告訴其他團(tuán)隊(duì),用了我這個(gè)東西有什么好處,然后怎么去使用我這個(gè)東西,最重要的是怎么去使用,能給你帶來(lái)好處,這樣的話對(duì)這個(gè)平臺(tái)推廣有非常大的好處。
技術(shù)挑戰(zhàn),我覺(jué)得就是這幾個(gè)方面,因?yàn)閷?duì)于一個(gè)傳統(tǒng)的小團(tuán)隊(duì)做項(xiàng)目的團(tuán)隊(duì)來(lái)說(shuō),因?yàn)槲疫@邊也在優(yōu)酷面試過(guò)很多人。你問(wèn)他,多線程了解嗎?了解。你問(wèn)他虛擬機(jī)了解嗎?了解,但是你解決過(guò)這一方面的問(wèn)題嗎?沒(méi)有,這種人非常多,但是你去做大數(shù)據(jù)的技術(shù),你必須去解決這些問(wèn)題,你做一個(gè)平臺(tái)之前這些問(wèn)題每天是有的,你必須解決這些問(wèn)題。因?yàn)槟阕鲆粋€(gè)面向全公司或者是全集團(tuán)的一個(gè)平臺(tái),然后你這些問(wèn)題,第一他們本來(lái)的數(shù)據(jù)量就很大,所以你遇見(jiàn)這些問(wèn)題的概率是非常大的,你不知道他們什么業(yè)務(wù),都在你這個(gè)平臺(tái)上去跑,甚至更令人恐怖的,之前我們平臺(tái)初期不完善,我見(jiàn)過(guò)一個(gè)人寫(xiě)過(guò)一個(gè)(16:16英語(yǔ))語(yǔ)句,一個(gè)java信息占了一百個(gè)G的內(nèi)存,這一方面需要我們自己更專業(yè)的人去做管理、去做處理。服務(wù)器底層的原理,我們既然去做平臺(tái),我們需要快速派發(fā)一些問(wèn)題,我們需要做壓力測(cè)試,我們?cè)谧鰤毫y(cè)試的時(shí)候,究竟是為什么?是什么原因?qū)е挛覀兊耐掏铝可喜蝗?,程序的性能不?這需要我們?nèi)?duì)服務(wù)器的底層原理去做一些理解。比如說(shuō)我這個(gè)人本來(lái)只會(huì)java,那OK,現(xiàn)在問(wèn)題解決不了,我現(xiàn)在這個(gè)人懂操作系統(tǒng),現(xiàn)在CPU使用百分之百了,或者CPU使用90%,或者IO非常高等等這些問(wèn)題,就需要團(tuán)隊(duì)去融入其他一些技術(shù)進(jìn)來(lái)。另外就是數(shù)據(jù)除噪,其實(shí)剛才有提到,我們的數(shù)據(jù)是面向互聯(lián)網(wǎng)的,誰(shuí)都可以發(fā)任何的數(shù)據(jù)給我們,其實(shí)對(duì)于ETR這塊,每天都會(huì)收到日志里面。我們的日志當(dāng)然不是直接存到數(shù)據(jù)庫(kù),當(dāng)然日志里面每天都會(huì)大量收到大量的(17:22英語(yǔ))注入到日記里面,這個(gè)非常多,雖然是非常低級(jí)的工具手段,但是每天都會(huì)有。所以這個(gè)數(shù)據(jù)除噪,第一面向web的攻擊,另一方面是數(shù)據(jù)的質(zhì)量。因?yàn)閿?shù)據(jù)除噪做的好,做的不好,對(duì)你后面數(shù)據(jù)分析,包括數(shù)據(jù)挖掘的模型,最后的解決其實(shí)造成蠻大的影響。另外一個(gè),就是我們莊老師又講過(guò),也有嘉賓提到過(guò),我們用開(kāi)源的時(shí)候遇到一些坑怎么辦?其實(shí)這些坑蠻多的,特別多,有的坑甚至大到我們這個(gè)團(tuán)隊(duì)無(wú)法接受的,都有很多,都有遇見(jiàn)過(guò)。所以這些其實(shí)開(kāi)源的bug,其實(shí)我覺(jué)得總結(jié)出來(lái)方案有兩種。第一種是我們索性不解決,繞過(guò)去,等到下一個(gè)版本,他就解決了。另外一個(gè),就是如果覺(jué)得我們可以接受的話,我們花一個(gè)人或者兩個(gè)人在兩周之內(nèi)把這個(gè)bug給攻堅(jiān),給搞定,把這部分的源碼給運(yùn)維那邊,然后把bug一搞定,原理解決,也是一種解決方式。
這塊的痛點(diǎn),主要是說(shuō)現(xiàn)在對(duì)于好多,我接觸過(guò)很多客戶,很多做架構(gòu)的,都告訴我,我現(xiàn)在需要一個(gè)十億級(jí)或者二十億級(jí)量的數(shù)據(jù)庫(kù),而且我需要支持多維查詢。這么一個(gè)系統(tǒng)是有的,但是這么一個(gè)系統(tǒng)其實(shí)它基于好幾套系統(tǒng)搭建起來(lái)的,并不是給你安裝一個(gè)就可以這么干了,并不是去的。可能里面用到一些索引、緩存等等一些東西去做。甚至說(shuō),因?yàn)槲覀內(nèi)A為其實(shí)也是開(kāi)源了一個(gè)基于(19:00英語(yǔ))索引一個(gè)解決方案,其實(shí)代碼也已經(jīng)開(kāi)源出來(lái)了,我們之前也有在用。這塊根據(jù)以前的開(kāi)源東西自己去實(shí)現(xiàn)一些東西,才能滿足你的需求,并不是說(shuō)直接開(kāi)源拿來(lái)就能用。然后吞吐量這塊,可能很多系統(tǒng)在上線初期支持每天幾十萬(wàn)或者幾百萬(wàn)、上千萬(wàn)的請(qǐng)求,但是上線之后也沒(méi)問(wèn)題,運(yùn)行一年也沒(méi)問(wèn)題,突然間運(yùn)行兩年公司規(guī)模壯大了,因?yàn)閮?yōu)酷的日志量從之前的12年每天幾百億,到現(xiàn)在的每天上千億,其實(shí)也是上升了一個(gè)指數(shù)級(jí)。這樣有很多問(wèn)題會(huì)在后面的數(shù)據(jù)量增長(zhǎng)的過(guò)程當(dāng)中暴露出來(lái)。實(shí)時(shí)的話,對(duì)于報(bào)表分析,我之前是我們國(guó)內(nèi)另外一家做電信的公司,可能在座的下面有華為的同事的話,有的可能會(huì)了解雅信聯(lián)創(chuàng)(音),做商業(yè)BI的。之前BI方式基于數(shù)據(jù)倉(cāng)庫(kù),直接在倉(cāng)庫(kù)上面建模,去做一些固定的報(bào)表分析出來(lái)就OK了。但是對(duì)于現(xiàn)在的互聯(lián)網(wǎng)監(jiān)測(cè),一些數(shù)據(jù)也好,要看到實(shí)時(shí)的數(shù)據(jù),對(duì)于報(bào)表的要求越來(lái)越高了,實(shí)時(shí)這塊需要更多的技術(shù)去支持。每一種方案都有優(yōu)缺點(diǎn),選擇自己最合適的方案。
然后我下面介紹一下我們公司內(nèi)部的hadoop平臺(tái)成長(zhǎng)的一個(gè)過(guò)程,和它升級(jí)的case。在12年的時(shí)候,我剛進(jìn)公司,這個(gè)時(shí)候公司已經(jīng)有一個(gè)集群了,當(dāng)時(shí)有30多臺(tái),我去了之后擴(kuò)到了50臺(tái)左右。當(dāng)時(shí)這個(gè)集群是裸奔的,為什么叫裸奔呢?就是阿帕奇直接部署駕起來(lái),跑起來(lái),什么也沒(méi)給,什么控制也沒(méi)做,就是給我們一個(gè)推薦團(tuán)隊(duì)來(lái)用。我當(dāng)時(shí)應(yīng)聘的團(tuán)隊(duì)就是推薦團(tuán)隊(duì),給他們?cè)谟?,幫他們做這件事情。然后用著用著發(fā)現(xiàn),別的團(tuán)隊(duì)需要我們推薦團(tuán)隊(duì)的數(shù)據(jù),后來(lái)我們就自己思考了,其實(shí)我非常感謝我遇到了一個(gè)好的領(lǐng)導(dǎo),就是我提前轉(zhuǎn)正了。在他那邊他是(21:26英語(yǔ)),但是對(duì)于我來(lái)說(shuō),我已經(jīng)是全力在干這件事情了,這件事情是很好的,就是他給了我尊嚴(yán),讓我去做這件事情,所以就是說(shuō)我們當(dāng)時(shí)有這么一個(gè)打算,就是說(shuō)做一套全公司開(kāi)放的平臺(tái)出來(lái),然后當(dāng)時(shí)是在這個(gè)50臺(tái)的基礎(chǔ)上,推廣其他團(tuán)隊(duì)去用,當(dāng)時(shí)那幾年團(tuán)隊(duì)還不多,就是四五個(gè)團(tuán)隊(duì)的時(shí)候,已經(jīng)有很多團(tuán)隊(duì)在質(zhì)疑了。就是說(shuō),假設(shè)我們的數(shù)據(jù)被別人刪了怎么辦?所以在13年時(shí)候,我們這個(gè)集群做到兩百臺(tái)規(guī)模的時(shí)候,我加入了權(quán)限控制等等,包括用戶的目錄規(guī)劃、空間規(guī)劃,因?yàn)槟悴荒鼙WC你的用戶突然間存一個(gè),今天存?zhèn)€1P的數(shù)據(jù)過(guò)來(lái),我要對(duì)他的目錄做配合,我要對(duì)他的數(shù)據(jù)權(quán)限做控制等等,這些控制,我在13年的時(shí)候全部做完了。這個(gè)時(shí)候,其實(shí)挺穩(wěn)定,挺好了,看起來(lái)什么問(wèn)題都沒(méi)有,但是后來(lái)又發(fā)現(xiàn)問(wèn)題了。在13到14年的時(shí)候,做了一次版本升級(jí),因?yàn)樵?2年到13年的時(shí)候是1.0到1.3的版本,然后在13年的時(shí)候,因?yàn)榘l(fā)現(xiàn)1.0.3版本,社區(qū)里面很多東西無(wú)法支持了,類似于(22:42英語(yǔ))等等,他們新版本升級(jí)的時(shí)候,對(duì)于hadoop老的版本不支持了,都直接二點(diǎn)幾的版本了。所以這次做了一次升級(jí),其實(shí)也有辦法去解決,當(dāng)時(shí)因?yàn)槲矣X(jué)得,直接升級(jí),但其實(shí)也是低估了這個(gè)升級(jí)的代價(jià)是非常大的。然后升級(jí)當(dāng)時(shí)升了2.3的版本,其實(shí)我們升級(jí)還有一個(gè),我當(dāng)時(shí)因?yàn)橛X(jué)得使用團(tuán)隊(duì)的越來(lái)越多了,我們需要做高可用,所以在1.0.3的(23:10英語(yǔ))存儲(chǔ)的主節(jié)點(diǎn)還不支持HN的,然后升級(jí)2.3主要解決這個(gè)問(wèn)題,但其實(shí)沒(méi)有解決。因?yàn)樯?jí)2.3之后,我們的文件讀寫(xiě)太頻繁了,導(dǎo)致阿帕奇的版本2.3的一個(gè)bug,HN只有一次耗時(shí),就是一個(gè)掛了這個(gè)可以切過(guò)去,掛了這個(gè)再也起不來(lái)了。當(dāng)時(shí)其實(shí)是花了將近兩周時(shí)間,把這個(gè)問(wèn)題給解決了,然后也反饋到社區(qū)了,他們?cè)?.4其實(shí)都已經(jīng)修復(fù)了,他們其實(shí)當(dāng)時(shí)打了一個(gè)快捷出來(lái)給我們,其實(shí)已經(jīng)解決了。
在14年到15年的時(shí)候,從14年下半年到16年這段時(shí)間,公司的數(shù)據(jù)規(guī)模和團(tuán)隊(duì)是越來(lái)越多。當(dāng)時(shí)13年底的時(shí)候,優(yōu)酷全公司只有大概不到兩千人,現(xiàn)在整個(gè)公司五六千人了,所以對(duì)于團(tuán)隊(duì)來(lái)說(shuō)越來(lái)越多,業(yè)務(wù)來(lái)說(shuō)越來(lái)越多,數(shù)據(jù)也是越來(lái)越多。整個(gè)數(shù)據(jù)漲了好幾倍。你看這個(gè)集群到13年的時(shí)候是兩百臺(tái),12年是五十臺(tái),其實(shí)也沒(méi)增長(zhǎng)多少,但是從14年年底到16年直接奔一千臺(tái)去了,而且我們中間還做了很多刪數(shù)據(jù)等等控制數(shù)據(jù)規(guī)模的一些控制用戶存儲(chǔ)數(shù)據(jù)規(guī)模,包括給他數(shù)據(jù)設(shè)定一些數(shù)據(jù)周期等等一些運(yùn)營(yíng)策略,還漲這么快。就是說(shuō)這中間遇到了很多用戶的問(wèn)題。
下面一張PPT會(huì)介紹說(shuō)整個(gè)數(shù)據(jù)平臺(tái)在不同的生長(zhǎng)階段面臨的問(wèn)題。到現(xiàn)在為止,已經(jīng)超過(guò)一千臺(tái)了,每天將近有三四萬(wàn)作業(yè)在這個(gè)平臺(tái)上運(yùn)行,就是(24:54英語(yǔ))等等這些作業(yè)在這個(gè)平臺(tái)上運(yùn)行。
問(wèn)題演變,其實(shí)50臺(tái)左右的時(shí)候,我們暴露了什么問(wèn)題就是生態(tài)圈的完善。當(dāng)時(shí)生態(tài)圈什么(25:04英語(yǔ))全部涌出來(lái)了,但是這些問(wèn)題其實(shí)本身也不完善,踩的坑比較多,bug比較多。當(dāng)時(shí)我們團(tuán)隊(duì)技術(shù)功底還可以,但是你推薦給其他團(tuán)隊(duì)用,其他團(tuán)隊(duì)沒(méi)有這方面的技術(shù)功底,所以他們需要去學(xué)習(xí),需要引入這方面的人來(lái)解決這方面的問(wèn)題。所以當(dāng)時(shí)面臨的問(wèn)題是這樣。但當(dāng)時(shí)不存在集群管理的問(wèn)題,因?yàn)槭褂锰貏e少。主要問(wèn)題是,這個(gè)人給我發(fā)一個(gè)(25:36英語(yǔ)),我應(yīng)該怎么寫(xiě),你能不能告訴我,我覺(jué)得這個(gè)問(wèn)題太簡(jiǎn)單了。所以當(dāng)時(shí)主要是這種問(wèn)題,到兩百臺(tái)的時(shí)候,就是權(quán)限控制,需要控制我的權(quán)限了,用戶管理,就是說(shuō)我需要有單獨(dú)的賬號(hào),需要保證我的文件只有我自己能看到。然后資源管理,就是說(shuō)我不能因?yàn)槟骋粋€(gè)人提交了一個(gè)非常大的任務(wù),跑了一整個(gè)晚上,占了五百臺(tái)服務(wù)器,導(dǎo)致其他團(tuán)隊(duì)任務(wù)沒(méi)法跑,就是調(diào)度的問(wèn)題,因?yàn)槲覀兓谠迫プ鲞@件事情,一千臺(tái)機(jī)器在一個(gè)大池子里面,誰(shuí)都可以占用這個(gè)資源,所以這個(gè)資源需要做一些更好的調(diào)度處理。
另外就是數(shù)據(jù)安全。數(shù)據(jù)安全特別重要,對(duì)于一些核心團(tuán)隊(duì)來(lái)說(shuō),比如說(shuō)我們的廣告團(tuán)隊(duì),他們的團(tuán)隊(duì)是不允許任何的團(tuán)隊(duì)看到的,但是我們還需要幫他去做這件事情。
目錄規(guī)范是指,如果你只給他做權(quán)限處理,你給他制定一些規(guī)范進(jìn)去的話,這些用戶亂放,最后你的GPS都不知道放的什么,整個(gè)文件數(shù)亂七八糟的,哪一些文件有用,哪一些沒(méi)用,你怎么對(duì)用戶的目錄去做大小的控制,這些都沒(méi)法去做了,所以用戶規(guī)范也在這個(gè)時(shí)間點(diǎn)去做了。
然后參數(shù)規(guī)范,當(dāng)時(shí)我們的hadoop集群沒(méi)改什么參數(shù),后來(lái)做了一些參數(shù)的優(yōu)化。然后也做了一些自動(dòng)化運(yùn)維的工具進(jìn)去了。等到一千臺(tái)規(guī)模左右的時(shí)候,暴露的問(wèn)題更高級(jí)了。用戶水平都高了,他給你提的問(wèn)題真的是問(wèn)題,需要花一周甚至兩周時(shí)間去解決。比如說(shuō)用戶(27:16英語(yǔ))的bug,比如說(shuō)我現(xiàn)在平臺(tái)需要升級(jí)(27:18英語(yǔ))版本,其實(shí)從1.6到1.7是有問(wèn)題的,但是版本內(nèi)存是沒(méi)有問(wèn)題的,但是這些問(wèn)題真的是問(wèn)題,需要解決。就是用戶高級(jí)了,我們遇到的問(wèn)題也高級(jí)了。
可用性要求更高了,不允許平臺(tái)去管。你想我們網(wǎng)站每天那么多日志進(jìn)來(lái),那么多推薦系統(tǒng),都從這個(gè)數(shù)據(jù)里面算數(shù)據(jù),假如說(shuō)這個(gè)平臺(tái)掛了,然后第二天大家都不用干活了,直接就是在重跑你的任務(wù)就好了。小文件的問(wèn)題,做這個(gè)hadoop的都知道,hadoop會(huì)把這個(gè)文件結(jié)構(gòu)、目錄結(jié)構(gòu)等等塊的信息,全部存在一個(gè)java進(jìn)程里面,這個(gè)java進(jìn)程不能無(wú)限大,我們現(xiàn)在這個(gè)java已經(jīng)開(kāi)到120G內(nèi)存了。就是用到256G的內(nèi)存,現(xiàn)在已經(jīng)開(kāi)到120G了,我們可想而知它觸發(fā)一臺(tái)(28:05英語(yǔ))就是幾分鐘了。然后這個(gè)問(wèn)題,我們現(xiàn)在有很多方式,也有很多運(yùn)行策略,就是我們合并小文件,或者壓縮文件,減少文件塊等等這些方式去處理,但是其實(shí)現(xiàn)在在社區(qū)還是一個(gè)瓶頸,我覺(jué)得hadoop這個(gè)東西,可以允許你發(fā)展幾百臺(tái)的規(guī)模,但是你像阿里這種,上萬(wàn)臺(tái)的規(guī)模還是需要自己去做很多改造的。因?yàn)榘⒗锒鄼C(jī)房,做多(28:33英語(yǔ))這套方案。
這個(gè)問(wèn)題另外一個(gè)就是數(shù)據(jù)遷移。這個(gè)數(shù)據(jù)遷移,我是指的有些系統(tǒng)可能用的(28:46英語(yǔ))這個(gè)數(shù)據(jù)已經(jīng)跑了很久了,在這個(gè)目錄里面,但是突然間告訴他,我這個(gè)目錄需要開(kāi)放,但是這個(gè)目錄里面另外一些數(shù)據(jù)不需要開(kāi)放,所以就需要在這個(gè)目錄規(guī)范上再做一些處理,去滿足其他團(tuán)隊(duì)的數(shù)據(jù)需求。任務(wù)問(wèn)題,就是任務(wù)越來(lái)越多了,一天三四道任務(wù)在上面運(yùn)行,就像一個(gè)高速通道一樣,然后一百個(gè)沒(méi)問(wèn)題、兩百個(gè)車(chē)沒(méi)問(wèn)題,一天幾萬(wàn)個(gè)車(chē)在上面運(yùn)行,會(huì)出現(xiàn)堵的問(wèn)題。但是堵你不能一直擴(kuò)容,你擴(kuò)容也解決不了堵的問(wèn)題。因?yàn)椴慌懦覀冇幸恍I(yè)的分析師,非常專業(yè)的分析師,不是非常專業(yè)的技術(shù),但是他會(huì)寫(xiě)(29:26英語(yǔ)),比如說(shuō)直接查詢一年、兩年、三年的VA,你這個(gè)查詢需求一天那么幾十T的數(shù)據(jù),一下查詢好幾年的數(shù)據(jù),誰(shuí)也沒(méi)法控制你,所以我們還是要控制他。我也沒(méi)法說(shuō)直接擴(kuò)容能辦法你的需求,我只能說(shuō)我控制你了,你跑的慢一點(diǎn),你只能占50臺(tái)機(jī)器跑,讓你跑半個(gè)月,只要你跑出來(lái)就行了。這種需求,就是給任務(wù)劃一個(gè)優(yōu)先級(jí)。存儲(chǔ)計(jì)劃需要去做,我現(xiàn)在基本上一天30T的話,做三副本的話就是100T左右,100T的話,也就是將近一臺(tái)服務(wù)器來(lái)做。一天需要擴(kuò)容一臺(tái),一個(gè)月就是三十臺(tái),一個(gè)G就是一臺(tái)。其實(shí)這個(gè)規(guī)模還蠻大,我需要去做一些存儲(chǔ)規(guī)劃,就是說(shuō)多長(zhǎng)時(shí)間的日志需要?jiǎng)h除,究竟需要擴(kuò)多少服務(wù)器出臺(tái)。因?yàn)槲覀兊倪\(yùn)營(yíng)團(tuán)隊(duì)也需要提前給他報(bào)備。
資源增強(qiáng)然后資源分類,就是說(shuō)我剛才提到的,這個(gè)資源基于平臺(tái)上面跑的任務(wù)越來(lái)越多了,然后大家相互爭(zhēng)搶資源,他說(shuō)我的優(yōu)先級(jí)比較高,我說(shuō)我的優(yōu)先級(jí)比較高,我不能讓你倆打架吧,但是我還得讓你倆都跑,怎么辦?我自己會(huì)對(duì)集群做一些管理系統(tǒng),我讓集群看出來(lái),我讓你們看出來(lái),在哪個(gè)時(shí)段,我的集群比較顯,你們可以很快的跑完,就是讓用戶自己選擇時(shí)段。另外的話,任務(wù)的優(yōu)先級(jí)不能用戶自己設(shè)定了,讓你自己設(shè)定已經(jīng)不OK了,我需要有一些機(jī)制控制這件事情。假如說(shuō)我給你們團(tuán)隊(duì)優(yōu)先級(jí)任務(wù)高的,就100個(gè)資源,一百臺(tái)機(jī)器讓你們跑,同時(shí)你們占有100臺(tái)機(jī)器,再多的話,需要你們內(nèi)部自己協(xié)調(diào)了,這個(gè)太復(fù)雜了,我不能一直通過(guò)擴(kuò)容來(lái)滿足你的手段。服務(wù)器如果這么做的話,最后這個(gè)集群擴(kuò)到一發(fā)不可收拾了。然后任務(wù)監(jiān)控,現(xiàn)在用戶發(fā)現(xiàn)我的任務(wù)報(bào)錯(cuò)了,現(xiàn)在日志是能看到,但是我要知道我為什么報(bào)錯(cuò)。比如說(shuō)內(nèi)存(31:32英語(yǔ))的監(jiān)控,這樣的話剛開(kāi)始我們監(jiān)控,只是說(shuō)這個(gè)節(jié)點(diǎn)掛了,這個(gè)服務(wù)器的內(nèi)存用了多少,然后我們這邊是有,但是用戶要看到自己的任務(wù),或者某一個(gè)(31:46英語(yǔ))用的內(nèi)存整個(gè)情況,沒(méi)有的,所以我們之前開(kāi)發(fā)的那套監(jiān)控系統(tǒng)還在用著,但是現(xiàn)在又搭了一個(gè)(31:55英語(yǔ))加了一個(gè)插件,在跑的過(guò)程中會(huì)采集一些(32:00英語(yǔ))系統(tǒng)里面,給它展現(xiàn)。等等這些問(wèn)題,到現(xiàn)在為止處理的差不多了,但是后面有一張PPT我會(huì)講到,就是整個(gè)升級(jí)過(guò)程和面臨的挑戰(zhàn)。
整個(gè)平臺(tái)升級(jí),升級(jí)的必要性分為兩部分:第一次升級(jí)是為了保養(yǎng),其實(shí)可以不升的,但是升了,是為了保養(yǎng)。第二次升級(jí),其實(shí)就是為了治病,不升不行了,面臨了很多問(wèn)題,需要去升級(jí)了,必須要升了。然后準(zhǔn)備的話,準(zhǔn)備這塊調(diào)研、測(cè)試、包括修改、適應(yīng)現(xiàn)在的環(huán)境等等這些問(wèn)題都小,最主要的是你怎么讓用戶接受你這個(gè)升級(jí)。因?yàn)閔adoop的升級(jí),可能并不是想像的說(shuō)我換一個(gè)新版本,把文件系統(tǒng)升級(jí),就OK了。我們公司所有的(32:42英語(yǔ))程序,里面有30%是需要修改的,它和API是不兼容的。所以我們考慮到兩種方式,就是說(shuō)我們盡最大的努力,讓它做到兼容,我們?nèi)バ薷乃徊糠諥PI,修改它一部分插件,讓他做到兼容。另外一部分的話,真的需要修改程序了,所以這個(gè)需要給我們的團(tuán)隊(duì)去溝通。
方案的話,就是說(shuō)制定升級(jí)方案,哪些系統(tǒng)先升級(jí),哪些系統(tǒng)后升級(jí),系統(tǒng)之間的依賴需要處理明白,究竟哪些系統(tǒng),別遺漏了。因?yàn)楫?dāng)時(shí)最后一次升級(jí),我們處理了大概有五六十個(gè)業(yè)務(wù)系統(tǒng),你像我一次升級(jí),牽扯到這么多系統(tǒng)需要改程序,現(xiàn)在想想其實(shí)也是一件挺好玩的事情。升級(jí)的過(guò)程中,我們做的還是比較謹(jǐn)慎的,整個(gè)文件樹(shù)的結(jié)構(gòu),就(33:43英語(yǔ))鏡像文件,如果這個(gè)一丟,相當(dāng)于整個(gè)公司的存儲(chǔ)丟完,雖然說(shuō)存儲(chǔ)沒(méi)丟,但是數(shù)據(jù)已經(jīng)找不回來(lái)了,這個(gè)備份我們做了一級(jí)防備份,全做了,包括回滾的代碼都已經(jīng)寫(xiě)好了,腳本全部寫(xiě)好了,基本上可以避免所有的意外發(fā)生了。無(wú)非是宕機(jī)時(shí)間的問(wèn)題,其實(shí)在升級(jí)當(dāng)天晚上遇到的一些問(wèn)題,還是比較突發(fā)性的問(wèn)題。第一個(gè)問(wèn)題是觸發(fā)了操作系統(tǒng)(34:18英語(yǔ))的一個(gè)bug,測(cè)試那天沒(méi)有測(cè)出來(lái)的。另外一個(gè)問(wèn)題是,升級(jí)時(shí)間我們把安裝包,安裝包將近有一個(gè)G,就GDK安裝包,包括hadoop安裝包,整個(gè)包將近一個(gè)T,從一臺(tái)機(jī)器往下分發(fā)的時(shí)間,我算算這個(gè)帶寬,分完之后需要分發(fā)兩個(gè)小時(shí)。本來(lái)升級(jí)只需要40分鐘都能搞定,分發(fā)包的過(guò)程需要兩個(gè)小時(shí)。都是在之前沒(méi)有考慮到的。然后再接下來(lái),就是我們這個(gè)坐享成果了,升級(jí)完了,其實(shí)也沒(méi)這么爽。升級(jí)完之后,一周的時(shí)間還是在解決測(cè)試時(shí)間沒(méi)有測(cè)到的bug。那一周我們很苦逼,但是過(guò)了這一周,我們很爽了,集群再也沒(méi)有出現(xiàn)過(guò)宕機(jī)了,高可用也OK了,我們省心多了,能睡著覺(jué)了。
然后這個(gè)集群面臨的挑戰(zhàn),其實(shí)我覺(jué)得這個(gè)挑戰(zhàn),就是我剛剛提到一點(diǎn)Nmenode瓶頸,因?yàn)槲覀儸F(xiàn)在在做多機(jī)房方案了,一個(gè)機(jī)房現(xiàn)在在青島那個(gè)機(jī)房,將近有一千五百臺(tái)服務(wù)器,現(xiàn)在沒(méi)有機(jī)架了,需要做多機(jī)房的方案了。另外一個(gè)日志系統(tǒng),對(duì)于大小的控制,我需要滿足Nmenode瓶?jī)?nèi)存的要求。集群規(guī)模大小,Nmenode瓶性能瓶頸,一直都是在圍繞Nmenode瓶。因?yàn)樗@個(gè)性能瓶頸,并不是說(shuō)內(nèi)存的瓶頸,就是說(shuō)它對(duì)于HDF分布式的東西來(lái)說(shuō),它對(duì)于存儲(chǔ)是分布式的,它對(duì)于計(jì)算是分布式的,但是對(duì)于我去找一個(gè)文件,這個(gè)文件下面有哪些文件,這個(gè)瓶頸是落在Nmenode瓶主節(jié)點(diǎn)上的,這個(gè)節(jié)點(diǎn)是管理總文件數(shù)的。所以我們查找的服務(wù),類似于(36:04英語(yǔ))的服務(wù)非常多,造成Nmenode性能瓶頸,它一個(gè)節(jié)點(diǎn)已經(jīng)搞不定了,我現(xiàn)在已經(jīng)用到40核的CPU,256G的內(nèi)存了,他已經(jīng)搞不定了怎么辦?我還是需要想辦法處理。另外就是議案的問(wèn)題,議案調(diào)度還是不夠個(gè)性化。因?yàn)槲覀儸F(xiàn)在跑到議案上面的任務(wù),有(36:28英語(yǔ))等等,我們還有開(kāi)發(fā)一些自定義的應(yīng)用,也是基于議案去做的。也就是跑在上面的任務(wù)這么復(fù)雜,我就需要一個(gè)更牛逼的系統(tǒng)去做。但是hadoop2.7支撐基于標(biāo)簽的調(diào)度,但是它這個(gè)東西一點(diǎn)都不完善,只有一個(gè)調(diào)度,它內(nèi)置了三種調(diào)度器,只有一個(gè)調(diào)度器支持,其他兩種調(diào)度器都不支持。而且他最支持的調(diào)度器是最原始的。因?yàn)橘Y源調(diào)度器是非常傻的一個(gè)調(diào)度器。
資源隔離的話,這塊我想說(shuō)一下,因?yàn)槲椰F(xiàn)在做的內(nèi)存控制了,做到資源控制了,但是我沒(méi)法完全做到資源控制。我說(shuō)的這塊就是虛擬化,可想而知大家這么一堆任務(wù)都跑在一千臺(tái)服務(wù)器上。這一千臺(tái)服務(wù)器,有一臺(tái)服務(wù)商同時(shí)起到十個(gè)java進(jìn)程,是屬于十個(gè)用戶的。我能分配你這個(gè)java只占兩個(gè)G的內(nèi)存,這是沒(méi)有問(wèn)題的,但是我沒(méi)法保證你的java內(nèi)存只能用一個(gè)CPU,如果不基于虛擬化去做的話?;蛘呤?37:34英語(yǔ))策略去做的話,我沒(méi)法保證CPU的完全隔離,其實(shí)這個(gè)也是一個(gè)挑戰(zhàn),因?yàn)楝F(xiàn)在發(fā)現(xiàn),你要做平臺(tái)做到最后就是資源的問(wèn)題,你怎么把這些資源控制好,怎么把這個(gè)平臺(tái)的權(quán)限控制好,讓用戶更好的去用,就完了。
然后數(shù)據(jù)倉(cāng)庫(kù)的必要性。我想說(shuō)一下我們集群為什么出現(xiàn)這么多任務(wù)阻塞的情況,就是大家都在爭(zhēng)搶資源的情況?其實(shí)我們少一個(gè)數(shù)據(jù)倉(cāng)庫(kù),沒(méi)有一個(gè)非常牛逼的數(shù)據(jù)倉(cāng)庫(kù)團(tuán)隊(duì)來(lái)做數(shù)據(jù)倉(cāng)庫(kù)。也就是說(shuō)我需要一個(gè)數(shù)據(jù)就拿,這個(gè)架構(gòu)肯定是不OK的,所以我需要一個(gè)數(shù)據(jù)倉(cāng)庫(kù)。
更加強(qiáng)大的監(jiān)控平臺(tái),就是說(shuō)我需要監(jiān)控到甚至說(shuō)某一個(gè)任務(wù),某一個(gè)用戶,某一個(gè)任務(wù)的(38:14英語(yǔ))的情況,對(duì)于磁盤(pán)讀寫(xiě)的情況或者說(shuō)他突然發(fā)現(xiàn),我這個(gè)任務(wù)本來(lái)每天都半個(gè)小時(shí)都運(yùn)行完,今天怎么走了兩個(gè)小時(shí),是不是讓他發(fā)現(xiàn)他讀文件的節(jié)點(diǎn)剛好出現(xiàn)(38:30英語(yǔ))問(wèn)題,需要這方面的支持。
另外客戶端,我的打算是,因?yàn)楝F(xiàn)在我們團(tuán)隊(duì)有幾十個(gè),我們的客戶端有幾十個(gè),每個(gè)團(tuán)隊(duì)有一個(gè)或者兩個(gè)hadoop客戶端,就是提交任務(wù)的機(jī)器,不運(yùn)行任務(wù),就是我只提交的機(jī)器就將近一百臺(tái)了。然后我每次升級(jí)這個(gè)問(wèn)題是非常頭疼的,就是說(shuō)有一部分客戶端管理權(quán)限在我這兒,有一部分人客戶自己裝的,我只能匯總,但是肯定會(huì)有漏的,所以我現(xiàn)在基于(39:00英語(yǔ))去做這種無(wú)狀態(tài)的客戶端工作,我就發(fā)一個(gè)(39:04英語(yǔ))的鏡像,升級(jí)的話你自己重新裝就完了。
配置問(wèn)題,我需要一套自動(dòng)化運(yùn)維的工具,因?yàn)椴豢赡苷f(shuō)這一千多臺(tái)機(jī)器,每天還是寫(xiě)這么多腳本,我給一個(gè)(39:15英語(yǔ))寫(xiě)個(gè)腳本下發(fā),通過(guò)一個(gè)腳本直接拷到每臺(tái)機(jī)器上,還是需要一些自動(dòng)化運(yùn)維的工具在里面,來(lái)幫助完成這件事情。業(yè)務(wù)依賴升級(jí)的問(wèn)題,盡量想辦法去,就是我們?cè)趺幢M量想辦法去避免,因?yàn)槟愕南到y(tǒng)升級(jí)造成業(yè)務(wù)也需要升級(jí)呢?
行,我的分享基本上就到這里,謝謝大家。
嘉賓:我想問(wèn)一下,就是我們有一個(gè)數(shù)據(jù)庫(kù)平臺(tái),轉(zhuǎn)成hadoop平臺(tái)的話,有沒(méi)有可能?
楊大海:其實(shí)我覺(jué)得你單純說(shuō)一個(gè)數(shù)據(jù)庫(kù)轉(zhuǎn)化hadoop平臺(tái),因?yàn)樗鼈冊(cè)趦蓚€(gè)不同的戰(zhàn)線上。基于hadoop平臺(tái)上能夠滿足你某些數(shù)據(jù)查詢的這些要求,比如說(shuō)(40:09英語(yǔ))等等可以滿足你數(shù)據(jù)查詢的需求,但是這個(gè)平臺(tái)干的事情和你現(xiàn)在數(shù)據(jù)庫(kù),就是單純hadoop來(lái)說(shuō)干的事情和你數(shù)據(jù)庫(kù)干的事情,是完全兩碼事,你數(shù)據(jù)庫(kù)是滿足一下業(yè)務(wù)需求的查詢。比如說(shuō)我點(diǎn)一下前端就要出來(lái)了,但是hadoop這個(gè),我要寫(xiě)一些(40:29英語(yǔ))語(yǔ)句兩個(gè)小時(shí)算出結(jié)果的。
嘉賓:就是現(xiàn)在有很多產(chǎn)品,本身是(40:38英語(yǔ))語(yǔ)句的一些產(chǎn)品,那么對(duì)這個(gè)支持?
楊大海:我?guī)腿A為宣傳一下,其實(shí)華為基于(40:49英語(yǔ))方案,而且在(40:55英語(yǔ))社區(qū)里面基于(40:59英語(yǔ))查詢的一個(gè)東西,這些都可以去做(41:02)的多位查詢。因?yàn)?41:02英語(yǔ))本身是KV的查詢,基于這些方案可以做多余的查詢,而且滿足你這個(gè)數(shù)據(jù)量的需求,因?yàn)?41:10英語(yǔ))其實(shí)對(duì)存儲(chǔ)的數(shù)據(jù)量是沒(méi)有要求的,它只對(duì)并發(fā)吞吐量有要求,每秒鐘是多少KOBS這種是有要求的,他能支撐到服務(wù)是有限的,但是你只要有足夠大的硬盤(pán),你有多大的數(shù)據(jù),你都可以往里面寫(xiě),這個(gè)對(duì)他性能是沒(méi)什么影響的。