億級大數(shù)據(jù)實時分析與工具選型(附 PPT) - 開發(fā)者頭條 https://toutiao.io/posts/oaxhg1/preview
分享的最后阅羹,總結一下我做數(shù)據(jù)分析多年來的心得:
1居凶、沒有業(yè)務應用的大數(shù)據(jù)都是耍流氓馅笙,不要純粹去找工具赴肚,一定要結合業(yè)務去選擇届氢。
2乖菱、技術選型沒有想象中那么重要助币,實用和精通為妙静陈。
//
實時分析不是一個新問題燕雁,但如果上到億萬級的數(shù)據(jù)量時诞丽,這個問題也顯得非常重要。在數(shù)據(jù)分析尤其是多維分析這塊拐格,有幾個流派僧免,一個流派是開源的工具,還有一個流派是商業(yè)的工具捏浊。商業(yè)的工具中有幾家比較有名懂衩,一個是惠普的Vertica,一個是Oracle金踪,Oracle的不足之處就是太貴了浊洞,成本較高,還有就是Teradata胡岔,美國加州一個老牌的多維數(shù)據(jù)分析公司沛申。在另一邊的開源軟件,也可大概分為兩個流派姐军,一個叫做MOLAP 铁材,它在設計之初就是想把數(shù)據(jù)結構變成一個多維數(shù)據(jù)庫,這樣查詢起來既快又方便奕锌;另一個叫ROLAP著觉,企圖用傳統(tǒng)關系型數(shù)據(jù)庫去構建多維數(shù)據(jù)庫,因為像MySQL惊暴、Hive這種傳統(tǒng)數(shù)據(jù)庫是非常方便的饼丘。總的來說辽话,開源的大概有兩條路肄鸽,一條就是原生的支持多維的,另一條就是通過關系型數(shù)據(jù)庫去模擬這種多維查詢油啤。原生多維這邊工具的話典徘,小米用的比較多的就是Druid,Pinot益咬,Kylin和ElasticSearch逮诲。
//
首先是手機、電視幽告、電腦把事件通過網(wǎng)絡打開小米分析服務器梅鹦,這時服務器有兩條路,一條路是把Log存在 Scirbe里面冗锁,然后通過MapReduce和HDFS去做計算和存儲齐唆,結果會放到MySQL數(shù)據(jù)庫和HBase中,另外一條路則是所有事件來了以后冻河,經過Kafka以及Storm的計算集群把預計算算好箍邮,最后存到HBase中抛腕。所以在小米統(tǒng)計平臺上像分鐘級的數(shù)據(jù)都是從上面這條路來的,按天的數(shù)據(jù)則是從下面這條路來的媒殉,我們每天會用完整跑的Log去取代實時的數(shù)據(jù),大概是這樣一個過程摔敛。
//
四廷蓉、Druid的實時分析實踐
一開始做小米統(tǒng)計平臺時,數(shù)據(jù)其實也沒有做到實時的马昙,都是走上面的一條路桃犬,第二個階段通過MapReduce處理以后,把數(shù)據(jù)放到關系型數(shù)據(jù)里面行楞,比如像MySQL這樣的數(shù)據(jù)庫攒暇。再后來,業(yè)務慢慢擴展子房,RDBMS的容量有限形用,出現(xiàn)很多問題,所以到第三個階段我們把RDBMS變成HBase证杭,這個階段也持續(xù)了很久田度,再后來我們想得到實時的數(shù)據(jù),來到第四步解愤,通過Kafka镇饺、Storm再到RDBMS或者NoSQL,最后一步我們直接是把數(shù)據(jù)從Kafka轉到Druid送讲。
本文根據(jù)歐陽辰老師在〖2016 DAMS中國數(shù)據(jù)資產管理峰會〗現(xiàn)場演講內容整理而成奸笤。
(點擊底部“閱讀原文”獲取歐陽辰演講完整PPT)
講師介紹
歐陽辰,超過15年的軟件開發(fā)和設計經驗哼鬓,目前就職于小米公司监右,負責小米廣告平臺的架構研發(fā)。
曾為微軟公司工作10年异希,擔任高級軟件開發(fā)主管秸侣,領導團隊參與微軟搜索索引和搜索廣告平臺的研發(fā)工作。曾在甲骨文公司從事數(shù)據(jù)庫和應用服務器的研發(fā)工作宠互。熱愛架構設計和高可用性系統(tǒng)味榛,特別對于大規(guī)模互聯(lián)網(wǎng)軟件的開發(fā)予跌,具有豐富的理論知識和實踐經驗搏色。
大家好,很高興能跟大家分享一些關于實時數(shù)據(jù)分析的話題券册。
剛畢業(yè)時我有幸去了Oracle公司做企業(yè)軟件數(shù)據(jù)庫频轿,成為Oracle中國第一批研發(fā)員工垂涯。后來做了幾年,覺得還是想做互聯(lián)網(wǎng)軟件航邢,就去了微軟耕赘,工作了十年左右。在那做兩個項目膳殷,一個是搜索操骡,一個是廣告平臺。去年一月份加入小米公司赚窃,現(xiàn)在主要負責搭建廣告平臺和大數(shù)據(jù)平臺册招。
所以今天我會結合我在小米、微軟的一些大數(shù)據(jù)實踐勒极,給大家談談我對大數(shù)據(jù)的理解是掰,并介紹一些好用的工具。
本次演講的內容大致分為以下部分:
大數(shù)據(jù)和價值
大數(shù)據(jù)分析工具分類
HBase的應用和改進
Druid的實時分析實踐
其它工具的探索
一辱匿、大數(shù)據(jù)和價值
什么是大數(shù)據(jù)键痛?眾說紛紜。大家似乎覺得具備快匾七、多散休、變化大、種類多四個特征的數(shù)據(jù)就是大數(shù)據(jù)乐尊,我個人更愿意從另一個角度來定義:只有當你擁有全量的數(shù)據(jù)戚丸,并通過非常多的數(shù)據(jù)把問題解決得比較完美時,這時候的問題才是叫做大數(shù)據(jù)問題扔嵌。
給大家舉個例子:比如說計算中國的人口限府,我們可以通過每省、每市痢缎、每區(qū)的抽樣胁勺、采樣等方法來獲取非常接近真實的數(shù)據(jù),很快就能完成這個任務独旷。但是這個通過采樣解決人口統(tǒng)計問題的場景是否就是大數(shù)據(jù)問題呢署穗?再給大家舉一個我自己在做的大數(shù)據(jù)問題——廣告系統(tǒng)的推薦。由于每個人看的廣告內容嵌洼、類型都是不一樣的案疲,你需要對每個人去做算法,通過數(shù)據(jù)分析挖掘每個人的數(shù)據(jù)潛力麻养。假設現(xiàn)在你想通過一些算法找到一些用戶喜歡的廣告或者內容褐啡,而這時你要找到的內容少了一半,你就沒法推算出一半用戶的數(shù)據(jù)鳖昌,這時候你的效果也差了一半备畦。也就是說你的數(shù)據(jù)量越多低飒,覆蓋越多用戶,效果越好時懂盐,這時候我們可以認為它是一個真正的大數(shù)據(jù)問題褥赊。
大數(shù)據(jù)外表光鮮亮麗,就像紅樓夢里的大觀園莉恼,但里面其實是很無奈的拌喉。做大數(shù)據(jù)技術的同學都知道,這里面涉及到數(shù)據(jù)的清洗类垫、整理、存儲等很多很多枯燥的事情琅坡。此外悉患,大數(shù)據(jù)還有一個特點,就是當你有了大數(shù)據(jù)榆俺,還得想如何去變現(xiàn)售躁。在我看來,大數(shù)據(jù)實際上很難找到一個直接的途徑來變現(xiàn)茴晋,它的確可以去推動業(yè)務的智能化陪捷,做內容推薦讓用戶的體驗更好,但這些都是一些間接的變現(xiàn)場景诺擅,真正大數(shù)據(jù)能夠變現(xiàn)的場景市袖,我自己總結了一下,大概有兩個方向:一個是廣告烁涌,二是銀行的征信系統(tǒng)苍碟,除了這兩個領域之外,很少有公司愿意為數(shù)據(jù)買單撮执。
下面簡單介紹小米的大數(shù)據(jù)技術框架微峰。
和很多公司類似,小米的大數(shù)據(jù)框架也包括數(shù)據(jù)采集抒钱、存儲蜓肆、管理、分析谋币、算法和可視化仗扬。大部分組件都是開源的,另外我們會對一些核心的組件做一些深加工或者優(yōu)化蕾额、自定義厉颤。其中,在數(shù)據(jù)采集部分就是Scribe凡简,存儲用得較多的還是HBase逼友,后面我會介紹小米在這一塊的優(yōu)化精肃。管理上我們用了Kerberos去做認證,在上面還有一些Spark帜乞、Storm司抱、Hive、Impala和Druid黎烈。
說到大數(shù)據(jù)應用习柠,種類非常多,我簡單講一下小米在大數(shù)據(jù)上的一些應用照棋。
首先是精準營銷资溃,我們可以對每個用戶做一些畫像。用在搜索和推薦上烈炭,讓它變得更加精準溶锭;還有互聯(lián)網(wǎng)金融,有一些征信體系可以用到符隙;精細化運營趴捅;還有防黃牛,因為小米手機的性價比較高霹疫,很多時候新品出來時黃牛們會去搶拱绑,另一方面,現(xiàn)在的黃牛手段越來越高明了丽蝎,他們會模擬很多IP猎拨、新的賬號或者老的賬號等一些復雜的購買行為,所以就很需要采取一些手段去防黃牛屠阻。還有圖片迟几、圖像的分析和處理,像小米手機新推出的寶寶相冊等栏笆。
剛剛說的是一些業(yè)務的場景类腮,還有一些給開發(fā)者用的場景。
比如說小米推出的一個數(shù)據(jù)統(tǒng)計分析平臺蛉加,它提供一些API讓你嵌進去蚜枢,可以用數(shù)據(jù)分析你的應用使用情況。然后結合小米的用戶畫像针饥,為開發(fā)者提供更好的數(shù)據(jù)分析服務厂抽。
目前小米日活超過千萬的APP大概有二十幾家,包括瀏覽器丁眼、應用商店筷凤、視頻等,這些應用實時分析的需求非常旺盛,他們都是用這一套系統(tǒng)去做數(shù)據(jù)打點藐守、AB測試挪丢、畫像、分組等卢厂,所以在后面我們需要一個吞吐量大的實時數(shù)據(jù)分析處理系統(tǒng)來承擔這部分計算的任務乾蓬。
說到數(shù)據(jù)分析的步驟,最開始是數(shù)據(jù)收集慎恒,然后處理任内,清洗,建模融柬,分析死嗦,最后可視化。這是大概的基本步驟粒氧。
從數(shù)據(jù)分析的類型來看越除,也可以分為四個層次:最下面是一個比較基礎的層次,叫響應型分析靠欢,基本上是按照商業(yè)需求出商業(yè)報表廊敌。第二個層次叫診斷型分析铜跑,就是說當你有了很多數(shù)據(jù)以后门怪,從數(shù)據(jù)里面挖掘出一些問題,或者通過數(shù)據(jù)去解釋這些問題锅纺,像一些競品分析掷空、趨勢分析。第三個層次叫戰(zhàn)略分析囤锉,這個層次相對前面兩個層次來說比較難了坦弟,即在做很多公司的分析時,你需要建個模型官地,然后用數(shù)據(jù)去得出一些結論酿傍,很多咨詢公司就提供這種戰(zhàn)略分析,像麥肯錫驱入、貝恩等公司很多時候就是在這一層次做事情赤炒。最后一個層次也難,叫預測型分析亏较。你不光要建好模莺褒,還要想到底怎么做,采用什么樣的行動雪情,給出真正的建議遵岩。
二、大數(shù)據(jù)分析工具
小米統(tǒng)計平臺承接的數(shù)據(jù)量非常大巡通,而且對實時的要求非常高尘执,所以在工具的選取上也花了很多時間舍哄。下面給大家介紹一下小米在大數(shù)據(jù)實時處理時一些工具選型的思路。
實時分析不是一個新問題正卧,但如果上到億萬級的數(shù)據(jù)量時蠢熄,這個問題也顯得非常重要。在數(shù)據(jù)分析尤其是多維分析這塊炉旷,有幾個流派签孔,一個流派是開源的工具,還有一個流派是商業(yè)的工具窘行。商業(yè)的工具中有幾家比較有名饥追,一個是惠普的Vertica,一個是Oracle罐盔,Oracle的不足之處就是太貴了但绕,成本較高,還有就是Teradata惶看,美國加州一個老牌的多維數(shù)據(jù)分析公司捏顺。在另一邊的開源軟件,也可大概分為兩個流派纬黎,一個叫做MOLAP 幅骄,它在設計之初就是想把數(shù)據(jù)結構變成一個多維數(shù)據(jù)庫,這樣查詢起來既快又方便本今;另一個叫ROLAP有滑,企圖用傳統(tǒng)關系型數(shù)據(jù)庫去構建多維數(shù)據(jù)庫毕箍,因為像MySQL、Hive這種傳統(tǒng)數(shù)據(jù)庫是非常方便的〕图ぃ總的來說甩牺,開源的大概有兩條路薪棒,一條就是原生的支持多維的哀墓,另一條就是通過關系型數(shù)據(jù)庫去模擬這種多維查詢。原生多維這邊工具的話散怖,小米用的比較多的就是Druid菇绵,Pinot,Kylin和ElasticSearch杭抠。
在選數(shù)據(jù)分析工具的時候需要考慮很多事情脸甘,像一些很重要的數(shù)據(jù)量,還有就是你需要分析這些數(shù)據(jù)的維度有多少偏灿,你的用戶并發(fā)度丹诀,這些都是實際過程中需要考慮的重要因素。特別是維度,維度越多铆遭,系統(tǒng)會越復雜硝桩。
剛剛前面講到小米的統(tǒng)計工具,這里再放一張小米統(tǒng)計后臺的架構圖枚荣,我把它稍微簡化了一下:
首先是手機碗脊、電視、電腦把事件通過網(wǎng)絡打開小米分析服務器橄妆,這時服務器有兩條路衙伶,一條路是把Log存在 Scirbe里面,然后通過MapReduce和HDFS去做計算和存儲害碾,結果會放到MySQL數(shù)據(jù)庫和HBase中矢劲,另外一條路則是所有事件來了以后,經過Kafka以及Storm的計算集群把預計算算好慌随,最后存到HBase中芬沉。所以在小米統(tǒng)計平臺上像分鐘級的數(shù)據(jù)都是從上面這條路來的,按天的數(shù)據(jù)則是從下面這條路來的阁猜,我們每天會用完整跑的Log去取代實時的數(shù)據(jù)丸逸,大概是這樣一個過程。
三剃袍、HBase的應用和改進
小米用HBase還是蠻多的黄刚,HBase是一個比較有名的列式存儲,我們公司也有三個HBase Committer笛园,對HBase做了很多改進隘击。比如對源代碼的改進侍芝,改完以后我們又會把這些改進返回到開源社區(qū)研铆。再如名字服務,以前的話州叠,HBase訪問要填很多Server名棵红、端口名,現(xiàn)在用一個名字就可以訪問咧栗,包括HBase是不支持二級索引的逆甜,我們往里面增加了索引功能。
在服務器端改進的過程中致板,我們發(fā)現(xiàn)有些改進可以反饋到社區(qū)交煞,但有些反饋回去時整個審核流程特別慢,以至于后來小米內部慢慢斟或、逐步地就演變成了一個官方的版本素征,長期來看,這兩個版本的融合值得深思熟慮。
小米在初期時很多業(yè)務是使用MySQL的御毅,因為相對來說簡單粗暴根欧,但它的容量有限。業(yè)務容量擴張以后端蛆,小米大概有兩億個用戶凤粗,1.5億個月活用戶,日活也超過一億多今豆,MySQL一般來說是撐不住的嫌拣,這個時候很多業(yè)務就需要遷移到HBase上。
因此呆躲,最后小米提出一個很Common的HBase遷移方法亭罪,在最開始寫數(shù)據(jù)的時候雙寫,既寫HBase又寫MySQL的歼秽,保證新的數(shù)據(jù)會同時存在于HBase和MySQL里应役,第二個就是把MySQL中的歷史數(shù)據(jù)遷移到HBase,這樣從理論上兩個數(shù)據(jù)庫就能擁有同樣的內容了燥筷。第三個是雙讀HBase和MySQL箩祥,校驗數(shù)據(jù)是不是都一致,一般達到99.9%的結果時肆氓,我們就認為遷移是比較成功的袍祖。最后灰度返回到HBase結果。
四谢揪、Druid的實時分析實踐
一開始做小米統(tǒng)計平臺時蕉陋,數(shù)據(jù)其實也沒有做到實時的,都是走上面的一條路拨扶,第二個階段通過MapReduce處理以后凳鬓,把數(shù)據(jù)放到關系型數(shù)據(jù)里面,比如像MySQL這樣的數(shù)據(jù)庫患民。再后來缩举,業(yè)務慢慢擴展,RDBMS的容量有限匹颤,出現(xiàn)很多問題仅孩,所以到第三個階段我們把RDBMS變成HBase,這個階段也持續(xù)了很久印蓖,再后來我們想得到實時的數(shù)據(jù)辽慕,來到第四步,通過Kafka赦肃、Storm再到RDBMS或者NoSQL溅蛉,最后一步我們直接是把數(shù)據(jù)從Kafka轉到Druid绞旅。
Druid由一家叫MetaMarkets的公司開發(fā),目前像Yahoo温艇、小米因悲、阿里、百度等公司都在用它大量地做一些數(shù)據(jù)的實時分析勺爱,包括一些廣告晃琳、搜索、用戶的行為統(tǒng)計琐鲁。它的特點包括:
為分析而設計
為OLAP而生卫旱,它支持各種filter、aggregator和查詢類型围段。
交互式查詢
低延遲數(shù)據(jù)顾翼,內部查詢?yōu)楹撩爰墶?br> 高可用性
集群設計,去中性化規(guī)模的擴大和縮小不會造成數(shù)據(jù)丟失奈泪。
可伸縮
現(xiàn)有的Druid部署每天處理數(shù)十億事件和TB級數(shù)據(jù)适贸。Druid被設計成PB級別。
與Druid相類似的實時數(shù)據(jù)分析工具涝桅,還有Linkedln的Pinot和eBay的Kylin拜姿,它們都是基于Java開發(fā)的。Druid相對比較輕量級冯遂,用的人也多蕊肥,畢竟開發(fā)時間久一些,問題也少一些蛤肌。
Druid在小米內部除了應用于小米統(tǒng)計之外壁却,還應用于廣告系統(tǒng)。小米的廣告系統(tǒng)主要是對每個廣告的請求裸准、點擊展东、展現(xiàn)做一些分析,一條線是通過Kafka→Druid→數(shù)據(jù)可視化顯示狼速,另外一條路就是完整數(shù)據(jù)落盤到HDFS琅锻,每天晚上通過數(shù)據(jù)重放去糾正Druid里的一些數(shù)據(jù)卦停,覆蓋Druid的準確數(shù)據(jù)向胡,最后做可視化。
五惊完、其它工具的探索
Pinot
Pinot僵芹,Linkedln開發(fā)的類似于Druid的多維數(shù)據(jù)分析平臺,它的功能實際上要比Druid強大一些小槐,但因為去年才剛剛開始開源拇派,用的人比較少荷辕。大家有興趣的可以去試試。它的整個代碼量也比較大件豌,架構與Druid也非常相似疮方,但它引入了更好的一種協(xié)調管理器,更多的是一種企業(yè)級別的設計茧彤,更加完整骡显、規(guī)范。
Kylin
Kylin是eBay的開源分析工具曾掂,它的優(yōu)點就是很快惫谤,特別適合每天定時報表,缺點也很明顯珠洗,就是隨機查詢很慢溜歪。它還有一個好處就是支持標準的SQL,與Tableau等BI工具集成许蓖,可以直接連到eBay的這個Kylin工具蝴猪。而且,Kylin在Fast Cubing上做了一些預處理膊爪,反應較快拯腮。
KUDU
KUDU是去年十月份Apache開源的一個工具,與小米聯(lián)合發(fā)布蚁飒。它的定位是什么呢动壤?大家都知道Druid是一個批處理、高容量的查詢系統(tǒng)淮逻,響應時間很慢琼懊,而HBase可以支持快速的響應時間,但它主要是一個寫少讀多的情況爬早。
KUDU哼丈,走在這兩個極端的中間,它既能夠保證大吞吐筛严,又可以保證低延時醉旦。小米從去年十月份開始使用KUDU,主要用于一些服務質量監(jiān)控桨啃、問題排查车胡,總體感覺還不錯。小米也是KUDU現(xiàn)在最大的一個用戶照瘾,因為我們很多時候需要考慮HBase和Druid綜合的一些優(yōu)點匈棘,所以KUDU也是小米目前實驗的一個工具。
ElasticSearch
ElasticSearch可能很多公司都有實踐析命,同樣可以對LOG和信息做一些倒排表主卫,核心是用Lucene去做索引逃默。
最后,小米雖然每天都在處理大數(shù)據(jù)簇搅、各種用戶的數(shù)據(jù)完域,但我自己的信念就是“我們需要像保護自己的眼睛一樣保護用戶的隱私”,小米在用戶隱私這方面投資了很多瘩将,并做出了明確的規(guī)定筒主。
在歐洲,很多公司內部會把數(shù)據(jù)分成很嚴格的等級鸟蟹,像個人信息乌妙,所有可以關聯(lián)到個人的信息都是存在一個獨立的庫,任何人都沒有權限去訪問建钥。還有一些普通信息藤韵,大家是可以用的,還有比如說超過一萬人的一些聚合信息熊经,可以拿去做一些算法泽艘。但個人信息是堅決不可以訪問的。而在2006年4月14日镐依,歐洲當時還推出了一個非称ヤ蹋酷的隱私權保護條例,它定義了每個公司要設立首席數(shù)據(jù)官槐壳,來保護數(shù)據(jù)隱私然低,并且要求每個公司數(shù)據(jù)都是可遷移的,也就是說务唐,你的公司雖然擁有數(shù)據(jù)雳攘,但數(shù)據(jù)有權利把屬于他的個人信息從一個服務商轉移到另外一個服務商。
分享的最后枫笛,總結一下我做數(shù)據(jù)分析多年來的心得:
1吨灭、沒有業(yè)務應用的大數(shù)據(jù)都是耍流氓,不要純粹去找工具刑巧,一定要結合業(yè)務去選擇喧兄。
2、技術選型沒有想象中那么重要啊楚,實用和精通為妙吠冤。
3、維度不夠是一個永遠的痛特幔,無盡的傷咨演。在數(shù)據(jù)分析的過程中,維度是不斷增加的蚯斯。所以在未來選擇工具的同時薄风,一定要考慮維度的增加。
4拍嵌、像保護你的眼睛一樣去保護用戶的權利和隱私遭赂。