@
Apache Kylin 官網中文地址 https://kylin.apache.org/cn/
Apache Kylin 官網中文最新檔案 https://kylin.apache.org/cn/docs/
Apache Kylin 原始碼地址 https://github.com/apache/kylin
Apache Kylin™是一個開源的、分散式的分析型資料倉儲,提供Hadoop/Spark 之上的 SQL 查詢介面及多維分析(OLAP)能力以支援超大規模資料,最初由 eBay 公司中國團隊開發並貢獻給Apache,使用神獸麒麟命名,查詢速度快能在亞秒內響應。最新版本為v4.0.3
Apache Kylin4.0 是一個重大改革版本,其中4.0之前採用HBase 作為儲存引擎來儲存 cube 構建後產生的預計算結果,構建引擎為MR,下推引擎採用的是HIVE JDBC;4.0之後採用了全新的 Spark 構建引擎和 Parquet 作為儲存,同時使用 Spark 作為查詢引擎。版本功能詳細對比如下:
使用 Apache Parquet + Spark 來代替 HBase 使用理由如下:
資料倉儲是一個各種資料(包括歷史資料、當前資料)的中心儲存系統,是BI(business intelligence,商業智慧)的核心部件。例如資料包含來自企業各個業務系統的訂單、交易、客戶、採購、庫存、供應商、競爭對手資料。
商業智慧通常被理解為將企業中現有的資料轉化為知識,幫助企業做出明智的業務經營決策的工具。為了將資料轉化為知識,需要利用到資料倉儲、聯機分析(OLAP)工具和資料探勘等技術。
OLAP是一種軟體技術,它使分析人員能夠迅速、一致、互動地從各個方面、各個維度觀察資訊,以達到深入理解資料的目的,OLAP也稱為多維分析。
星型模型:由一個或多個參照任意數量維表的事實表組成。
事實表:由業務流程的測量、度量或事實組成。
查詢表:是一個陣列,它用一個更簡單的陣列索引操作代替執行時計算。
維度:是一種對事實和度量進行分類的結構,以便使使用者能夠回答業務問題。常用的維度有人物、產品、地點和時間。
度量:是可以進行計算(例如總和、計數、平均、最小值、最大值)的屬性。
連線:一個SQL連線子句組合來自關聯式資料庫中兩個或多個表的記錄。
OLAP Cube:OLAP多維資料集是用0維或多維來理解的資料陣列;一個多維的資料集稱為一個OLAP Cube.給定一個資料模型,我們可以對其上的所有維度進行聚合,對於 N 個維度來說,組合的所有可能性共有 2^n-1種。對於每一種維度的組合,將度量值做聚合計算,然後將結果儲存 為一個物化檢視,稱為 Cuboid。所有維度組合的 Cuboid 作為一個整體,稱為 Cube。簡單點來講:就是每一種維度的組合都叫一個Cuboid, 所有的維度的組合就叫做Cube。
維度與度量
Cube Actions
Job Status
Job Action
Kylin 提供與多種資料視覺化工具的整合能力,如 Tableau、PowerBI 等,很方便使用 BI 工具對 Hadoop 資料進行分析。
為了讓使用者輕鬆試用麒麟,並方便開發人員在修改原始碼後進行驗證和偵錯。可以通過麒麟的docker映象快速部署。該映象包含麒麟所依賴的每個服務:
# 拉取映象,dcoker hub上已有kylin 5.0.0版本映象,二進位制未更新
docker pull apachekylin/apache-kylin-standalone:5.0.0
# 執行容器
docker run -d \
-m 8G \
-p 7070:7070 \
-p 8088:8088 \
-p 50070:50070 \
-p 8032:8032 \
-p 8042:8042 \
-p 2181:2181 \
apachekylin/apache-kylin-standalone:5.0.0
以下服務在容器啟動時自動啟動:NameNode、 DataNode、ResourceManager、NodeManager、Kylin,相關web UI地址如下:
# 下載最新版本v4.0.3 for Apache Spark 3.1.x
wget https://dlcdn.apache.org/kylin/apache-kylin-4.0.3/apache-kylin-4.0.3-bin-spark3.tar.gz
# 解壓檔案
tar -zxvf apache-kylin-4.0.3-bin-spark3.tar.gz
# 進入kylin根目錄
cd apache-kylin-4.0.3-bin-spark3
# 根目錄結構說明如下
bin:啟動/停止Kylin服務、備份/恢復後設資料的shell指令碼,以及一些實用指令碼。
conf: XML組態檔,這些xml檔案的功能可以在設定頁面中找到。
lib:對外使用的Kylin jar檔案,如Hadoop作業jar、JDBC驅動程式、HBase協處理器jar等。
meta_backups:執行" bin/metastore.sh backup "命令時的預裝置份資料夾;
sample_cube:用於建立樣例多維資料集及其表的檔案。
spark: spark由$KYLIN_HOME/bin/download.sh下載。
tomcat:執行Kylin應用程式的tomcat web伺服器。
tool:命令列工具的jar檔案。
# 設定麒麟環境變數
vim /etc/profile
export KYLIN_HOME=/home/commons/apache-kylin-4.0.3-bin-spark3
# 執行環境變數生效
source /etc/profile
# 前面用apache-kylin-4.0.3-bin-spark3使用spark3需要下載spark-3.1.1版本
wget https://archive.apache.org/dist/spark/spark-3.1.1/spark-3.1.1-bin-hadoop3.2.tgz
# 解壓
tar -xvf spark-3.1.1-bin-hadoop3.2.tgz
# 進入目錄
mv spark-3.1.1-bin-hadoop3.2 spark-yarn
# 由於需要用到yarn作為資源管理器,設定spark使用yarn的資源
vim conf/spark-env.sh
YARN_CONF_DIR=/home/commons/hadoop/etc/hadoop
並將MySQL連線驅動拷貝到spark的jars目錄下,讓spark能夠正常連線MySQL。
將可使用的hive-site.xml拷貝到spark的conf目錄,用於spark操作hive的後設資料等。
將上面spark-yarn目錄分發到所有的yarn的node manager上,並且修改所有node manager的spark環境變數
vim /etc/profile
export SPARK_HOME=/home/commons/spark-yarn
export PATH=$SPARK_HOME/bin:$PATH
# 執行環境變數生效
source /etc/profile
設定MySQL後設資料
-- 建立一個kylin資料庫
CREATE DATABASE kylin DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_bin;
-- 建立一個kylin使用者
CREATE USER 'kylin'@'%' IDENTIFIED BY 'kylin';
-- 向用戶授予剛剛建立的資料庫的所有許可權
GRANT ALL PRIVILEGES ON kylin.* TO kylin@'%' WITH GRANT OPTION;
ALTER USER 'kylin'@'%' IDENTIFIED WITH mysql_native_password BY 'kylin';
FLUSH PRIVILEGES;
java -classpath kylin-server-base-4.0.3.jar\
:kylin-core-common-4.0.3.jar\
:spring-beans-5.2.22.RELEASE.jar\
:spring-core-5.2.22.RELEASE.jar\
:commons-codec-1.6.jar \
org.apache.kylin.rest.security.PasswordPlaceholderConfigurer \
AES kylin
修改kylin的組態檔,vim conf/kylin.properties
kylin.metadata.url=kylin_metadata@jdbc,url=jdbc:mysql://mysqlserver:3306/kylin,username=kylin,password=kylin,maxActive=10,maxIdle=10,driverClassName=com.mysql.cj.jdbc.Driver
# HDFS工作空間
kylin.env.hdfs-working-dir=/kylin
# kylin在zookeeper的工作目錄
kylin.env.zookeeper-base-path=/kylin
# 不使用kylin自帶的zookeeper
kylin.env.zookeeper-is-local=false
# 外部zookeeper連線字串設定
Kylin.env.zookeeper-connect-string=zk1:2181,zk2:2181,zk3:2181
# SPARK BUILD ENGINE CONFIGS,hadoop conf目錄位置
kylin.env.hadoop-conf-dir=/home/commons/hadoop/etc/hadoop
# 為了避免遇到各種環境問題,可以執行$KYLIN_HOME/bin/check-env.sh指令碼進行環境檢查,檢視是否存在問題。如果識別出任何錯誤,指令碼將列印出詳細的錯誤訊息。如果沒有錯誤訊息,說明您的環境適合Kylin操作。
$KYLIN_HOME/bin/check-env.sh
# 啟動
$KYLIN_HOME/bin/kylin.sh start
# 麒麟啟動的預設埠為7070。可以使用$KYLIN_HOME/bin/kylin-port-replace-util.sh set number修改埠。修改後的埠號為「7070 +編號」。
$KYLIN_HOME/bin/kylin-port-replace-util.sh set number 1
# 停止
$KYLIN_HOME/bin/kylin.sh start
# 重啟
$KYLIN_HOME/bin/kylin.sh restart
# 可以檢視執行紀錄檔
tail -f logs/kylin.log
Apache Kylin™ 令使用者僅需三步就可實現超巨量資料集上的亞秒級查詢。
# 使用Kylin安裝目錄下範例快速體驗Kylin,先執行一個指令碼來建立一個範例多維資料集
$KYLIN_HOME/bin/sample.sh
執行指令碼完成後,檢視hive default預設資料庫下已經有相應的
通過kylin的WebUI click System -> Configuration -> Reload Metadata 載入後設資料資訊
重新載入後設資料後,可以在左上角的project中看到一個名為learn_kylin的專案,這個專案包含一個批次處理多維資料集kylin_sales_cube和一個流資料集kylin_streaming_cube。
可以直接構建kylin_sales_cube,並且可以在構建完成後查詢它。
create database kylin;
use kylin;
create external table if not exists dept(
deptno int,
dname string,
loc int
)
row format delimited fields terminated by '\t';
create external table if not exists emp(
empno int,
ename string,
job string,
mgr int,
hiredate string,
sal double,
comm double,
deptno int)
row format delimited fields terminated by '\t';
mkdir tmpdata
# 製作部門表(dept.txt)資料
vim tmpdata/dept.txt
100 ACCOUNTING 1700
200 RESEARCH 1800
300 SALES 1900
400 OPERATIONS 1700
# 製作員工表(emp.txt)資料
vim tmpdata/emp.txt
1336 SMITH CLERK 1869 2016-01-03 2800.0 1000.0 200
1466 ALLEN SALESMAN 1665 2016-03-08 5600.0 1500.0 300
1488 WARD SALESMAN 1665 2016-03-10 4375.0 2500.0 300
1533 JONES MANAGER 1806 2016-04-18 10412.5 6000.0 200
1621 MARTIN SALESMAN 1665 2016-10-14 4375.0 7000.0 300
1665 BLAKE MANAGER 1806 2016-05-17 9975.0 4000.0 300
1749 CLARK MANAGER 1806 2016-06-25 8575.0 3500.0 100
1755 SCOTT ANALYST 1533 2022-05-05 10500.0 6800.0 200
1806 KING PRESIDENT NULL 2016-12-03 17500.0 20000.0 100
1811 TURNER SALESMAN 1665 2016-09-24 5250.0 3000.0 300
1843 ADAMS CLERK 1755 2022-06-08 3850.0 2500.0 200
1867 JAMES CLERK 1665 2016-12-19 3325.0 2400.0 300
1869 FORD ANALYST 1533 2016-12-19 10500.0 8000.0 200
1901 MILLER CLERK 1749 2017-02-08 4550.0 3200.0 100
load data local inpath '/home/commons/apache-kylin-4.0.3-bin-spark3/tmpdata/dept.txt' into table dept;
load data local inpath '/home/commons/apache-kylin-4.0.3-bin-spark3/tmpdata/emp.txt' into table emp;
點選左上角的+來建立一個Project,輸出專案名稱和描述點選提交按鈕
在Models頁面的左邊點選New按鈕後點選New Model,填寫Model名稱及描述後Next
選擇員工作為Fact Table事實表,新增部門作為Lookup Table維度表
選擇維度資訊
選擇度量資訊
新增分割區資訊(這裡沒有做分割區表)及過濾條件這裡我們暫時不填寫保持預設,點選「Save」並確認儲存模型。
在Models頁面的左邊點選New按鈕後點選New Cube,選擇員工Model及填寫Cube Name,點選next
新增真正維度欄位,(將來會影響 Cuboid 的個數,並且只能從 model 維度欄位裡面選擇),點選ok並點選下一步
新增真正度量值欄位(將來預計算的欄位值,只能從 model 度量值裡面選擇),點選度量新增按鈕「+ Measure」,填寫資訊並點選ok,並選擇next
接著重新整理設定、高階設定、設定覆蓋都先保持預設的,最後檢視概覽點選save按鈕並確定儲存
在上面建立的cube上點選build構建action動作,並確認開始構建
檢視當前正在構建的情況
等待一會後構建完成
在Insight洞察頁面新查詢框中輸入sql語句
select dept.dname,sum(emp.sal) from emp join dept on emp.deptno = dept.deptno group by dept.dname;
第一次之後的查詢都是秒級響應
相比下面在hive中執行查詢快了非常多
可以針對查詢結果點選Grid按鈕實現圖形視覺化,選擇圖示型別、維度和度量資訊展示,還可以選擇匯出csv檔案結果