kylin初體驗-入門介紹

kylin初體驗


12月開始,爲了提升公司OLAP系統的查詢速度,開始接觸kylin,前先後後折騰了近三個月。踩了無數的坑,纔算是初窺門徑。特在此把本身的感悟、理解記錄下來,算是從新梳理一邊本身的所得,也但願能給衆位正在使用kylin或者打算使用kylin的小夥伴們提供一點幫助😊html

一句話的歸納(個人理解)

kylin將OLAP分析的星型模型schema的全部group by聚合結果存儲在HBASE的表中,經過將sql查詢轉化成對hbase表的聚合操做的方式大大提升查詢速度。算法

官方介紹

http://kylin.apache.org/ Apache Kylin™ is an open source Distributed Analytics Engine designed to provide SQL interface and multi-dimensional analysis (OLAP) on Hadoop supporting extremely large datasets, original contributed from eBay Inc.sql

kylin的角色

  • 上層應用shell

    • SQL應用:Zeplin等,經過jdbc/odbc調用kylinapache

    • 第三方應用:經過kylin的restful接口調用kylin緩存

    • BI應用:Saiku+Mondrian, Tabularestful

  • kylin架構

    • 提供jdbc/odbc driver以及restful接口,接受sql查詢app

    • 判斷sql該從hbase直接查詢,仍是該查詢原始的hive表ide

    • 提供cube設計、構建、管理的接口和UI

  • 下層基礎(kylin 1.2)

    • hadoop 2.4 - hadoop 2.7

    • hive 0.13 - hive 0.14

    • hbase 0.98 - hbase 0.99

    • JDK 1.7+

kylin 架構

kylin 架構圖

  • REST Server:提供jdbc/odbc接口以及restful接口

  • Metadata:存儲在hbase中的cube相關信息(project信息、hive table 信息、cube Schema…)

  • Routing:處理Rest Server接受到的請求,查詢Metadata,判斷從hbase取數仍是從hive取數

  • Query Engine:根據Routing 的判斷,執行hbase查詢或者hive查詢,返回數據給REST Server

  • Cube Build Engine:根據metadata中的cube信息,將hive中的數據預計算並寫入到hbase

kylin build cube的方法在官網上有詳細的介紹,這裏再也不贅述

踩過的坑與感悟

  1. kylin 的cube 對於用戶是透明的。用戶沒法直接從cube查詢。用戶須要寫維表與事實表的join語句, kylin負責轉譯成cube的查詢。這點也是kylin和中間表、寬表的一大區別。(中間表、寬表在用戶端就讓sql變得簡單, kylin在執行時讓sql變得高效)所以,kylin適合與bi引擎對接。中間表、寬表事宜提供給用戶。

  2. kylin對hadoop生態的版本很是敏感,最好不要超出推薦的版本好範圍

  3. 搭建kylin時:

    • limit 後面添加一個起始位置,一個數據長度,好比limit 1, 20

    • right outer join

    • left outer join

    • select 不在group by 中的字段

    • count(distinct)

    • insert, update, delete

    • union, union all

    • where exists

    • 須要安裝snapy壓縮算法,或者將kylin.hbase.default.compression.codec配置爲其餘已有算法

    • 須要將$HBASE_HOME/conf/hbase-site.xml 中hbasehbase.zookeeper.quorum字段的默認端口2181去除掉

    • 須要用huser用戶啓動kylin

    • 須要保證kylin服務機器與集羣中每臺機器的hadoop相關環境變量一致

      kylin執行MR任務時若是報錯hcatalog class not found. build cube時集羣中每臺機器都有一些hive的jar包(好比hive-hcatalog-core***.jar),若是沒有,須要合併到$KYLIN_HOME/lib/kylin-jdbc-{version}.jar中。kylin運行時會將這個jar包put到HDFS上。

      對kylin的job進行管理時,經常會由於kylin metadata的緩存致使找不到資源id對應的cube、segment,從而產生一個null pointer錯誤。解決方法:重啓kylin清除緩存,或者修改kylin源碼,對job操做中可能出現null pointer的地方作相應處理。

      kylin的官方介紹中,對於出如今hive表可是沒有被預處理存儲到hbase中的字段的查詢,kylin能夠直接查詢hive。通過在kylin UI中試驗,發現kylin並不能找到hive表,會報找不到字段的錯誤。

      kylin對cube進行按日期分段時,須要提供一個日期字段如圖:分區字段選中的字段PAR在hive中須要是Date類型。不然build Cube 不能成功

      kylin對絕大多數SQL語句都有很好的支持,下面列出通過測試kylin不能很好支持的sql語句:

    • limit 後面添加一個起始位置,一個數據長度,好比limit 1, 20right outer joinleft outer joinselect 不在group by 中的字段count(distinct)insert, update, deleteunion, union allwhere exists
相關文章
相關標籤/搜索