大数据开发第一站ODS篇
前言
互聯(lián)網(wǎng)的高速發(fā)展,行業(yè)內(nèi)事實(shí)的分工有了精細(xì)化,不過(guò)網(wǎng)上的段子還停留在那些程序員加班熬夜掉光頭發(fā)的梗,很多人的觀念也是停留在敲敲打打就倒騰出一個(gè)軟件的層面吧,前一陣接觸了一些求職者,面向的是大數(shù)據(jù)開(kāi)發(fā)工程師、數(shù)據(jù)開(kāi)發(fā)、數(shù)倉(cāng)工程師的這些崗位,其實(shí)面向的工種就是寫(xiě)SQL的那群人,但是發(fā)現(xiàn)基本都是一開(kāi)頭就是結(jié)束。因?yàn)榧夹g(shù)人員都是覺(jué)得高并發(fā),底層,百度起來(lái)也方便,這寫(xiě)個(gè)SQL能聊出什么花來(lái)呢,今天我就以O(shè)DS的話題,聊一聊關(guān)于數(shù)倉(cāng)里面的一些事情。
不斷變化的數(shù)倉(cāng)
數(shù)倉(cāng)一面戛然而止的問(wèn)題
但凡數(shù)據(jù)開(kāi)發(fā),一定會(huì)問(wèn)一個(gè)問(wèn)題:“你了解數(shù)倉(cāng)分層么”,我們收到幾乎清一色的回答都是,知道啊,就是ods,dwd,dws,adm呀,進(jìn)一步問(wèn)一下,為什么需要這樣子劃分呢?或者比如說(shuō)如果不要dwd可以么?這種時(shí)候很多情況要么是說(shuō)團(tuán)隊(duì)內(nèi)這樣子劃分的,要么也說(shuō)不上所以然來(lái),然后就沒(méi)有然后了。
回顧數(shù)倉(cāng)
這個(gè)是阿里巴巴Dataphin中的數(shù)倉(cāng)劃分,原文
傳統(tǒng)的數(shù)據(jù)其實(shí)就是ods->dwd->dws->adm這種劃分,實(shí)際上圖中給我們的是叫做
ods->cdm->ads這種劃分,dwd、dim、dws其實(shí)是在cdm里面的,目測(cè)也不是那么一串下去的。再看看下圖京東的劃分。
一看還多出來(lái)了一些緩沖層啥的,其他也不枚舉了,數(shù)倉(cāng)的劃分一直就沒(méi)有規(guī)定說(shuō)一定需要怎么劃分,只是在數(shù)據(jù)加工的時(shí)候有些本身的形態(tài),需要估計(jì)整個(gè)數(shù)倉(cāng)的業(yè)務(wù)覆蓋、性能、質(zhì)量、成本以及團(tuán)隊(duì)協(xié)作效率的因素,這個(gè)時(shí)候出來(lái)的形態(tài)才是真正的樣子。
ODS的話題
ods和煉油的對(duì)應(yīng)關(guān)系
其實(shí)面試中如果問(wèn)了數(shù)倉(cāng)分層的話,一定會(huì)接著問(wèn)(ods|dwd|dws|adm)是什么這類的問(wèn)題,常規(guī)的對(duì)ods的回答大部分就是上游、或者業(yè)務(wù)數(shù)據(jù)流入、這些其實(shí)都對(duì),但是總感覺(jué)少了點(diǎn)什么,觸及不到面試官的興奮點(diǎn)。我們一定聽(tīng)說(shuō)過(guò)大數(shù)據(jù)就是石油的比喻,這個(gè)比喻其實(shí)不光是宏觀層面,細(xì)節(jié)層面也是使用的,石油也是經(jīng)過(guò)原油多到工序加工出來(lái)的,對(duì)于我們的ODS來(lái)說(shuō)就是對(duì)應(yīng)的原油了,我們可以看看石油的加工鏈路:
我們?cè)倏纯磾?shù)據(jù)的鏈路
其實(shí)里面核心的邏輯就是,原油經(jīng)過(guò)不斷提煉,在各個(gè)階段都可以加工出各種產(chǎn)品,
數(shù)據(jù)的提煉也是,在ods層面可以也可以加工出各種結(jié)果,這種情況取決ods數(shù)據(jù)的易用程度,大部分情況來(lái)說(shuō)可以有以下的情況:
ODS的劃分
模擬信號(hào)數(shù)據(jù) Analog data
模擬信號(hào)相對(duì)于數(shù)字量而言,指的是取值范圍是連續(xù)的變量或者數(shù)值。模擬數(shù)據(jù)是指在某個(gè)區(qū)間產(chǎn)生的連續(xù)值,例如,聲音、圖像、溫度、壓力,當(dāng)然這個(gè)是工業(yè)上的概念搬過(guò)來(lái)而已,在我們實(shí)際大數(shù)據(jù)處理的時(shí)候,例如監(jiān)控類程序,我們一般會(huì)在內(nèi)存維護(hù)一個(gè)監(jiān)控量,再開(kāi)一個(gè)后臺(tái)線程去讀取,還有就是一些程序內(nèi)部的Metrics信息,還有一些業(yè)務(wù)監(jiān)控指標(biāo),日志流量這種數(shù)據(jù)、這一類的特點(diǎn)我們都可以用發(fā)送到Kafka消息中,然后用Flume或者Flink之類的進(jìn)行落盤(pán)分析。這一類數(shù)據(jù)一般沒(méi)有明確的結(jié)構(gòu),比如啥里頭的JSON啦,需要再加工才能方便使用。
應(yīng)用程序數(shù)據(jù) application data
這一類是指應(yīng)用程序和業(yè)務(wù)處理產(chǎn)生、傳統(tǒng)的數(shù)據(jù)放在數(shù)據(jù)庫(kù)中(dbms)這類數(shù)據(jù)特點(diǎn)是數(shù)據(jù)比較規(guī)范,有明確的結(jié)構(gòu),基本數(shù)據(jù)庫(kù)里面的信息拿過(guò)來(lái)就可以用。
文本數(shù)據(jù) textture data
這一類數(shù)據(jù)就是不會(huì)按照特定的格式存儲(chǔ),像網(wǎng)頁(yè)啦,文檔啦,一些直接的文件格式oss信息之類的,這種一般需要比較麻煩的解析才能使用
ods越煉越香
這類的特點(diǎn)就是真正的原始數(shù)據(jù),里面的信息是最全的,這類數(shù)據(jù)的價(jià)值在于隨著數(shù)據(jù)加工技術(shù)的不斷升級(jí),里面過(guò)去一些信息沒(méi)有加工的在未來(lái)有可能存在新的價(jià)值。大數(shù)據(jù)的歷史并不長(zhǎng),所以記得也必將清楚。大數(shù)據(jù)的加工一直是不斷變化的,大概09-15年左右,那時(shí)候我們倒騰一個(gè)手寫(xiě)的mapreduce jar還是比較興奮的階段,工作中大部分還是處于hive階段,那個(gè)時(shí)候hadoop可以做到比較大量的存儲(chǔ),那段時(shí)間互聯(lián)網(wǎng)也是高速發(fā)展階段,已經(jīng)可以大量采集流量日志了,但是真正的加工也只是計(jì)算pv,uv之類的事情,進(jìn)一步加工的情況不多,再到后面的階段,流量信息里面的地理位置信息,電量,wifi信號(hào)強(qiáng)度,ip地址啥的也會(huì)用來(lái)做風(fēng)控使用。再然后呢,隨著機(jī)器學(xué)習(xí)技術(shù)的不斷引進(jìn),這些數(shù)據(jù)價(jià)值也不斷體現(xiàn)出來(lái),瀏覽頁(yè)面的順序,角度,海拔,還有一些生物信息面部信息指紋也被采集。有人比較好奇,為毛一開(kāi)始不就可以加工么?這個(gè)就是我們的煉油技術(shù)了,一方面我們需要知道怎么使用、一方面有時(shí)效要求、還一方面需要時(shí)效性上有要求才能有效果。大家熟知的各大app推薦技術(shù),一說(shuō)的大家腦袋里面可以蹦出來(lái)很多淘寶、京東、抖音、快手、小紅書(shū),像商品推薦,內(nèi)容推薦這類現(xiàn)在生活依賴的功能想必都很熟悉,因?yàn)榛ヂ?lián)網(wǎng)上面的信息是海量,我們又要快速的推薦,需要技術(shù)上做到實(shí)時(shí),如果我昨天的數(shù)據(jù)你今天推薦出來(lái),效果不好,要實(shí)現(xiàn)這個(gè)事情,需要不斷升級(jí)系統(tǒng)算法,這個(gè)時(shí)候才會(huì)去提出對(duì)這類數(shù)據(jù)的實(shí)時(shí)依賴,這就是前后的原因。
ods數(shù)據(jù)的進(jìn)一步規(guī)范
互聯(lián)網(wǎng)應(yīng)用走入尋常百姓家,有一個(gè)很涉及我們個(gè)人事情,那就是隱私保護(hù),實(shí)際上前面很多年的軟件沒(méi)有太多限制的,安卓早期版本一開(kāi)始就可以拿到你手機(jī)的root權(quán)限,然后上傳你手機(jī)的信息,所以我們?cè)诨ヂ?lián)網(wǎng)上都是裸奔的,這個(gè)背景上,國(guó)家也是對(duì)個(gè)人信息立法,企業(yè)應(yīng)當(dāng)遵循各類通用法。
那這個(gè)對(duì)ODS是有什么影響么?影響就大了,在以前的加工采集數(shù)據(jù)的時(shí)候ods來(lái)說(shuō)沒(méi)太多約束,但是在個(gè)人信息保護(hù)法之后,數(shù)據(jù)的采集,加工都要遵循這類法規(guī),那么具體ods來(lái)說(shuō)則是會(huì)進(jìn)一步被限制采集的范圍,方式方式,簡(jiǎn)單理解來(lái)說(shuō)未來(lái)你想拿ods數(shù)據(jù)的話需要合法,在使用方式上會(huì)有法律主體,加密策略,合約等方式,ods也需要帶上這一類使用范圍的聲明。實(shí)際的例子:ods在采集個(gè)人信息的時(shí)候,需要用戶進(jìn)行授權(quán),如果沒(méi)有實(shí)際的授權(quán)則是非法的,這個(gè)時(shí)候ods的數(shù)據(jù)范圍就只能在約束范圍內(nèi)。可以想到,這個(gè)需要一定隱私技術(shù)實(shí)現(xiàn)的,立法的時(shí)間也還不是很久,所以是進(jìn)一步的規(guī)范,那么在不久的幾年里面我們ods呈現(xiàn)出來(lái)的形態(tài)就會(huì)發(fā)生很大的變化了。
ods的加工特性
不進(jìn)行任何數(shù)據(jù)加工
和其他的數(shù)據(jù)加工不同,ods是強(qiáng)調(diào)盡量保持他原有的樣子,簡(jiǎn)單來(lái)說(shuō),數(shù)據(jù)內(nèi)容不允許加工的,因?yàn)橐坏┘庸ち说脑捑推茐牧俗铋_(kāi)始的樣子,比如說(shuō)一些字段null,有些強(qiáng)迫癥的同學(xué)喜歡轉(zhuǎn)化掉,或者過(guò)濾掉,這種事情是萬(wàn)萬(wàn)不可以的,因?yàn)閛ds內(nèi)容不僅僅可以分析業(yè)務(wù)的指標(biāo),同時(shí)還能表達(dá)出異常情況,比如數(shù)據(jù)上因?yàn)槟承┫到y(tǒng)異常出現(xiàn)了一些Exception的數(shù)據(jù),對(duì)于實(shí)際業(yè)務(wù)分析可能是沒(méi)價(jià)值,但是對(duì)于系統(tǒng)運(yùn)維同學(xué)來(lái)說(shuō)是可以通過(guò)這種數(shù)據(jù)了解到那個(gè)時(shí)候的異常情況的。
盡量保持全部?jī)?nèi)容
這個(gè)是指存在一些例如日志上面某些數(shù)據(jù)看起來(lái)確實(shí)無(wú)用,看著很雞肋就干掉,這個(gè)也是不合理的,還是前面的情況,這類信息可能是有不同的使用場(chǎng)景,也有可能短期內(nèi)還不好加工出來(lái),但是未來(lái)會(huì)用到
需要可以還原歷史
如果是每日增量數(shù)據(jù),則需要保存全部的歷史分區(qū),如果是變化數(shù)據(jù),則需要保留每日快照。實(shí)際情況是有一份增量數(shù)據(jù)和一份全量數(shù)據(jù)。這個(gè)反例就是比如數(shù)據(jù)每日發(fā)生變化,一開(kāi)始業(yè)務(wù)覺(jué)得是可以使用最新的,但是ods如果只是保留最新的話,未來(lái)某一天需要看歷史的時(shí)候沒(méi)辦法去做分析,因?yàn)閛ds不存在,所以下游的dwd更加沒(méi)辦法加工了
不太關(guān)注業(yè)務(wù)內(nèi)容
ODS比較成熟的狀態(tài)是已經(jīng)工具化接入了,所以ods運(yùn)維人員處于ods運(yùn)維的角色,但并不真正負(fù)責(zé)里面的內(nèi)容,當(dāng)然一旦關(guān)心內(nèi)容的話就會(huì)很重,在數(shù)倉(cāng)分層中因?yàn)橐矔?huì)有下游的dwd層,實(shí)際的重?cái)?shù)據(jù)業(yè)務(wù)可以依賴dwd,因?yàn)檫@個(gè)是一個(gè)需要投入很大的工作,同時(shí)和ods需要保持原始樣子,所以不進(jìn)行加工,自然也不關(guān)注業(yè)務(wù)內(nèi)容
保證數(shù)據(jù)完整性
可能大部分的思維上ods的抽取就是凌晨00:00就抽取就是了,這個(gè)在實(shí)際情況不是這樣子的,首先,業(yè)務(wù)上是比較難保證那一天的業(yè)務(wù)真的就在00:00點(diǎn)完成的,尤其是像流量那種,在大促的時(shí)候會(huì)存在延遲的情況,ODS普遍存在的問(wèn)題就是數(shù)據(jù)漂移,數(shù)據(jù)缺失,類似23:58發(fā)生的業(yè)務(wù)實(shí)際要到00:15或者更晚才完成,ods的策略一般是盡量保證數(shù)據(jù)的完整性,可以多出來(lái)數(shù)據(jù),但是不能少。一些常見(jiàn)的措施,例如前后跨15分鐘數(shù)據(jù)抽取,在財(cái)務(wù)數(shù)據(jù)處理的時(shí)候需要配合在線系統(tǒng)做日切檢查的方式,還有就是監(jiān)控?cái)?shù)據(jù)的完整性,其他嚴(yán)格的可以做冪等校驗(yàn)。
ods穩(wěn)定性影響
時(shí)效、穩(wěn)定這個(gè)其實(shí)在任何一個(gè)數(shù)據(jù)開(kāi)發(fā)都有要求,只不過(guò)針對(duì)ods來(lái)說(shuō)是很底盤(pán)的存存在,一旦核心ods延遲,那么整個(gè)公司的資源都會(huì)強(qiáng)制加劇,這個(gè)事情是比較殘酷的,對(duì)ods來(lái)說(shuō)也是不關(guān)注數(shù)據(jù)內(nèi)容,所以可以通用化采用一些優(yōu)化策略,類似分桶,hash之類的操作,需要把時(shí)效最大化
ods一般模型設(shè)計(jì)
一般的ods怎么做模型設(shè)計(jì)呢?簡(jiǎn)單說(shuō)道說(shuō)道~
模型設(shè)計(jì)
ods因?yàn)樗幱谧钌嫌蔚奶攸c(diǎn),所以設(shè)計(jì)上一般面向的是時(shí)效不同的鏈路,常規(guī)來(lái)說(shuō)一般是需要天全量表、天增量表、小時(shí)表,比如說(shuō)訂單表:
ods_pay_order_dd ods_pay_order_delta ods_pay_order_delta_hh鏈路設(shè)計(jì)
數(shù)據(jù)的接入情況很多,系統(tǒng)的數(shù)據(jù)一般是接入從庫(kù),抽取工具也是sqoop,Datax等方式抽取,當(dāng)下比較多的情況一般是監(jiān)聽(tīng)binlog的方式獲取增量數(shù)據(jù),通過(guò)增量還原出當(dāng)天的數(shù)據(jù),如圖所示:
日切檢查
日切本身是賬務(wù)上面的概念,在銀行、財(cái)務(wù)這一類對(duì)數(shù)據(jù)質(zhì)量強(qiáng)要求的場(chǎng)景時(shí),是需要做日切的操作的,但是隨著大數(shù)據(jù)的技術(shù)發(fā)展,業(yè)務(wù)上對(duì)數(shù)據(jù)的準(zhǔn)確性的要求是不斷提高,對(duì)大數(shù)據(jù)場(chǎng)景來(lái)說(shuō)之前常規(guī)的保證數(shù)據(jù)的做法一般是把定時(shí)的時(shí)間往后做調(diào)整,但是這種方式只是減少了數(shù)據(jù)丟失的概率,還是有隱患,現(xiàn)在的數(shù)據(jù)處理是增加檢查節(jié)點(diǎn),這類檢查節(jié)點(diǎn)就是日切。舉例說(shuō)明,概念上來(lái)說(shuō)日終是銀行系統(tǒng)每天下班前,是柜面業(yè)務(wù)的帳務(wù)結(jié)算,終了軋帳。日初是指開(kāi)始上班做的工作前期準(zhǔn)備工作的統(tǒng)稱。
ods掛在在線跑批的鏈路之后再開(kāi)始工作,這類操作就是日切檢查。
后記
ods其實(shí)還涉及到流批一體操作、在離線聯(lián)調(diào)、模板化加工等諸多話題,作為一個(gè)數(shù)倉(cāng)人員來(lái)說(shuō),ods其實(shí)是最最基礎(chǔ)的數(shù)據(jù)依賴,本身的生命周期還是需要有了解的,實(shí)際上ods的穩(wěn)定帶來(lái)的效益是整體業(yè)務(wù)的一個(gè)穩(wěn)態(tài),在數(shù)倉(cāng)鏈路中屬于那種不會(huì)掛在臺(tái)面上卻是至關(guān)重要的角色。
總結(jié)
以上是生活随笔為你收集整理的大数据开发第一站ODS篇的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 《SQL数据分析——从基础破冰到面试题解
- 下一篇: 狗熊会python培训班