付力力: 基于 ImpalaS 构建实时用户行为分析引擎
本文來自神策數據聯合創(chuàng)始人&首席架構師付力力在 QCon 北京 2017 年全球軟件開發(fā)者大會上的精彩分享,主題是“基于 ImpalaS 構建實時用戶行為分析引擎”。
付力力:大家好,今天的主題是“基于 ImpalaS 構建實時用戶行為分析引擎”。
我今天的分享共有四部分,第一,簡單介紹一下什么是用戶行為分析。第二,講解用戶行為分析需求,涉及的整體的架構以及這個架構下的整體數據模型。第三,講解架構關鍵點——如何實現實時導入。第四,講一些針對具體場景的查詢性能優(yōu)化點。
什么是用戶行為分析
用戶行為五大要素:4W1H
用戶行為是非常普遍常見的定義,無非是誰在什么時候干了什么事情。有很多很多的例子,無論是線上 APP 的操作、網頁瀏覽或者是線下購物,都包含了幾個要素。首先有參與者,誰是這個中心的主體,這是必須包含的;其次發(fā)生的時間、地點、行為的方式、具體做了什么事情,都會構成用戶行為的幾大要素。
所以用戶行為是非常普遍的容易做抽象處理的數據,生產活動會涉及到大量行為數據,這個數據可以被收集并產生很大的價值。從技術的角度講,它是一種特化的日志數據。
其實大家在不知不覺中已經用到了用戶行為數據,可能是做用戶分析,產生一些 BI 報表,或者統(tǒng)計 PV、UV。其次是 PM 做產品改進,比如觀察產品的用戶黏性,或者新功能點給用戶帶來的影響、核心的交易流程或者注冊流程的轉化率符不符合預期,這些都與用戶行為直接相關,用戶行為分析也可以支持商務、市場、銷售部門進行業(yè)務決策。
?
用戶行為需求:靈活性>及時性>時效性
首先主要總結一下應用的需求特點:
時間軸、大量維度、維度取值分散;
分析靈活性要求高,查詢模式變化多;
要求實時響應;
查詢頻率較低;
靈活性> 及時性 > 時效性。
需求特點非常顯著,首先,行為數據有一個最大的特點是時間軸:隨著時間不斷累計。且維度非常多,因為業(yè)務的范圍千差萬別。另一個特點是靈活性要求非常高,因為什么業(yè)務都可以基于用戶行為分析來做。另外是行為分析要求及時性。與傳統(tǒng)的 BI 報表相比,最大的區(qū)別在于用戶行為分析需要反復迭代和嘗試。最后,行為分析查詢頻率比較低,不需要它支撐頻率較高的業(yè)務。
在整體設計目標上,系統(tǒng)的靈活性必須是第一位,其次是及時性,就是能夠實時響應分析的需求,讓分析人員能夠快速迭代,最后是時效性。
如何搭建整體架構及數據模型簡介
如何選擇合適的查詢引擎
現在有非常多的查詢引擎,大家支持的特性和業(yè)務場景都差萬別,我們在選擇查詢引擎的時候,需要有兩個特點,一方面是足夠靈活。能夠比較完善地支持標準的SQL。另一方面是要足夠快。查詢引擎只是支持SQL很簡單,無非就是速度慢,但有一個很大的問題,不夠快的查詢引擎,不能實現交互查詢,不能滿足快速分析迭代的需求。
詳細解析 ImpalaS 架構
我們選擇 ImpalaS,因為今天的整個架構優(yōu)化是圍繞 Impala?來講的,所以簡單講一下 Impala?本身有什么特點:
大部分功能特性和 Hive 類似;
基于MPP 的查詢引擎;
較低的容錯性;
較高的內存需求;
較高的查詢效率。
首先,Impala?出現的時間不短,功能特性上和 Hive 比較像,但是它是基于 MPP 的查詢引擎,這是和 Hive 比較大的區(qū)別。Hive 的查詢執(zhí)行層完全基于如 MapReduce、Spark 的底層的執(zhí)行引擎,本身并不包含執(zhí)行層的東西,但是 Impala?是一個含有自己的 MPP 執(zhí)行層的查詢引擎,這是它能實現較快查詢的本質原因。第三,容錯性較差,Impala?不像MR或 SPARK,故障之后會有自動重試機制。第四,內存需求比較高,絕大部分中間的數據操作都會在內存中完成。第五,查詢效率比較高,這是選擇它的最大原因。
很多客戶會問我們,為什么他們用 Impala?這么慢,這里有很重要的一點,Impala?官方推薦的是與數據節(jié)點要同機混部,實際上很多企業(yè)沒有做到這點。基于 Impala?可以推導出一個非常簡單的系統(tǒng)架構,最前端的頭像表示用戶使用交互界面,之后把前端用戶查詢的需求轉化成 SQL 發(fā)給 Impala,左側是數據采集,會實時寫入用戶行為表,右側是查詢緩存。
有兩個表非常重要:用戶行為表和用戶表。神策的架構非常簡化,因為數據模型簡單。我們的數據源多種多樣,例如客戶端操作、服務端日志、訂單數據、注冊數據、業(yè)務數據、商品的信息、書或漫畫的信息,客戶通過 SDK 和導入工具可以導入這些數據,最終構建了用戶行為表和用戶表。概念雖然簡單,但是卻是架構的核心。首先,簡單的模型有助于大大減少 ETL 計算成本和管理數據的成本。其次,在業(yè)務上兩張表的邏輯便于業(yè)務員了解,這點很重要,因為最終的設計還是為業(yè)務服務的。
用戶行為表就是每一條數據代表一個用戶的行為,簡單抽象,整個表非常寬,設計物理存儲的時候需要考慮這個因素。
用戶表相對簡單一些,記錄了用戶當前的狀態(tài),可更新。
在物理存儲上,神策用 HDFS 存儲數據。目錄結構按日期做分區(qū),每個分區(qū)存 N 個文件,每個文件是 Parquet 的文件。結構雖然簡單,但是做分區(qū)和文件切割時,保持合理大小,Parquet 的掃描性能才能達到預期效果。以及,我們還會在存儲時做一些局部排序。
用 Parquet 格式,是非常主流的做法,但是因為 Parquet 是一個支持批量寫入、無法追加的文件格式,所以無法實現實時的數據流。
Kudu 優(yōu)化查詢視圖
Kudu 作為新一代面向實時分析的存儲引擎:
底層使用類似 Parquet 的存儲結構;
支持實時寫入、實時更新及隨機查詢;
掃描性能比 Parquet 略差。
在引入 Kudu 后,架構發(fā)生了變化,中間虛線框是用戶行為表下的一個 HDFS 文件,上面是 Parquet 文件,實時寫入 Kudu 后,有一個第三方模塊定時把 Kudu 的數據轉化成 Parquet 的數據,存儲在 HDFS 上。頂層形式是兩張物理的表,一張在 Kudu 一張在 Parquet,在上層構建一個查詢試圖,這個查詢視圖有兩個優(yōu)點,1. Kudu 實時的特性,能夠達到秒級的實時寫入,并發(fā)寫入量非常可觀,很容易達到 3-5 萬的寫入量;2. 保留了 Parquet 高速掃描的能力。
雖然底層是兩張表,但是從上層應用或者系統(tǒng)其他模塊看,頂層是一張表。這就是剛才講的,使用 UNION ALL,能夠讓數據拷貝零損耗,達到查詢上層和底層的視圖完全等效。
?
查詢性能優(yōu)化 Tips
基本查詢優(yōu)化
這個架構為什么能夠滿足行為分析的查詢需求,很重要的是查詢優(yōu)化。
首先要有合理的硬件。我們給客戶做系統(tǒng)部署時,都會按照我們的要求做嚴格的基準測試。CPU 以 16 核為主,正常 IO 的磁盤,不要用性能很差的磁盤或虛擬磁盤,至少要千兆網絡,內存要 64G,不要用十臺 8G 的的機器充當一臺 64G 的機器。
其次,就是寫好 SQL。很多查詢系統(tǒng)慢的重要原因是 SQL 寫的不好。 Impala 有一個缺陷,資源隔離做的不是特別好,寫的很爛的 SQL 會導致整個系統(tǒng)資源完全被占滿,無法進行其他工作。
我們用三個標準節(jié)點做了一些基準測試,在不做任何其它優(yōu)化的情況下,基本 10 秒內可以完成 10 億內行為數據的分組聚合。大家如果沒有達到這個效果,可能需要反思一下是不是硬件配置有問題,或者是 Parquet 文件大小不合適等前面提過的原因。
后面是一些特定場景下的優(yōu)化點供大家參考,不一定每人都能用到。
查詢抽樣
為什么要做抽樣:節(jié)約成本、提高效率。
查詢抽樣 vs 采集抽樣:
(1)存儲便宜,應該盡量存儲最全的數據。
(2)抽樣分析的局限性,例如細分維度的分析。
有一些業(yè)務點只有少數用戶能觸發(fā),采集抽樣可能會達不到抽樣的結果,偏差很大。
查詢抽樣的抽樣邏輯:首先按照用戶抽樣,不能隨機抽樣,必須保證用戶行為的完整性,
抽樣實現有非常多的方式。
根據用戶 ID 的 Hash 值得到抽樣編號。
Parquet / Kudu 數據按照抽樣編號排序。
Impala 進行查詢掃描時根據需要只掃描需要部分的數據。
實現轉化漏斗
漏斗是非常常見的產品應用,可以分析產品各個流程的轉化。神策分析可以實現任意定義轉化邏輯,任意選擇查詢時段,得到每個用戶精確的轉化信息。
計算邏輯
從用戶行為表抽取需要的事件數據。
事件數據按照用戶 ID 分組,每個分組內按照時間排序,得到用戶序列。
進行具體的轉化邏輯計算。
實現方式
實現自定義的分析函數(UDAnF),需要對 Impala 進行改造
優(yōu)化最耗時的步驟:全局排序 -> 預排序 + 歸并排序
Join 優(yōu)化
優(yōu)化邏輯
使用每天的活躍用戶數據構建 Bloom Filter;
Join 之前先用 Bloom Filter 對用戶表進行過濾;
優(yōu)化效果:Join 右表的數據量從數億降到數千萬。
總結
綜上所述,架構的數據模型非常簡化,用戶表加用戶行為表,這是大前提,基于這個數據模型選擇支持 SQL 的通用查詢引擎:ImpalaS 和 Kudu,針對應用場景進行針對性的性能優(yōu)化,最后完成實時用戶引擎的構建。
?
?
?
?
總結
以上是生活随笔為你收集整理的付力力: 基于 ImpalaS 构建实时用户行为分析引擎的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 数据分析师可不是啥好工作
- 下一篇: 红杉中国合伙人刘星:新零售新在哪里?