面試官:談?wù)劥髷?shù)據(jù)采集和常見問題
大家好,我是一哥,今天給大家講解一下大數(shù)據(jù)面試中對于數(shù)據(jù)采集部分的一些問題。
01什么是數(shù)據(jù)采集
數(shù)據(jù)采集是大數(shù)據(jù)的基石,不論是現(xiàn)在的互聯(lián)網(wǎng)公司,物聯(lián)網(wǎng)公司或者傳統(tǒng)的IT公司,每個業(yè)務(wù)流程環(huán)節(jié)都會產(chǎn)生大量的數(shù)據(jù),同時用戶操作的日志也會產(chǎn)生大量的數(shù)據(jù),為了將這些結(jié)構(gòu)化和非結(jié)構(gòu)化的數(shù)據(jù)進(jìn)行采集,我們必須要有一套完整的數(shù)據(jù)采集方案流程,為后續(xù)的數(shù)據(jù)分析應(yīng)用提供數(shù)據(jù)基礎(chǔ)。
根據(jù)不同業(yè)務(wù)場景,對于數(shù)據(jù)采集的時效性要求也是不一樣的,一般分為離線數(shù)據(jù)采集和實時數(shù)據(jù)采集。
02離線數(shù)據(jù)采集
離線數(shù)據(jù)采集主要包括從數(shù)據(jù)庫中采集,如MySQL、Oracle、MongoDB等;從離線文件采集,如外部系統(tǒng)數(shù)據(jù)。每天凌晨會抽取前一天的數(shù)據(jù)(T+1),對于維度數(shù)據(jù)一般采用每次全量采集,對于業(yè)務(wù)數(shù)據(jù),為了提高采集效率,同時也為了保住業(yè)務(wù)數(shù)據(jù)庫的穩(wěn)定性,采用每天增量采集,然后將T+1的數(shù)據(jù)合并成新的全量數(shù)據(jù)。
對于關(guān)系型數(shù)據(jù)庫,如MySQL,一般是有主從數(shù)據(jù)庫的,為了保住穩(wěn)定和不影響主庫的查詢性能,我們一般抽取從庫數(shù)據(jù)。對于文件數(shù)據(jù)抽取前需要先檢測文件是否存在,源系統(tǒng)提供文件的時候需要提供對應(yīng)的校驗文件,校驗文件里一般包含文件的記錄數(shù)、字段格式等信息。采集到文件后需要對文件進(jìn)行校驗,文件完整的情況下才能繼續(xù)后續(xù)數(shù)據(jù)處理程序。
03實時數(shù)據(jù)采集
實時數(shù)據(jù)采集主要是一些頁面日志的采集,也就是我們常說的用戶行為分析數(shù)據(jù)。日志采集一般有以下幾個步驟:數(shù)據(jù)埋點,數(shù)據(jù)上報,數(shù)據(jù)存儲。
- 數(shù)據(jù)埋點:網(wǎng)站上線后一般會植入一段JS腳本,用戶訪問頁面時,JS會收集當(dāng)前頁面的一些信息,用戶問的上下文信息以及當(dāng)前訪問的頁面業(yè)務(wù)相關(guān)數(shù)據(jù)。
- 數(shù)據(jù)上報:JS執(zhí)行完畢后,會將所有收集到的信息拼裝到一個請求內(nèi),通過日志請求將數(shù)據(jù)發(fā)送到日志服務(wù)器,存儲為JSON文件;一般情況下,在 JS 執(zhí)行完成后就會立即向日志服務(wù)器發(fā)送消息隊列中。
- 數(shù)據(jù)存儲:存儲在磁盤上的文件會部署數(shù)據(jù)采集組件比如Flume,將采集到的日志數(shù)據(jù)發(fā)送到HDFS進(jìn)行存儲或者轉(zhuǎn)存到HBase進(jìn)行存儲。消息隊列的數(shù)據(jù)則可以直接消費落地到HDFS或者HBase進(jìn)行存儲。
04數(shù)據(jù)采集的問題
是不是所有的日志數(shù)據(jù)都實時采集?
用戶的每個操作都會產(chǎn)生一個操作日志,但并不是每生成一條日志就實時上報至服務(wù)器,而是在產(chǎn)生日志后,先暫存在客戶端本地,再結(jié)合著相應(yīng)的上報控制策略進(jìn)行數(shù)據(jù)上報。其中上報策略主要指根據(jù)日志的業(yè)務(wù)特性,數(shù)據(jù)的時效性,用戶的網(wǎng)絡(luò)特性等等信息設(shè)定不同的上報策略,有些日志會因為其數(shù)據(jù)時效性的要求進(jìn)行實時數(shù)據(jù)上報,而有些日志則會在用戶啟動應(yīng)用,或者間隔一段時間后將日志上報上來。
總是找不到想要的埋點數(shù)據(jù)?
在實際業(yè)務(wù)數(shù)據(jù)采集中會發(fā)現(xiàn)每個模塊的業(yè)務(wù)數(shù)據(jù)格式都是不一樣的。因此就需要設(shè)計一種日志數(shù)據(jù)采集標(biāo)準(zhǔn),可以針對特定的業(yè)務(wù)場景,制定通用的數(shù)據(jù)采集標(biāo)識,研發(fā)人員在進(jìn)行頁面埋點時,依據(jù)標(biāo)準(zhǔn)的數(shù)據(jù)采集標(biāo)識規(guī)則進(jìn)行埋點,從而收集業(yè)務(wù)的詳細(xì)信息。這個標(biāo)準(zhǔn)需要產(chǎn)品經(jīng)理、前端開發(fā)人員、數(shù)據(jù)開發(fā)人員、數(shù)據(jù)分析人員、數(shù)據(jù)運營人員等多方達(dá)成一致,確保后面產(chǎn)品展現(xiàn)、埋點開發(fā)、模型開發(fā)、數(shù)據(jù)分析和運營能夠正常開發(fā)、解析、統(tǒng)計分析數(shù)據(jù)。
如何對多個業(yè)務(wù)生成唯一標(biāo)識?
在數(shù)據(jù)埋點中如何唯一確定用戶的身份一件很重要的工作,因為如果做不到用戶的唯一標(biāo)識,那么后續(xù)很多數(shù)據(jù)模型是無法構(gòu)建的。所以在設(shè)計埋點標(biāo)準(zhǔn)時,一般會包含用的設(shè)備ID和用戶ID,關(guān)于設(shè)備ID安卓和IOS的方法也不一樣,大家可以搜索相關(guān)資料(https://zhuanlan.zhihu.com/p/152051748);用戶ID,也就是我們常說的注冊賬號。
05數(shù)據(jù)采集用到的大數(shù)據(jù)技術(shù)
在數(shù)據(jù)采集中用到了哪些大數(shù)據(jù)技術(shù)呢?可以看到數(shù)據(jù)采集組件,消息中間件,數(shù)據(jù)存儲組件等,后續(xù)我們來一一講解每個技術(shù)。
本文轉(zhuǎn)載自微信公眾號「數(shù)據(jù)社」,可以通過以下二維碼關(guān)注。轉(zhuǎn)載本文請聯(lián)系數(shù)據(jù)社公眾號。