億級數(shù)據(jù)自助應(yīng)用,京東物流基于Doris實(shí)現(xiàn)高性能秒級分析
一、業(yè)務(wù)場景介紹
首先和大家分享下京東物流業(yè)務(wù)的需求和億級數(shù)據(jù)自助應(yīng)用的背景。介紹京東物流經(jīng)營數(shù)據(jù)發(fā)展路線,底層數(shù)據(jù)的演進(jìn)思路,業(yè)務(wù)對于數(shù)據(jù)訴求迭代。
1. 業(yè)務(wù)需要什么
京東物流除了包括快遞服務(wù)的倉、運(yùn)、配三個(gè)環(huán)節(jié)外,它的一體化供應(yīng)鏈物流服務(wù),則更多是基于對商品銷售和供應(yīng)鏈的理解,合理規(guī)劃倉網(wǎng),分布庫存,提前將用戶需要的貨物儲(chǔ)存到其在全國范圍數(shù)百個(gè)不同等級的倉庫中。當(dāng)用戶下單后,商品將直接從最近的倉庫送達(dá)站點(diǎn),開始配送。用戶下單后,快遞公司會(huì)通過干線網(wǎng)絡(luò),將貨物運(yùn)輸至對應(yīng)的區(qū)域,再分發(fā)至配送站點(diǎn)進(jìn)行配送。這些服務(wù)以一體化解決方案的形式提供予客戶,滿足客戶的各種需求,業(yè)務(wù)極其復(fù)雜。
對于我們數(shù)據(jù)側(cè)的建設(shè)工作者來說,會(huì)遇到各種各樣的現(xiàn)實(shí)問題:
- 早:海量數(shù)據(jù)的多維查詢已經(jīng)成為常態(tài),高時(shí)效保障是業(yè)務(wù)的最新追求,甚至要求實(shí)時(shí);
- 散:數(shù)據(jù)存儲(chǔ)在不同的業(yè)務(wù)系統(tǒng),各個(gè)系統(tǒng)沒有標(biāo)準(zhǔn)的數(shù)據(jù)規(guī)范, 數(shù)據(jù)重復(fù)建設(shè);
- 重:日報(bào)、周報(bào)、半月報(bào)、月報(bào)等工作效率低,部分重復(fù)工作多,數(shù)據(jù)統(tǒng)計(jì)費(fèi)時(shí)費(fèi)力;
- 慢:全國區(qū)域、戰(zhàn)區(qū)以及各產(chǎn)品群數(shù)據(jù)場景多樣,無法快速響應(yīng)數(shù)據(jù)變化;
- 缺:缺少統(tǒng)一的數(shù)據(jù)資產(chǎn)管理,運(yùn)營人員無法方便、快捷地進(jìn)行統(tǒng)一的數(shù)據(jù)分析;
- 難:領(lǐng)導(dǎo)獲取數(shù)據(jù)難, 營銷投入產(chǎn)出比衡量難,數(shù)據(jù)驅(qū)動(dòng)業(yè)務(wù)難,數(shù)據(jù)價(jià)值挖掘難。
2. 當(dāng)前需要什么
1) 生產(chǎn)系統(tǒng)
是指在正常情況下支持單位日常業(yè)務(wù)運(yùn)作的信息系統(tǒng)。它包括生產(chǎn)數(shù)據(jù)、生產(chǎn)數(shù)據(jù)處理系統(tǒng)和生產(chǎn)網(wǎng)絡(luò)。
2) 數(shù)據(jù)倉庫
是為企業(yè)所有級別的決策制定過程,提供所有類型數(shù)據(jù)支持的戰(zhàn)略集合。它是單個(gè)數(shù)據(jù)存儲(chǔ),出于分析性報(bào)告和決策支持目的而創(chuàng)建。為需要業(yè)務(wù)智能的企業(yè),提供指導(dǎo)業(yè)務(wù)流程改進(jìn)、監(jiān)視時(shí)間、成本、質(zhì)量以及控制。
3) 數(shù)據(jù)集市
是基于京東數(shù)據(jù)倉庫和大數(shù)據(jù)平臺(tái)構(gòu)建的面向各BG/BU的數(shù)據(jù)環(huán)境,為各BG/BU提供數(shù)據(jù)應(yīng)用服務(wù),包含CFO、CMO、COO、MOBILE等數(shù)據(jù)集市。
4) 應(yīng)用系統(tǒng)
是指可以發(fā)揮數(shù)據(jù)價(jià)值去輔助用戶更優(yōu)地做決策(甚至行動(dòng))的一種產(chǎn)品形式。
3. 數(shù)據(jù)團(tuán)隊(duì)怎么做:業(yè)財(cái)數(shù)據(jù)體系建設(shè)
每個(gè)公司的業(yè)務(wù)數(shù)據(jù)和財(cái)務(wù)數(shù)據(jù)是天然割裂的狀態(tài)。舉例來說,一家全國規(guī)模的連鎖店,每個(gè)店的店員的薪資和日程運(yùn)營的費(fèi)用(如水電費(fèi))怎么來反映到每一單上面去,如何把業(yè)務(wù)數(shù)據(jù)和財(cái)務(wù)數(shù)據(jù)打通,這有點(diǎn)像銀行的分潤,把業(yè)務(wù)數(shù)據(jù)規(guī)范到每一個(gè)環(huán)節(jié)對應(yīng)的每個(gè)功能點(diǎn)上去,即成本因素和收支因素的影響點(diǎn),再把數(shù)據(jù)再給分擔(dān)上去。這也就是基礎(chǔ)模型搭建的一個(gè)過程,最終會(huì)支撐到上游資金分析體系的客戶的分析和成本支持。
標(biāo)準(zhǔn)化后的管理側(cè)數(shù)據(jù)口徑、顆粒度及維度將全面滿足企業(yè)對精細(xì)化、實(shí)時(shí)化業(yè)財(cái)分析的要求,為業(yè)務(wù)財(cái)務(wù)出具專業(yè)的分析與報(bào)告提供數(shù)據(jù)支撐。同時(shí),可復(fù)用的、具備公共能力的標(biāo)準(zhǔn)數(shù)據(jù)將支持企業(yè)在價(jià)值鏈條上建立多維分析架構(gòu),利用多層次、可交叉的分析直接加強(qiáng)企業(yè)對業(yè)務(wù)信息的鉆取能力,推動(dòng)業(yè)務(wù)洞察和管理智能化。
二、面臨的困境
數(shù)據(jù)可視化、靈活分析迫在眉睫,權(quán)限管理,數(shù)據(jù)安全需要保障。
1. 數(shù)據(jù)可視化建設(shè)
在數(shù)據(jù)導(dǎo)出控制方面:
存在的隱患:
數(shù)據(jù)導(dǎo)出至本地電腦,并做分析;數(shù)據(jù)導(dǎo)出后,無法做跟蹤控制。導(dǎo)出次數(shù)達(dá)3000次/周。
解決方案:
- 長遠(yuǎn)解決方案:用戶需求反哺,沉淀方法論,線下分析報(bào)表化,支持自助探索。
- 短期解決方案:導(dǎo)出時(shí),彈窗提醒法律風(fēng)險(xiǎn);導(dǎo)出形成賬單,并每月發(fā)送給區(qū)總了解。
在數(shù)據(jù)權(quán)限控制方面:
存在的隱患:
- 分析權(quán)限:因歷史積累,訪問大數(shù)據(jù)開發(fā)分析平臺(tái)的權(quán)限不匹配當(dāng)前安全要求。例如,有些業(yè)務(wù)分析師可以訪問庫內(nèi)全量表,未區(qū)分區(qū)域;
- 指標(biāo)權(quán)限:指標(biāo)的訪問權(quán)限控制散落在各系統(tǒng)管理,無法做到統(tǒng)一控制,容易混亂和遺漏。
解決方案:
- 分析權(quán)限:梳理BDP訪問權(quán)限,按照業(yè)務(wù)特性縮小訪問范圍,并制定崗位權(quán)限白皮書;
- 指標(biāo)權(quán)限:指標(biāo)出口由統(tǒng)一數(shù)據(jù)API進(jìn)行控制,指標(biāo)查看權(quán)限設(shè)置由指標(biāo)收口人在資產(chǎn)管理平臺(tái)統(tǒng)一設(shè)置。
2. 工具論證
與業(yè)務(wù)用戶代表組成調(diào)研小組,對后續(xù)工具選型進(jìn)行調(diào)研:
- 內(nèi)部工具調(diào)研,京東動(dòng)力目前處于快速迭代階段,調(diào)研現(xiàn)階段支持功能,定制化開發(fā)的相應(yīng)速度;
- 外部工具調(diào)研,從成本,市場成熟度,產(chǎn)品易用性,擴(kuò)展性,性能等多維度交叉比對市場主流BI工具的優(yōu)缺點(diǎn);
- 內(nèi)外部工具對比,業(yè)務(wù)方、產(chǎn)品經(jīng)理以及研發(fā)三方組成專家評分組,對內(nèi)外部工具進(jìn)行評分;
- 工具對比結(jié)論,最終確定BI工具實(shí)施方案。
3. 目標(biāo)現(xiàn)狀分析
目前京東物流數(shù)據(jù)探索領(lǐng)域分析工具的目標(biāo)以及當(dāng)前目標(biāo)現(xiàn)狀的分析,包括:
現(xiàn)狀情況:
- 京東動(dòng)力作為分析工具
- 動(dòng)力從商城數(shù)據(jù)中臺(tái)引入
突出問題:
- 性能慢:分鐘級,高峰期出不來
- 上卷、下鉆等功能缺失
- 體驗(yàn)不友好,拖拽繁瑣
臨時(shí)方案:
- 提數(shù),本地分析
- 隱患:數(shù)據(jù)導(dǎo)出后無法跟蹤
長期方案:
- 引入更適合的工具
- 調(diào)研:動(dòng)力的計(jì)劃,Tableau、永洪BI等
分析工具目標(biāo):
- 提供便捷自助服務(wù):一站式分析平臺(tái),集數(shù)據(jù)準(zhǔn)備、報(bào)告制作、數(shù)據(jù)分析為一體,業(yè)務(wù)人員也能輕松、快速地制作并分析數(shù)據(jù)報(bào)告,帶來業(yè)務(wù)驅(qū)動(dòng)的數(shù)據(jù)分析工作模式。多維度下鉆和上卷。
- 內(nèi)嵌豐富組件,上線周期短,組件豐富,可以對所有數(shù)據(jù)源進(jìn)行合并、搜索、交互和分析。
- 移動(dòng)跨屏,無縫支持PC、iPhone、iPad和Android,并在這些終端設(shè)備上保持一致、易用的用戶體驗(yàn)。
- 高性能,秒級計(jì)算,利用列存儲(chǔ)和內(nèi)存計(jì)算,實(shí)現(xiàn)千萬級數(shù)據(jù)分析的秒級響應(yīng);提升性能,支撐更多的分析維度和更大的數(shù)據(jù)范圍。
當(dāng)前問題詳解:
- 自主分析不便捷,加工鏈條過長,需要前端,UI,產(chǎn)品以及UI多方配合,資源協(xié)調(diào)困難,溝通成本較高;
- 定制化研發(fā)投入多,定制化開發(fā),不同維度的分析需要開發(fā)不同的匯總以及前段展示界面,底表模型變更影響范圍廣;
- 圖表組件不豐富,對于每種新的應(yīng)用場景均需要不同的額開發(fā)集成,各功能模塊之前需要聯(lián)調(diào)測試,開發(fā)周期長,暫不支持移動(dòng)端;
- 無法跨屏展示&性能低,現(xiàn)沒有APP端展示;查詢依托于大數(shù)據(jù)平臺(tái)資源,在業(yè)務(wù)忙時(shí)查詢性能低。
4. 分析工具功能矩陣
由前面的分析,總結(jié)了分析工具的功能矩陣:
三、解決方案
數(shù)據(jù)從無到有,從有到準(zhǔn),從準(zhǔn)到全,每個(gè)階段都會(huì)面臨不同的業(yè)務(wù)訴求,需要緊跟業(yè)務(wù)變化做迭代。
1. 數(shù)據(jù)引擎的變遷
2. 資源模式及架構(gòu)優(yōu)化
領(lǐng)航中分析師報(bào)表,為保證靈活性多通過報(bào)表工具(京東動(dòng)力)配置實(shí)現(xiàn),以Presto作為計(jì)算節(jié)點(diǎn),以BDP大數(shù)據(jù)平臺(tái)作為數(shù)據(jù)存儲(chǔ)架構(gòu)。但計(jì)算資源和存儲(chǔ)資源均是共享模式,無法通過擴(kuò)資源的方式有效的提升查詢效率,嚴(yán)重影響用戶體驗(yàn),急需改變。
- 之前架構(gòu):領(lǐng)航+動(dòng)力+PRESTO+BDP
- 弊端
Presto集群無法資源隔離,易出現(xiàn)資源競爭;無法按業(yè)務(wù)條線對資源進(jìn)行擴(kuò)容;
報(bào)表數(shù)據(jù)存放在BDP平臺(tái),當(dāng)前集群任務(wù)多,任務(wù)運(yùn)行貫穿正常工作時(shí)段,容易造成BDP平臺(tái)繁忙導(dǎo)致報(bào)表數(shù)據(jù)讀取慢的情況。
- 解決方案:領(lǐng)航+動(dòng)力+DORIS
引入新架構(gòu),資源獨(dú)占;解耦BDP平臺(tái)對數(shù)據(jù)展示影響
- 效果:已借助單票分析項(xiàng)目完成嘗試及驗(yàn)證
查詢從10秒+到秒級響應(yīng)提升
獨(dú)立資源管控,按需優(yōu)化
3. Doris表管理
常用的表管理操作,包括:
1)表創(chuàng)建
2) 添加分區(qū)
ALTER TABLE table_name ADD PARTITION IF NOT EXISTS p20200803 VALUES [('2020-08-03'), ('2020-08-04'));
3)刪除分區(qū)
TRUNCATE TABLE table_name PARTITION(p20200803,p20200804
注意事項(xiàng):
- 規(guī)范分區(qū),統(tǒng)一分區(qū)規(guī)則便于后續(xù)運(yùn)維
- 導(dǎo)入時(shí),會(huì)同時(shí)給所有Rollup 產(chǎn)生數(shù)據(jù),過多的Rollup 會(huì)影響導(dǎo)入性能,評估Rollup創(chuàng)建個(gè)數(shù)
- 批量導(dǎo)入清理歷史數(shù)據(jù)建議小范圍多批次串行操作,合理利用資源
4. Doris數(shù)據(jù)導(dǎo)入:Hive2Doris通過Broker Load方式寫入
常用的數(shù)據(jù)導(dǎo)入操作,包括:
1) 轉(zhuǎn)換導(dǎo)入表格式
2)Broker Load
3) 追蹤導(dǎo)入狀態(tài)
show load from jddl_test where label = 'app_ea_pal_vender_all_sum_m_20201101_183213_19688970430' \G
注意事項(xiàng):
- LABEL:用于指定這一批次導(dǎo)入的label,用于后期進(jìn)行作業(yè)狀態(tài)查詢等
- max_filter_ratio:用于指定允許過濾不規(guī)范數(shù)據(jù)的最大比例,默認(rèn)是0,不允許過濾,自定義指定應(yīng)該如下:
- 'max_filter_ratio=0.2',含義是允許20%的錯(cuò)誤率
- timeout:指定load 作業(yè)的超時(shí)時(shí)間,單位是秒。當(dāng)load執(zhí)行時(shí)間超過該閾值時(shí),會(huì)自動(dòng)取消。默認(rèn)超時(shí)時(shí)間是86400 秒。
5. 數(shù)據(jù)自動(dòng)導(dǎo)入管理
-t 表示的是待推送數(shù)據(jù)的表名【該參數(shù)是必選,如果不選會(huì)報(bào)錯(cuò)】
-c 表示的是待推送數(shù)據(jù)的列名【該參數(shù)是可選,如果不選會(huì)默認(rèn)推送所有列,建議不選擇】
-n 表示的是推送多長時(shí)間的數(shù)據(jù)【需要與參數(shù)-e聯(lián)動(dòng)使用,如果不填寫,默認(rèn)推送1天的數(shù)據(jù)】
-e 表示的是腳本數(shù)據(jù)推送的日期【默認(rèn)是昨天,該參數(shù)一般是追歷史數(shù)據(jù)時(shí)使用,比如今天是2020-05-08日,默認(rèn)推送20200507日的數(shù)據(jù),如果指定了-n參數(shù)的話推送的就會(huì)是20200507-n天至20200507】
-d 表示對doris數(shù)據(jù)庫的表進(jìn)行操作【默認(rèn)參數(shù)是:db_null 不執(zhí)行建表】db_get_crt:表示打印出doris建表語句,該邏輯會(huì)讀取hive中的表結(jié)構(gòu),然后將HIVE中的字段為string類型的當(dāng)成維,int,bigint,double類型的當(dāng)成值生成建表語句【具體邏輯請參考腳本】
- db_reset :表示重建表,如果調(diào)整表結(jié)構(gòu)后,需要使用這個(gè)參數(shù)重構(gòu)doris表結(jié)構(gòu)【如果指定了-c參數(shù),記得增加列】
- db_drop :表示刪除doris中對應(yīng)的表,用于下線任務(wù)
- db_create :如果不存在對應(yīng)的表就創(chuàng)建表,如果存在表就打印表結(jié)構(gòu)下面,重點(diǎn)分享下縱向聯(lián)邦學(xué)習(xí)和橫向聯(lián)邦學(xué)習(xí)。
注意事項(xiàng):
- 數(shù)據(jù)庫特性不同天然存在融合瓶頸,新技術(shù)的引入需要有充分的預(yù)案,做到各司其職,才能讓其特性得到發(fā)揮
6. 自動(dòng)報(bào)表實(shí)現(xiàn)
通過動(dòng)力連接數(shù)據(jù)庫,把對應(yīng)的表按照權(quán)限管理配置成數(shù)據(jù)源,在數(shù)據(jù)源上創(chuàng)建應(yīng)用,可以讓業(yè)務(wù)人員在10分鐘搭建起符合自己預(yù)期的分析報(bào)表。
7. 待優(yōu)化點(diǎn):子查詢對應(yīng)Rollup的影響
子查詢?nèi)绻麤]有生效rollup,外層是無法生效。
四、未來規(guī)劃
技術(shù)迭代是手段,對業(yè)務(wù)發(fā)展起促進(jìn)作用才是目的,如何通過技術(shù)的升級實(shí)現(xiàn)業(yè)務(wù)技術(shù)相互促進(jìn)。
1. 離線數(shù)據(jù)技術(shù)升級
BDP是一個(gè)公共平臺(tái),支持開發(fā)人員、分析師以及業(yè)務(wù)人員做數(shù)據(jù)查詢,業(yè)務(wù)是不斷變化增長的,業(yè)務(wù)部門分析也會(huì)隨著對業(yè)務(wù)的理解程度不斷深入,但是實(shí)際的物理資源不能無限制擴(kuò)容?;诖?,每天的重要任務(wù)SLA保障是數(shù)據(jù)團(tuán)隊(duì)面臨的最大挑戰(zhàn),并且隨著業(yè)務(wù)發(fā)展會(huì)愈發(fā)嚴(yán)重。這就需要做系統(tǒng)規(guī)劃:
- 不斷優(yōu)化迭代底層模型,對數(shù)據(jù)做最優(yōu)整合,對主題模型的數(shù)據(jù)引入生命周期管理,表現(xiàn)在兩個(gè)方面:
其一,模型隨著業(yè)務(wù)有新增,也必須有消亡;
其二,模型本身存儲(chǔ)數(shù)據(jù)需要有生命周期管理,對于可追溯的分析數(shù)據(jù)制定數(shù)據(jù)保留策略,滿足業(yè)務(wù)需求的同時(shí)盡量減少歷史數(shù)據(jù)存儲(chǔ)。
- 貼合平臺(tái)優(yōu)化加工策略,縱觀調(diào)度平臺(tái)全時(shí)段運(yùn)行情況,在某些時(shí)段會(huì)出現(xiàn)資源利用波谷,通過并行任務(wù)合理利用資源。
- 新調(diào)度引擎引入,按照任務(wù)不同的加工場景選擇不同調(diào)度引擎(Hive/Spark),以最小代價(jià)實(shí)現(xiàn)調(diào)入任務(wù)跑數(shù)。
2. 業(yè)務(wù)迭代技術(shù)跟進(jìn)
隨著業(yè)務(wù)的不斷成熟,對精細(xì)化運(yùn)營有了新的要求,會(huì)涉及到各方業(yè)務(wù)系統(tǒng)的迭代,數(shù)據(jù)處理需要夯實(shí)底層架構(gòu)。
- 通用化:業(yè)財(cái)一體化融合,對成熟的業(yè)務(wù)實(shí)現(xiàn)到單的融合;
- 體系化:通過各維度損益模型串聯(lián)業(yè)務(wù)實(shí)際運(yùn)營成本,支持業(yè)務(wù)分析,做全盤優(yōu)化調(diào)優(yōu)成本;
- 清晰化:看清每個(gè)經(jīng)營動(dòng)作成本,減少由于分?jǐn)傇斐伞安町愋浴澳ㄆ?,結(jié)合業(yè)務(wù)量、收入對不同環(huán)節(jié)進(jìn)行改善;
- 靈活化:即席查詢,利用新的OLAP計(jì)算框架,支持各個(gè)維度數(shù)據(jù)查看,實(shí)現(xiàn)不同業(yè)務(wù)層級數(shù)據(jù)的上卷、下鉆。
3. 團(tuán)隊(duì)建設(shè)
獨(dú)木不成林,任何一個(gè)項(xiàng)目的成功都是團(tuán)隊(duì)配合的結(jié)果。在團(tuán)隊(duì)建設(shè)之初,團(tuán)隊(duì)的人員相對較少,對接的業(yè)務(wù)也相對聚焦,從0到1的數(shù)據(jù)建設(shè)過程中一定是采用“縱向”的開發(fā)方式——一個(gè)數(shù)據(jù)開發(fā)對接一個(gè)條線,對當(dāng)前條線從頭到全盤負(fù)責(zé),實(shí)現(xiàn)高速迭代。這個(gè)階段會(huì)形成團(tuán)隊(duì)核心價(jià)值,當(dāng)各業(yè)務(wù)方都認(rèn)可這種數(shù)據(jù)分析思路,隨之而來的就是業(yè)務(wù)需求膨脹,不同主題之間的橫向拉通分析,組內(nèi)人員的補(bǔ)充等。如何做到人員價(jià)值最大化,則需要投入精力在團(tuán)隊(duì)建設(shè)上,主要包括:
- 方法論建設(shè):沒有成熟的方法論,后續(xù)難以為繼。
- 技術(shù)提升:離線實(shí)時(shí)數(shù)據(jù)全鏈路的技術(shù)結(jié)合,技術(shù)要求高。
- 項(xiàng)目管理:大項(xiàng)目周期以半年設(shè)置年計(jì),項(xiàng)目投入產(chǎn)出科學(xué)衡量。
- 數(shù)據(jù)權(quán)限:數(shù)據(jù)訪問的細(xì)粒度的控制,基礎(chǔ)元數(shù)據(jù)補(bǔ)全。
- 人才隊(duì)伍建設(shè):需要人才梯隊(duì)來保障持續(xù)數(shù)據(jù)迭代。
今天的分享就到這里,謝謝大家。