由eBay開源的一個大數據OLAP框架,2014年11月加入了Apache,項目名字也改成了“Apache Kylin”,Apache Kylin是唯一來自中國的Apache頂級開源項目,定位於在Hadoop平台之上實現傳統數據倉庫,商業智能的能力,提供交互式的,多維分析能力,並提供在傳統數據倉庫技術所不能做到的超大規模數據集的快速查詢,並使用普通的PC硬件,而無需采購專用的,私有的一體機或者高端存儲等
kylin是一個MOLAP系統,通過預計算的方式緩存了所有 需要查詢的的數據結果,需要大量的存儲空間(原數據量的10+倍)。一般我們要分析的數據可能存儲在關系數據庫、HDFS上數據、文本文件、excel 等。kylin主要是對hive中的數據進行預計算,利用hadoop的mapreduce框架實現
當前已經有超過100多家國內國外的公司正式使用Kylin作為其大數據分析平台的核心。包括eBay、Glispa、微軟、Expedia、百度、美團、網易、京東、唯品會、中國移動、中國電信、國泰君安、華泰證券、聯想、〇PP〇、魅族、去哪兒等等。Apache Kylin被用到了諸多如數據倉庫,用戶行為分析,流量(日志)分析,自助分析平台,電商分析,廣告效果分析,實時分析,數據服務平台等各種場景
目錄
- 系統架構
- 組件介紹
- 部署結構 (參考:https://www.sdk.cn/news/3566)
- KMS架構
- 新資訊
系統架構
- kylin的出現就是為了解決大數據系統中TB級別數據的數據分析需求,系統架構如下:
- 上圖黑線勾勒出Cube Build Engine是如何以離線處理方式將關系型數據轉化成鍵-值型數據,黃線部分表現出在線分析數據的處理流程。
- 數據請求可以利用基於SQL的工具由SQL提交而產生,或者利用第三方應用程序通過Kylin的RESTful服務來實現。
- RESTful服務會調用Query Engine,后者則檢測對應的目標數據集是否真實存在。如果確實存在,該引擎會直接訪問目標數據並以次秒級延遲返回結果。
- 如果目標數據集並不存在,該引擎則會根據設計將無匹配數據集的查詢路由至Hadoop上的SQL處、即交由Hive等Hadoop集群負責處理
組件介紹
- 核心組件:Kylin的OLAP引擎框架包括元數據引擎、查詢引擎、作業引擎、存儲引擎以及用來處理客戶端請求的REST服務器
- 元數據管理工具(Metadata Manager): Kylin是一款元數據驅動型應用程序。元數據管理工具是一大關鍵性組件,用於對保存在Kylin當中的所有元數據進行管理,其中包括最為重要的cube元數據。其它全部組件的正常運作都需以元數據管理工具為基礎,包括cube的定義,星狀模型的定義、job的信息、job的輸出信息、維度的directory信 息等等,元數據和cube都存儲在hbase中,存儲的格式是json字符串,除此之外,還可以選擇將元數據存儲在本地文件系統
- 任務引擎(Job Engine): 這套引擎的設計目的在於處理所有離線任務,其中包括shell腳本、Java API以及Map Reduce任務等等。任務引擎對Kylin當中的全部任務加以管理與協調,從而確保每一項任務都能得到切實執行並解決其間出現的故障
- 存儲引擎(Storage Engine): 這套引擎負責管理底層存儲——特別是cuboid,其以鍵-值對的形式進行保存。存儲引擎使用的是HBase——這是目前Hadoop生態系統當中最理想的鍵-值系統使用方案。Kylin還能夠通過擴展實現對其它鍵-值系統的支持,例如Redis
- REST Server: REST Server是一套面向應用程序開發的入口點,旨在實現針對Kylin平台的應用開發工作。 此類應用程序可以提供查詢、獲取結果、觸發cube構建任務、獲取元數據以及獲取用戶權限等等。
- ODBC驅動程序:為了支持第三方工具與應用程序——例如Tableau——我們構建起了一套ODBC驅動程序並對其進行了開源。我們的目標是讓用戶能夠更為順暢地采用這套Kylin平台
- jdbc驅動程序:kylin提供了jdbc的驅動,驅動的classname為org.apache.kylin.jdbc.Driver,使用 的url的前綴jdbc:kylin:,使用jdbc接口的查詢走的流程和使用RESTFul接口查詢走的內部流程是相同的。這類接口也使得kylin很 好的兼容tebleau甚至mondrian。
- 查詢引擎(Query Engine):當cube准備就緒后,查詢引擎就能夠獲取並解析用戶查詢。它隨后會與系統中的其它組件進行交互,從而向用戶返回對應的結果,kylin使用一個開源的Calcite框架實現SQL的解析,相當於SQL引擎層
- Routing:該模塊負責將解析SQL生成的執行計划轉換成cube緩存的查詢,cube是通過預計算緩存在hbase中,這部分查詢是可以再秒級甚至 毫秒級完成,而還有一些操作使用過查詢原始數據(存儲在hadoop上通過hive上查詢),這部分查詢的延遲比較高。
- Cube構建引擎:這個模塊是所有模塊的基礎,它負責預計算創建cube,創建的過程是通過hive讀取原始數據然后通過一些mapreduce計算生成Htable然后load到hbase中
部署結構
- 單節點部署架構圖:
- 單節點優點是:部署簡單;缺點也很明顯: Kylin是單點,並發請求上來的時候它會成為瓶頸
- 集群部署架構圖:
- 為了將負載分布到Kylin cluster, 需要建立一個Load Balancer. 在LB這里可以啟用SSL加密,申請域名,還可以安裝防火牆,對外只暴露LB的地址和端口,確保Hadoop和Kylin在網絡上對外是隔離的
- 部署到Cluster非常簡單,只需要增加Kylin的節點數,因為Kylin的metadata也是存儲在HBase,只需要讓它們用同一張metadata表就可以組成cluster,通常在這個時候會用LDAP來管理用戶權限
- 讀寫分離集群部署架構圖:
- Kylin非常適合於做讀寫分離,原因是Kylin的工作負載有兩種:
-
- 前者是Cube的計算,它是批量的、延時很長的計算,有密集的CPU和IO
- 后者是在線的計算,是只讀的,因為面向用戶,它要求低延遲。Cube計算的過程會對集群帶來很大的負載,從而產生噪音;所以我們有充足的理由進行讀寫分析
- Kylin很容易做到這一點,你可以把HBase單獨部署成一個集群,在部署Kylin的節點上,hadoop 配置指向運算的集群,Hbase的配置指向HBase集群。通過這樣的部署,可以確保Hbase的查詢可以在很短時間完成,而計算集群可以跟公司其它部門分享
KMS架構
- KMS = Kylin + Mondrian + Saiku 是一個簡單的三層架構,Git上已經有一個整合Kylin,Mondrian以及Saiku的項目。照着這個項目的指引,可以很輕松的搭建這么一個三層的系統。在此,致謝開源項目作者mustangore
- Kylin: kylin是apache軟件基金會的頂級項目,一個開源的分布式多維分析工具。通過預計算所有合理的維度組合下各個指標的值並把計算結果存儲到HBASE中的方式,大大提高分布式多維分析的查詢效率。Kylin接收sql查詢語句作為輸入,以查詢結果作為輸出。通過預計算的方式,將在hive中可能需要幾分鍾的查詢響應時間下降到毫秒級
- Mondrian:Mondrian是一個OLAP分析的引擎,主要工作是根據事先配置好的schema,將輸入的多維分析語句MDX(Multidimensional Expressions )翻譯成目標數據庫/數據引擎的執行語言(比如SQL)
- Saiku: Saiku提供了一個多維分析的用戶操作界面,可以通過簡單拖拉拽的方式迅速生成報表。Saiku的主要工作是根據事先配置好的schema,將用戶的操作轉化成MDX語句提供給Mondrian引擎執行
- 架構圖如下:
新資訊
- Apache Kylin在 1.5.0 推出了從流數據進行准實時(Near Real Time)處理功能,可以直接從Apache Kafka的主題(Topic)中消費數據來構建Cube
- Apache Kylin 1.5.0的流處理是一次實驗性的探索,它打破了以往只能從Apache Hive表構建Cube的局限, 但它在實現上存在一些局限︰
-
- 不可擴展︰ 由於是利用單個 Java 進程(而不是利用某種計算框架)對數據做處理,當遇到流數據高峰時,可能由於資源不足而導致構建失敗
- 可能會丟失數據︰ 由於使用一個起始時間+結束時間在Kafka隊列中使用二分查找近似地尋找消息的偏移量(offset),過早或過晚到達的消息將會被遺漏,從而使得查詢結果有誤差
- 難以監控︰ 用於構建的任務是單獨通過shell腳本執行的,而不是像其它Cube那樣由任務引擎統一調度和執行,所以這些任務是在Web界面和REST API上都無法查詢到的,使得用戶無法方便地使用工具進行監控和管理
- 其它︰ 必須持續執行,如果有系統宕機將會造成某些時間窗口的任務沒有被執行,從而必須依靠管理員手動恢復;如果宕機時間較長,管理員不得不將長時間窗口切成多個小時間窗口依次來恢復,非常繁瑣
- 新版流式構建是在Kylin v1.5的"可插拔 "架構下的一個完美實現︰ 將Kafka主題視為一種數據源,實現相應的適配器,將數據先抽取、轉換和保存到 HDFS,接下來使用各種Kylin的構建引擎(MR/Spark等)對數據進行並行計算 ,下圖是高層次的架構圖