1. 程式人生 > >SparkStreaming 實時計算 廣告點選流量實時統計 需求 技術方案資料庫設計

SparkStreaming 實時計算 廣告點選流量實時統計 需求 技術方案資料庫設計

幾大模組內容

  1. 使用者訪問session分析模組:會話(session),使用者的基礎訪問行為
  2. 頁面單跳轉化率模組:頁面(page),使用者的頁面訪問和頁面跳轉行為
  3. 各區域熱門商品統計模組:商品(product),使用者的商品點選行為
  4. 廣告點選流量實時統計模組:廣告(ad,advertisement),使用者的廣告點選行為

廣告點選流量實時統計模組

每次點選一個廣告以後,通常來說,網站 / app中都會有埋點(前端的應用中,比如JavaScript Ajax;app中的socket網路請求,往後臺傳送一條日誌資料);日誌資料而言,通常,如果要做實時統計的話,那麼就會通過某些方式將資料寫入到分散式訊息佇列中(Kafka);
日誌寫入到後臺web伺服器(nginx),nginx產生的實時的不斷增加 / 更新的本地日誌檔案,就會被日誌監控客戶端(比如flume agent),寫入到訊息佇列中(kafka),我們要負責編寫實時計算程式,去從訊息佇列中(kafka)去實時地拉取資料,然後對資料進行實時的計算和統計。
產品經理、高管可以實時地掌握到公司打的各種廣告的投放效果。以便於後期持續地對公司的廣告投放相關的戰略和策略,進行調整和優化;以期望獲得最好的廣告收益。

1、所做需求

  1. 實現實時動態黑名單機制:將每天廣告點選超過100次的使用者拉黑
  2. 基於黑名單的非法廣告流量過濾機制
  3. 每天各省各城市各廣告點選流量實時統計
  4. 統計每天各省top3實時熱門廣告
  5. 統計各廣告最近1小時內的點選量趨勢:各廣告最近1小時內各分鐘的點選量
  6. 使用高效能方式將實時統計結果寫入mysql
  7. 實現實時計算程式的HA高可用性(Spark Streaming HA方案)
  8. 實現實時計算程式的效能調優(Spark Streaming Performence Tuning方案)

2、技術實現

1、實時計算各batch中的每天各使用者對各廣告的點選次數

2、使用高效能方式將每天各使用者對各廣告的點選次數寫入MySQL中(更新)

3、使用filter過濾出每天對某個廣告點選超過100次的黑名單使用者,並寫入MySQL中

4、使用transform操作,對每個batch RDD進行處理,都動態載入MySQL中的黑名單生成RDD,然後進行join後,過濾掉batch RDD中的黑名單使用者的廣告點選行為

5、使用updateStateByKey操作,實時計算每天各省各城市各廣告的點選量,到時候更新到MySQL

6、使用transform結合Spark SQL,統計每天各省份top3熱門廣告:首先以每天各省各城市各廣告的點選量資料作為基礎,首先統計出每天各省份各廣告的點選量;然後啟動一個非同步子執行緒,使用Spark SQL動態將資料RDD轉換為DataFrame後,註冊為臨時表;最後使用Spark SQL開窗函式,統計出各省份top3熱門的廣告,並更新到MySQL中

7、使用window操作,對最近1小時滑動視窗內的資料,計算出各廣告各分鐘的點選量,並更新到MySQL中

8、實現實時計算程式的HA高可用性

9、對實時計算程式進行效能調優

3、資料格式分析 以及資料庫設計

1、資料格式

timestamp	1450702800
province 	Jiangsu	
city 	Nanjing
userid 	100001
adid 	100001

2、資料設計
①ad_user_click_count

CREATE TABLE `ad_user_click_count` (
  `date` varchar(30) DEFAULT NULL,
  `user_id` int(11) DEFAULT NULL,
  `ad_id` int(11) DEFAULT NULL,
  `click_count` int(11) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8


②ad_blacklist

CREATE TABLE `ad_blacklist` (
  `user_id` int(11) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8

③ad_stat

CREATE TABLE `ad_stat` (
  `date` varchar(30) DEFAULT NULL,
  `province` varchar(100) DEFAULT NULL,
  `city` varchar(100) DEFAULT NULL,
  `ad_id` int(11) DEFAULT NULL,
  `click_count` int(11) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8

④ad_province_top3

CREATE TABLE `ad_province_top3` (
  `date` varchar(30) DEFAULT NULL,
  `province` varchar(100) DEFAULT NULL,
  `ad_id` int(11) DEFAULT NULL,
  `click_count` int(11) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8


⑤ad_click_trend

CREATE TABLE `ad_click_trend` (
  `date` varchar(30) DEFAULT NULL,
  `hour` varchar(30) DEFAULT NULL,
  `minute` varchar(30) DEFAULT NULL,
  `ad_id` int(11) DEFAULT NULL,
  `click_count` int(11) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;