前言node
Apache Kylin是一個開源的分佈式分析引擎,最初由eBay開發貢獻至開源社區。它提供Hadoop之上的SQL查詢接口及多維分析(OLAP)能力以支持大規模數據,可以處理TB乃至PB級別的分析任務,可以在亞秒級查詢巨大的Hive表,並支持高併發。web
Kylin的理論基礎:空間換時間。apache
Kylin從數據倉庫中最經常使用的Hive中讀取源數據,使用 MapReduce做爲Cube構建的引擎,並把預計算結果保存在HBase中,對外暴露Rest API/JDBC/ODBC的查詢接口。vim
部署Kylinbash
(一)下載安裝併發
寫這篇博客時,最新版爲2.0.0 beta版,最新的正式版爲1.6.0,因此我使用的1.6.0。分佈式
能夠直接下載源碼包編譯安裝,也能夠根據本身的hadoop環境版本下載對應的二進制安裝包。ide
我使用的是HDP2.4.2,Hbase版本是1.1.2。直接下載的是二進制包安裝。函數
$ cd /opt $ wget http://ftp.tc.edu.tw/pub/Apache/kylin/apache-kylin-1.6.0/apache-kylin-1.6.0-hbase1.x-bin.tar.gz $ tar xf apache-kylin-1.6.0-hbase1.x-bin.tar.gz $ vim /etc/profile export KYLIN_HOME=/opt/apache-kylin-1.6.0-hbase1.x-bin $ source /etc/profile
(二)環境檢查高併發
$cd /opt/apache-kylin-1.6.0-hbase1.x-bin $./bin/check-env.sh KYLIN_HOME is set to /opt/apache-kylin-1.6.0-hbase1.x-binmkdir: Permission denied: user=root, access=WRITE, inode="/kylin":hdfs:hdfs:drwxr-xr-xfailed to create /kylin, Please make sure the user has right to access /kylin #提示使用hdfs用戶 #check-env.sh腳本執行的是檢查本地hive,hbase,hadoop等環境狀況。 #並會在hdfs中建立一個kylin的工做目錄。 $ su hdfs $ ./bin/check-env.sh KYLIN_HOME is set to /opt/apache-kylin-1.6.0-hbase1.x-bin $ hadoop fs -ls / #多了一個/kylin的目錄drwxr-xr-x - hdfs hdfs 0 2017-01-19 10:08 /kylin
(三)啓動
$ chown hdfs.hadoop /opt/apache-kylin-1.6.0-hbase1.x-bin $ ./bin/kylin.sh start A new Kylin instance is started by hdfs, stop it using "kylin.sh stop"Please visit You can check the log at /opt/apache-kylin-1.6.0-hbase1.x-bin/logs/kylin.log
(四)進入頁面
http://localhost:7070/kylin
user:ADMIN passwd:KYLIN
使用Kylin
(一)添加新的項目
給項目起一個名字,添加項目描述。
給項目添加數據源(加載hive數據表)
在數據源的頁面,能夠手動填寫hive表名
成功加載了resource表的數據
這時就能夠看到對應表的字段屬性。
(二)建立model(模型)
新建model
編輯model名字和描述
選擇數據表
接下來選擇維度和度量,這是構建預計算模型cube中最爲重要的兩個屬性。
度量: 度量是具體考察的聚合數量值,例如:銷售數量、銷售金額、人均購買量。計算機一點描述就是在SQL中就是聚合函數。
例如:select cate,count(1),sum(num) from fact_table where date>’20161112’ group by cate;
count(1)、sum(num)是度量
維度: 維度是觀察數據的角度。例如:銷售日期、銷售地點。計算機一點的描述就是在SQL中就是where、group by裏的字段
例如:select cate,count(1),sum(num) from fact_table where date>’20161112’ group by cate;
date、cate是維度
選擇要分析的維度字段
選擇要分析的度量字段
設置表中的時間字段
(三)建立cube(立方體)
Cube構建須要依賴前面建立的model。選擇model,設置cube名。
從上面model設置的維度字段中選擇你須要分析的字段。
選擇度量。
第一個_COUNT_是默認要計算的。
第二個COUNT_DISTINCT,能夠去重計算獲得有多少個IP地址,即一般的UV。
(COUNT_DISTINCT計算時是有精確度選擇的,計算越精準須要的時間就越長)
第三個TOP_N,是用來計算排名的。
第四個MAX,是用來計算最大值的
還有其餘的MIN,SUM等各類計算表達式。
後面的幾個基本上就沒有什麼要設置的了,直接Next了,最後保存cube就行了。
(四)構建cube
建立好cube以後,咱們只是獲得了一個計算模型。須要將數據按照咱們設定的模型去計算,才能獲得相應的結果。
下面開始構建cube,在Action中選擇Build
選擇要構建的時間範圍(若是數據是持續寫入hive表,那麼可使用cube持續構建)
進入Monitor中查看正在構建的Cube,和歷史構建的cube
(五)查詢
cube構建成功後,數據就已經計算過,並將計算結果存儲到了Hbase。那麼這時候咱們可使用SQL在kylin中進行查詢。
比較一下在kylin中查詢和直接在hive中查詢的速度。
執行一個group by order by的查詢。
SQL:select ip, max(loadmax) as loadmax,max(connectmax) as connectmax, max(eth0max) as eth0max, max(eth1max) as eth1max ,max(rospace) as rospace,max(team) as team from resource group by ip order by loadmax asc ;
在Kylin預計算以後,這條查詢只用了0.11s
直接在hive中進行計算時間是30.05s
時間相差270倍!!!
(六)樣例數據
#kylin自帶一個樣例,包含1w條數據的樣本
$ ./bin/sample.sh Sample cube is created successfully in project 'learn_kylin'. Restart Kylin server or reload the metadata from web UI to see the change. $ ./bin/kylin.sh stop stopping Kylin:15334 $ ./bin/kylin.sh start
能夠在Kylin中看到learn_kylin這個項目。而且有建立好的model和cube,能夠供參考和學習。