天天看點

Apache Kylin權威指南1.4 Apache Kylin的技術架構

<b>1.4 apache kylin的技術架構</b>

<b></b>

apache kylin系統可以分為線上查詢和離線建構兩部分,技術架構如圖1-4所示,線上查詢的子產品主要處于上半區,而離線建構則處于下半區。

圖1-4 kylin的技術架構

我們首先來看看離線建構的部分。從圖1-4可以看出,資料源在左側,目前主要是hadoop hive,儲存着待分析的使用者資料。根據中繼資料的定義,下方建構引擎從資料源抽取資料,并建構cube。資料以關系表的形式輸入,且必須符合星形模型(star schema)(更複雜的雪花模型在成文時還不被支援,可以用視圖将雪花模型轉化為星形模型,再使用kylin)。mapreduce是目前主要的建構技術。建構後的cube儲存在右側的存儲引擎中,一般選用hbase作為存儲。

完成了離線建構之後,使用者可以從上方查詢系統發送sql進行查詢分析。kylin提供了各種rest api、jdbc/odbc接口。無論從哪個接口進入,sql最終都會來到rest服務層,再轉交給查詢引擎進行處理。這裡需要注意的是,sql語句是基于資料源的關系模型書寫的,而不是cube。kylin在設計時刻意對查詢使用者屏蔽了cube的概念,分析師隻需要了解簡單的關系模型就可以使用kylin,沒有額外的學習門檻,傳統的sql應用也很容易遷移。查詢引擎解析sql,生成基于關系表的邏輯執行計劃,然後将其轉譯為基于cube的實體執行計劃,最後查詢預計算生成的cube并産生結果。整個過程不會通路原始資料源。

對于查詢引擎下方的路由選擇,在最初設計時曾考慮過将kylin不能執行的查詢引導去hive中繼續執行,但在實踐後發現hive與kylin的速度差異過大,導緻使用者無法對查詢的速度有一緻的期望,很可能大多數查詢幾秒内就傳回結果了,而有些查詢則要等幾分鐘到幾十分鐘,是以體驗非常糟糕。最後這個路由功能在發行版中預設關閉,是以在圖1-4中是用虛線表示的。

apache kylin 1.5版本引入了“可擴充架構”的概念。在圖1-4中顯示為三個粗虛線框表示的抽象層。可擴充指kylin可以對其主要依賴的三個子產品做任意的擴充和替換。kylin的三大依賴子產品分别是資料源、建構引擎和存儲引擎。在設計之初,作為hadoop家族的一員,這三者分别是hive、mapreduce和hbase。但随着推廣和使用的深入,漸漸有使用者發現它們均存在不足之處。比如,實時分析可能會希望從kafka導入資料而不是從hive;而spark的迅速崛起,又使我們不得不考慮将mapreduce替換為spark,以期大幅提高cube的建構速度;至于hbase,它的讀性能可能還不如cassandra或kudu等。可見,是否可以将一種技術替換為另一種技術已成為一個常見的問題。于是我們對kylin 1.5版本的系統架構進行了重構,将資料源、建構引擎、存儲引擎三大依賴抽象為接口,而hive、mapreduce、hbase隻是預設實作。深度使用者可以根據自己的需要做二次開發,将其中的一個或多個替換為更适合的技術。

這也為kylin技術的與時俱進埋下了伏筆。如果有一天更先進的分布式計算技術取代了mapreduce,或者更高效的存儲系統全面超越了hbase,kylin可以用較小的代價将一個子系統替換掉,進而保證kylin能夠緊跟技術發展的最新潮流,進而保持最高的技術水準。

可擴充架構也帶來了額外的靈活性,比如,它可以允許多個引擎同時并存。例如kylin可以同時對接hive、kafka和其他第三方資料源;抑或使用者可以為不同的cube指定不同的建構引擎或存儲引擎,以期達到最極緻的性能和功能定制。