1、項目背景
通信運營商每時每刻會產生大量的通信數據,例如通話記錄,短信記錄,彩信記錄,第三方服務資費等等繁多信息。數據量如此巨大,除了要滿足用戶的實時查詢和展示之外,還需要定時定期的對已有數據進行離線的分析處理。例如,當日話單,月度話單,季度話單,年度話單,通話詳情,通話記錄等等+。我們以此爲背景,尋找一個切入點,學習其中的方法論。當前我們的需求是:統計每天、每月以及每年的每個人的通話次數及時長。
2、項目架構
3、項目實現
系統環境:
系統 | 版本 |
---|---|
windows | 10 專業版 |
linux | CentOS 7.6 |
開發工具:
工具 | 版本 |
---|---|
idea | 2019.3旗艦版 |
maven | 3.2.2 |
JDK | 1.8+ |
提示:idea2017.2.5必須使用maven3.3.9,不要使用maven3.5,有部分兼容性問題
集羣環境:
框架 | 版本 |
---|---|
hadoop | 2.7.2 |
zookeeper | 3.4.10 |
hbase | 1.3.1 |
flume | 1.7.0 |
kafka | 2.11-0.11.0.0 |
硬件環境:
Flink105 | Flink105 | Flink105 | |
---|---|---|---|
內存 | 4G | 2G | 2G |
CPU | 2核 | 1核 | 1核 |
硬盤 | 50G | 50G | 50G |
3.1、數據生產
此情此景,對於該模塊的業務,即數據生產過程,一般並不會讓你來進行操作,數據生產是一套完整且嚴密的體系,這樣可以保證數據的魯棒性。但是如果涉及到項目的一體化方案的設計(數據的產生、存儲、分析、展示),則必須清楚每一個環節是如何處理的,包括其中每個環境可能隱藏的問題;數據結構,數據內容可能出現的問題。
3.1.1、 數據結構
我們將在HBase中存儲兩個電話號碼,以及通話建立的時間和通話持續時間,最後再加上一個flag作爲判斷第一個電話號碼是否爲主叫。姓名字段的存儲我們可以放置於另外一張表做關聯查詢,當然也可以插入到當前表中。
列名 | 解釋 | 舉例 |
---|---|---|
call1 | 第一個手機號碼 | 15369468720 |
call1_name | 第一個手機號碼人姓名(非必須) | 李雁 |
call2 | 第二個手機號碼 | 19920860202 |
call2_name | 第二個手機號碼人姓名(非必須) | 衛藝 |
date_time | 建立通話的時間 | 20171017081520 |
date_time_ts | 建立通話的時間(時間戳形式) | |
duration | 通話持續時間(秒) | 0600 |
4、技術棧流程圖
(1)電信項目技術框架
(2)數據分析流程
(3) 數據展示流程
(4) 消費模型