Apache Kylin 入門系列目錄算法
簡單來講,Kylin 的核心思想是預計算(利用空間換時間),即對多維分析可能用到的度量進行預計算,將計算好的結果保存成 Cube 並存在 HBase 中,供查詢時直接訪問。編程
把高複雜度的聚合運算、多表鏈接等操做轉換成對預計算結果的查詢,這決定了 Kylin 可以擁有很好的快速查詢和高併發能力,具體工做過程以下:json
Apache Kylin 系統能夠分爲在線查詢和離線構建兩部分,技術架構如圖所示,在線查詢的模塊主要處於上半區,而離線構建則處於下半區。緩存
離線構建的主要步驟:架構
可擴展指 Kylin 能夠對其主要依賴的三個模塊作任意的擴展和替換,Kylin 的三大依賴模塊分別是數據源(Hive)、構建引擎(MR)和存儲引擎(HBase)。併發
可擴展架構帶來了額外的靈活性,好比,它能夠容許多個引擎同時並存。例如 Kylin 能夠同時對接 Hive、Kafka 和其餘第三方數據源;抑或用戶能夠爲不一樣的 Cube 指定不一樣的構建引擎或存儲引擎,以期達到最極致的性能和功能定製。app
這個四維 Cube 須要五輪的 MapReduce 來完成:第一輪 MR 的輸入是源數據,這一步會對維度列的值進行編碼,並計算 ABCD 組合的結果。接下來的 MR 以上一輪的輸出結果爲輸入,向上聚合計算三個維度的組合:ABC、BCD、ABD和ACD;依此類推,直到算出全部的維度組合。框架
Layered Cubing 的特色:高併發
最大化利用 Mapper 端的 CPU 和內存,對分配的數據塊,將須要的組合全都作計算後再輸出給 Reducer;由 Reducer 再作一次合併(Merge),從而計算出完整數據的全部組合。如此,通過一輪 MapReduce 就完成了之前須要 N 輪的 Cube 計算。oop
Fast Cubing 的特色:最大限度地把計算髮生在 Mapper 這一端,一方面減小 shuffle 的數據量,另外一方面減小 Reducer 端的計算量。
第一步會計算 Base Cuboid(全部維度都有的組合),再基於它計算減小一個維度的組合。基於 parent 節點計算 child 節點,能夠重用以前的計算結果;當計算 child 節點時,須要 parent 節點的值儘量留在內存中;若是 child 節點還有 child,那麼遞歸向下,因此它是一個深度優先遍歷。當有一個節點沒有 child,或者它的全部 child 都已經計算完,這時候它就能夠被輸出,佔用的內存就能夠釋放。
Any Code,Code Any!
掃碼關注『AnyCode』,編程路上,一塊兒前行。