墨跡使用ODPS的流程及日志分析
大?。?/span>0.11 MB 人氣: 2017-10-13 需要積分:1
推薦 + 挑錯(cuò) + 收藏(0) + 用戶(hù)評(píng)論(0)
標(biāo)簽:odps(2519)
發(fā)帖量。墨跡天氣已經(jīng)集成了多語(yǔ)言版本,可根據(jù)手機(jī)系統(tǒng)語(yǔ)言自動(dòng)適配,用戶(hù)覆蓋包括中國(guó)大陸、港澳臺(tái),日韓及東南亞、歐美等全球各地用戶(hù)。運(yùn)營(yíng)團(tuán)隊(duì)每天最關(guān)心的是這些用戶(hù)正在如何使用墨跡,在他們操作中透露了哪些個(gè)性化需求。這些數(shù)據(jù)全部存儲(chǔ)在墨跡的API 日志中,對(duì)這些數(shù)據(jù)分析,就變成了運(yùn)營(yíng)團(tuán)隊(duì)每天的最重要的工作。墨跡天氣的API每天產(chǎn)生的日志量大約在400GB左右,分析工具采用了阿里云的大數(shù)據(jù)計(jì)算服務(wù)ODPS。
使用ODPS的邏輯流程如下:
圖2 墨跡日志分析流程
流程介紹:
1.在每個(gè)日志服務(wù)器上都安裝了Fluentd及ODPS數(shù)據(jù)導(dǎo)入插件。日志數(shù)據(jù)通過(guò)流通道DataHub實(shí)時(shí)導(dǎo)入到ODPS;
2.數(shù)據(jù)分析作業(yè)分小時(shí)級(jí)和天級(jí)任務(wù)。數(shù)據(jù)開(kāi)發(fā)工程師通過(guò)ODPS Python SDK向ODPS提交SQL 分析腳本,將統(tǒng)計(jì)后的數(shù)據(jù)導(dǎo)入Mongo DB。報(bào)表系統(tǒng)直接對(duì)接Mongo DB;
3.運(yùn)營(yíng)人員通過(guò)報(bào)表系統(tǒng)來(lái)查看用戶(hù)統(tǒng)計(jì)結(jié)果;
整個(gè)數(shù)據(jù)分析過(guò)程也做了很多優(yōu)化。以下是幾點(diǎn)說(shuō)明:
1.導(dǎo)入工具Fluentd。Fluentd是一款優(yōu)秀的日志導(dǎo)入軟件。代碼開(kāi)源,支持Apache License 2.0。Fluentd支持300多個(gè)插件,基本上今天的大數(shù)據(jù)處理系統(tǒng),F(xiàn)luentd都能支持。Fluentd還支持自定義插件,允許通過(guò)代碼編寫(xiě)其它數(shù)據(jù)源和目標(biāo)。使用配置簡(jiǎn)單、靈活,底層引擎關(guān)鍵部分通過(guò)使用C語(yǔ)言類(lèi)庫(kù)編寫(xiě),所以性能比較好。墨跡選擇了使用Fluentd向ODPS導(dǎo)入數(shù)據(jù)。
2.時(shí)區(qū)數(shù)據(jù)的統(tǒng)一。 墨跡的服務(wù)器部署在不同時(shí)區(qū),日志數(shù)據(jù)按天和小時(shí)兩級(jí)分區(qū)流入到ODPS表中,但統(tǒng)計(jì)作業(yè)是發(fā)生在北京時(shí)間。例如,對(duì)于2015年12月1日的數(shù)據(jù)統(tǒng)計(jì)是在12月2日凌晨來(lái)做的。由于時(shí)區(qū)不同,統(tǒng)計(jì)作業(yè)運(yùn)行完畢后,仍有部分時(shí)區(qū)在12月1日的數(shù)據(jù)會(huì)持續(xù)流入1日的分區(qū)表中,這就會(huì)導(dǎo)致這部分?jǐn)?shù)據(jù)在統(tǒng)計(jì)時(shí)落掉。
解決這個(gè)問(wèn)題,在實(shí)施時(shí)將所有的日志數(shù)據(jù)中的local時(shí)間按北京時(shí)間做了轉(zhuǎn)換,截止到北京時(shí)間12月1日結(jié)束時(shí),所有數(shù)據(jù)流入1日的分區(qū)中。其它時(shí)區(qū)是1日的數(shù)據(jù)會(huì)流入2日的分區(qū),數(shù)據(jù)會(huì)在第二天完成統(tǒng)計(jì)。Fluentd中Filter 插件可以完成這個(gè)轉(zhuǎn)換操作,配置非常簡(jiǎn)單,如下面部分代碼:
type record_transformer enable_ruby Bjdatetime ${(Time.strptime(LocalDatetime,‘%m/%d-%H:%M:%S,%L’).gmtime+8*3600).strftime(‘%Y-%m-%d %H:%M:%S’)}
3. 任務(wù)的調(diào)度。墨跡分析的作業(yè)每天和每小時(shí)都會(huì)執(zhí)行。分析后的數(shù)據(jù)導(dǎo)入本地Mongo DB,報(bào)表系統(tǒng)接入Mongo DB來(lái)做展現(xiàn)。墨跡分析工程師在本地使用定時(shí)調(diào)度Python腳本完成這些流程。SQL 分析腳本可以通過(guò)ODPS Python SDK直接提交到ODPS上執(zhí)行完,完成后將統(tǒng)計(jì)結(jié)果放到List 對(duì)象。通過(guò)Python Mongo Client 將List寫(xiě)入Mongo DB。
墨跡天氣的這一流程之前是在國(guó)外某云計(jì)算平臺(tái)上完成的,需要分別使用云存儲(chǔ)、大數(shù)據(jù)分析等服務(wù),數(shù)據(jù)分析完成后再同步到本地Mongo DB中與報(bào)表系統(tǒng)對(duì)接。在遷移到ODPS后,流程上做了優(yōu)化,EMR的工作省掉了,日志數(shù)據(jù)導(dǎo)入到ODPS表后,通過(guò)SQL進(jìn)行分析,完成后直接將結(jié)果寫(xiě)入本地Mongo DB。
在存儲(chǔ)方面,ODPS中的表按列壓縮存儲(chǔ),更節(jié)省存儲(chǔ)空間,整體上存儲(chǔ)和計(jì)算的費(fèi)用比之前省了70%,性能和穩(wěn)定性也提高了很多。同時(shí)墨跡可以借助ODPS上的機(jī)器學(xué)習(xí)算法,對(duì)數(shù)據(jù)進(jìn)行深度挖掘,為用戶(hù)提供個(gè)性化的天氣服務(wù)。
?
非常好我支持^.^
(0) 0%
不好我反對(duì)
(0) 0%