1.簡介
kylin的設計思想是空間換時間,將hive上的大表的維度全部排列組合計算也將度量提前計算然后存入HBase庫,這個步驟在kylin中稱之為build cube。
在查詢的時候已經建立cube的hive表會直接訪問HBase的scan來拿出結果,對於度量則可以直接get即可。由於數據量的膨脹關系,數據的維度需要控制在15個以下。另外由於是預計算結果所以數據
在確定列等信息后不能修改,不能修改表結構。
2.環境說明
hadoop CDH5.4.2 ----- 需要打上MAPREDUCE-6213補丁
HBase CDH5.7.0--------kylin只支持HBase1.1.0以上的版本
Hive apache-hive-2.0.1
3.安裝步驟
1.下載kylin:
http://kylin.apache.org/cn/download/
2.下載tomcat:
(以上版本需要根據自己的需要選擇,本次使用的是 apache-kylin-1.6.0-cdh5.7 和 apache-tomcat-8.5.11)
3.設定環境變量:
export CATALINA_HOME=/Users/apple/Desktop/software/apache-tomcat-8.5.11
export KYLIN_HOME=/Users/apple/Desktop/hadoop2/apachesrc/kylin/bin/apache-kylin-1.6.0-cdh5.7-bin
4.修改配置文件kylin.properties,增加如下兩項目:
kylin.job.jar=/Users/apple/Desktop/hadoop2/apachesrc/kylin/bin/apache-kylin-1.6.0-cdh5.7-bin/lib/kylin-job-1.6.0.jar kylin.coprocessor.local.jar=/Users/apple/Desktop/hadoop2/apachesrc/kylin/bin/apache-kylin-1.6.0-cdh5.7-bin/lib/kylin-coprocessor-1.6.0.jar
需要將kylin.coprocessor.local.jar指定的jar包放到hbase集群的lib下。
5. kylin依賴的服務需要在kylin本地安裝服務器上有拷貝(可以不起服務),同時需要如下進行環境變量的設定:這樣kylin可以連接hive hbase以及hadoop集群。
export HIVE_HOME=/Users/apple/Desktop/hadoop2/apachesrc/hive/2.0.1/bin/apache-hive-2.0.1-bin export HIVE_CONF_DIR=/Users/apple/Desktop/hadoop2/apachesrc/hive/2.0.1/bin/config export HCAT_HOME=$HIVE_HOME/hcatalog export HIVE_CONF=/Users/apple/Desktop/hadoop2/apachesrc/hive/2.0.1/bin/config export HADOOP_HOME=/Users/apple/Desktop/hadoop2/cdh/hadoop/bin/hadoop-2.6.0-cdh5.4.2 export HADOOP_CONF_DIR=/Users/apple/Desktop/hadoop2/cdh/hadoop/bin/config #export YARN_HOME=$HADOOP_HOME #export YARN_CONF_DIR=$HADOOP_CONF_DIR #export HBASE_HOME=/Users/apple/Desktop/hadoop2/cdh/hbase/bin/hbase-1.0.0-cdh5.4.2 export HBASE_HOME=/Users/apple/Desktop/hadoop2/cdh/hbase/bin/hbase-1.2.0-cdh5.7.0 export HBASE_CONF_DIR=/Users/apple/Desktop/hadoop2/cdh/hbase/bin/config export PATH=$HIVE_HOME/bin:$HBASE_HOME/bin:$KYLIN_HOME/bin:$HCAT_HOME/bin:$CATALINA_HOME/bin:$SBT_HOME/bin:$MAVEN_HOME/bin:$PROTOBUF_HOME/bin:$JAVA_HOME/bin:$ANT_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH
6. 需要開啟hive的遠程thrift的metastare服務,kylin在sync hive表元數據的時候需要連接這個服務。
nohup hive --service metastore -p 9083 &
7. 啟動kylin
kylin.sh start
啟動過程中會對依賴的服務進行連通性的檢查:
if [ -z "$KYLIN_HOME" ] then echo 'please make sure KYLIN_HOME has been set' exit 1 else echo "KYLIN_HOME is set to ${KYLIN_HOME}" fi if [ -z "$(command -v hbase version)" ] then echo "Please make sure the user has the privilege to run hbase shell" exit 1 fi if [ -z "$(command -v hive --version)" ] then echo "Please make sure the user has the privilege to run hive shell" exit 1 fi if [ -z "$(command -v hadoop version)" ] then echo "Please make sure the user has the privilege to run hadoop shell" exit 1 fi
8. 默認用戶名/密碼 ADMIN / KYLIN

4.簡單使用
一般使用步驟為:0.登錄->1.建立項目->2.同步hive表元數據(事實表)->3.在事實表基礎上建立模型->4.在模型基礎上建立cube->5.build cube->通過cube查詢
0.登錄kylin
1.建立項目:

2.同步hive表元數據(事實表)

3.基於hive事實表進行模型的建立

說明:
1.選擇模型基於的事實表
2.選擇事實表中那些對於那些維度進行建模,被選維度會被用於cube的計算。
3.選擇事實表中那些度量進行建模,被選度量在計算cube的時候直接進行預計算結果。
4.選擇事實表中的分區信息以及數據過濾,數據過濾條件中不能有時間或者分區字段的過濾,這樣會影響增量刷cube(因為增量是基於時間的(或者說分區)進行的)
4.基於模型建立cube

說明:
1.新建cube的時候選擇基於model
2.選擇要創建的維度信息
3.選擇哪些度量需要做聚合計算,以及做什么聚合計算
4.選擇增量刷新cube的定時任務,以及此模型開始的分區信息
5.當設定完畢保存后產生cube任務,點擊build
6.通過監控頁面可以查看到當前cube任務的運行信息,主要通過MR計算得出立方體結構數據,然后將這些數據通過bulkload到HBase,最后做清理動作
5.查詢(頁面)
當cube創建完畢后可以通過jdbc鏈接或者直接通過查詢頁面進行查詢,只有已經建立了cube的事實表才能做查詢。

6.查詢(jdbc)
驅動請在此下載:https://javalibs.com/artifact/org.apache.kylin/kylin-jdbc
樣例代碼:
import java.sql.Connection; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import java.util.Properties; import org.apache.kylin.jdbc.Driver; public class JdbcMain { public static void main(String[] args) throws SQLException, InstantiationException, IllegalAccessException, ClassNotFoundException { Driver driver = (Driver) Class.forName("org.apache.kylin.jdbc.Driver").newInstance(); Properties info = new Properties(); // 登錄web的密碼,更多用戶可以被設定 也可以鏈接ldap連接到內部賬戶服務 info.put("user", "ADMIN"); info.put("password", "KYLIN"); // test 為工程名,指明此鏈接去哪一個工程下去查詢 Connection conn = driver.connect("jdbc:kylin://applexf.local:7070/test", info); Statement state = conn.createStatement(); ResultSet resultSet = state.executeQuery("select * from TABLEFORKYLIN"); while (resultSet.next()) { System.out.print(resultSet.getString(1) + " "); System.out.print(resultSet.getString(2) + " "); System.out.print(resultSet.getString(3) + "\n"); } } }
結果:

附錄:
1. 參考https://my.oschina.net/aibati2008/blog/745389來使用
完畢。
