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
上層應用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+
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的方法在官網上有詳細的介紹,這裏再也不贅述
kylin 的cube 對於用戶是透明的。用戶沒法直接從cube查詢。用戶須要寫維表與事實表的join語句, kylin負責轉譯成cube的查詢。這點也是kylin和中間表、寬表的一大區別。(中間表、寬表在用戶端就讓sql變得簡單, kylin在執行時讓sql變得高效)所以,kylin適合與bi引擎對接。中間表、寬表事宜提供給用戶。
kylin對hadoop生態的版本很是敏感,最好不要超出推薦的版本好範圍
搭建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