SparkES 多維分析引擎設計

2021-09-23 17:56:01 字數 1770 閱讀 5593

elasticsearch 毫秒級的查詢響應時間還是很驚豔的。其優點有:

優秀的全文檢索能力

高效的列式儲存與查詢能力

資料分布式儲存(shard 分片)

其列式儲存可以有效的支援高效的聚合類查詢,譬如groupby等操作,分布式儲存則提公升了處理的資料規模。

相應的也存在一些缺點:

缺乏優秀的sql支援

缺乏水平擴充套件的reduce(merge)能力,現階段的實現侷限在單機

json格式的查詢語言,缺乏程式設計能力,難以實現非常複雜的資料加工,自定義函式(類似hive的udf等)

spark 作為乙個計算引擎,可以克服es存在的這些缺點:

良好的sql支援

強大的計算引擎,可以進行分布式reduce

支援自定義程式設計(採用原生api或者編寫udf等函式對sql做增強)

所以在構建即席多維查詢系統時,spark 可以和es取得良好的互補效果。通過es的列式儲存特性,我們可以非常快的過濾出資料,並且支援全文檢索,之後這些過濾後的資料從各個shard 進入spark,spark分布式的進行reduce/merge操作,並且做一些更高層的工作,最後輸出給使用者。

通常而言,結構化的資料結構可以有效提公升資料的查詢速度,但是會對資料的構建產生一定的吞吐影響。es強大的query能力取決於資料結構化的儲存(索引檔案),為了解決這個問題,我們可以通過spark streaming有效的對接各個資料來源(kafka/檔案系統)等,將資料規範化後批量匯入到es的各個shard。spark streaming 基於以下兩點可以實現為es快速匯入資料。

spark rdd 的partition 能夠良好的契合es的shard的概念。能夠實現一一對應。避免經過es的二次分發

spark streaming 批處理的模式 和 lucene(es的底層儲存引擎)的segment對應的非常好。一次批處理意味著新生成乙個檔案,我們可以有效的控制生成檔案的大小,頻度等。

下面是架構設計圖:

spark-es-4.png

整個系統大概分成四個部分。分別是:

api層

spark 計算引擎層

es 儲存層

es 索引構建層

api 層主要是做多查詢協議的支援,比如可以支援sql,json等形態的查詢語句。並且可是做一些啟發式查詢優化。從而決定將查詢請求是直接**給後端的es來完成,還是走spark 計算引擎。也就是上圖提到的 query optimize,根據條件決定是否需要短路掉 spark compute。

前面我們提到了es的三個缺陷,而spark 可以有效的解決這個問題。對於乙個普通的sql語句,我們可以把 where 條件的語句,部分group 等相關的語句下沉到es引擎進行執行,之後可能彙總了較多的資料,然後放到spark中進行合併和加工,最後**給使用者。相對應的,spark 的初始的rdd 類似和kafka的對接,每個kafka 的partition對應rdd的乙個partiton,每個es的shard 也對應rdd的乙個partition。

es的shard 數量在索引構建時就需要確定,確定後無法進行更改。這樣單個索引裡的shard 會越來越大從而影響單shard的查詢速度。但因為上層有了 spark compute層,所以我們可以通過新增index的方式來擴大shard的數目,然後查詢時查詢所有分片資料,由spark完成資料的合併工作。

資料的結構化必然帶來了構建的困難。所以有了spark streaming層作為資料的構建層。這裡你有兩種選擇:

通過es原生的bulk api 完成索引的構建

然spark 直接對接到 es的每個shard,直接針對該shard 進行索引,可有效替身索引的吞吐量。

多維分析的後台效能優化手段

多維分析就是針對乙個事先準備好的資料立方體實施旋轉 切片 切塊 鑽取等互動操作的過程,經常也被直接稱為olap。它的後台運算在結構上很簡單,如果用sql語法描述,大體形式為 select d,sum m from c where d d and group by d,即對立方體按某些維度分組彙總某些...

多維分析模型頻繁變動的解決方案有哪些?

大寬表是之前常用的解決方案之一。寬表是指把業務主題相關的指標 維度 屬性關聯在一起的一張資料庫表,這樣使用者的需求都在乙個表中了,也就不需要跟著需求做變更了。這種方式的優點在於 結構簡單 模型容易理解。但是缺點也很明顯 1 有資料和表結構變動時需要重算寬表,成本較高 2 冗餘較多 3 效能無法保證 ...

多維分析模型頻繁變動的解決方案有哪些?

大寬表是之前常用的解決方案之一。寬表是指把業務主題相關的指標 維度 屬性關聯在一起的一張資料庫表,這樣使用者的需求都在乙個表中了,也就不需要跟著需求做變更了。這種方式的優點在於 結構簡單 模型容易理解。但是缺點也很明顯 1 有資料和表結構變動時需要重算寬表,成本較高 2 冗餘較多 3 效能無法保證 ...