Kylin安裝及員工表和部門表多維度分析實戰(詳細步驟)

Kylin快速安裝

1、首先去官網下載對應安裝包,http://kylin.apache.org/cn/download/。

2、下載完成後,將apache-kylin-3.0.1-bin-hbase1x.tar.gz上傳到集羣,並解壓。

注意:需要在環境變量中添加HADOOP_HOME,HIVE_HOME,HBASE_HOME,可以到/etc/profile文件中修改,最後需要source 使添加的環境變量生效

export HBASE_HOME=/home/hadoop/bs/hbase-1.3.1
export PATH=$PATH:$HBASE_HOME/bin
export HIVE_HOME=/home/hadoop/hive
export PATH=$PATH:$HIVE_HOME/bin
export HADOOP_HOME=/home/hadoop/hadoop-2.7.2
export PATH=$PATH:$HADOOP_HOME/bin
export PATH=$PATH:$HADOOP_HOME/sbin

3、啓動kylin前,需要啓動hdfs、yarn(還需啓動historyserver)、zookeeper、hbase。(對應的部署在此不贅述,可以參考網上很多文章進行安裝部署)(另外還需保證有hive,作爲數據源)

4、利用命令kylin.sh start 啓動kylin。

5、啓動成功後,會看到命令行出現如下提示,接下來可以通過http://:7070/kylin訪問web界面。

A new Kylin instance is started by hadoop. To stop it, run 'kylin.sh stop'
Check the log at /home/hadoop/apache-kylin-2.5.1-bin-hbase1x/logs/kylin.log
Web UI is at http://<hostname>:7070/kylin

員工和部門簡單kylin多維度分析例程

1、首先訪問對應的web頁面,可以看到如下,暫時沒有任何工程、cube。

在這裏插入圖片描述

2、接下來我們訪問hive,在hive中創建對應的部分和員工外部表,並將部分實驗數據導入到表中。建表語句如下:
create external table if not exists default.dept(
deptno int,
dname string,
loc int
)
row format delimited fields terminated by '\t';

create external table if not exists default.emp(
empno int,
ename string,
job string,
mgr int,
hiredate string, 
sal double, 
comm double,
deptno int)
row format delimited fields terminated by '\t';

建表完成後導入數據,數據存放在txt文件中,load data local 將數據導入後,可以查看這些數據。

在這裏插入圖片描述

3、數據導入後,到web頁面新建工程,工程名和描述按照自己的想法輸入。

在這裏插入圖片描述

4、接下來設置數據源,可以選擇Load table 或load table from tree,選擇剛纔創建並且有數據的兩張表。設置完成後,我們可以在頁面查看兩張表的對應的元數據,可以查看錶結構。

在這裏插入圖片描述

在這裏插入圖片描述

5、接下來,點擊new model,創建model,model名和描述也是按照自己的想法輸入,在②數據模型這需要選擇事實表,即星型模型的中心。另外還要點擊add lookup table添加維度表,在設置中需要增加事實表和維度表相連接字段。

在這裏插入圖片描述

在這裏插入圖片描述

6、下一步,選擇維度信息,即需要從哪幾個維度進行分析,如下圖選擇員工表的職位、部門、經理和部門表的部門號、部門名稱,5個維度對收入(sal)進行分析。

在這裏插入圖片描述

7、選擇度量信息,即維度信息按不同維度進行分析,得到與度量的關係,如下選擇工資(sal)。

在這裏插入圖片描述

8、創建好model後,可以看到界面顯示對應信息。

在這裏插入圖片描述

9、接下來創建cube。

cube名稱和描述按照自己想法寫,下一步選擇維度,需要注意的是,維度表中的字段可以選擇normal和derived,normal是將選擇的維度信息全部進行聚合,其生成的cuboid是2n-1 ,n表示維度的數量,可以看到如下圖選擇normal時,cuboid數量爲31,而選擇derived時,cuboid數量爲7.這屬於cube構建優化中的衍生維度。

衍生維度用於在有效維度內將維度表上的非主鍵維度排除掉,並使用維度表的主鍵(其實是事實表上相應的外鍵)來替代它們。Kylin會在底層記錄維度表主鍵與維度表其他維度之間的映射關係,以便在查詢時能夠動態地將維度表的主鍵“翻譯”成這些非主鍵維度,並進行實時聚合。

如下cuboid爲7的圖,維度表中的兩個維度信息被記錄爲事實表中的外鍵,所以維度數量變成3個,cuboid 就 變成2^3-1=7。在一定程度上優化了cube構建時效率。但是衍生維度也不是完全替代normal模式,由於映射關係中會存在相同數據,導致分析出來的結果不是最終聚合完成的內容,還需要另外對結果再進行聚合操作。所以在選擇時,需要考慮從維度表主鍵到某個維度表維度所需要的聚合工作量是否很大,大的話就不建議使用衍生維度。

在本次例程中可以選擇derived模式。

在這裏插入圖片描述

在這裏插入圖片描述

在這裏插入圖片描述

10、設置預計算的內容,默認有一個計算count,我們還可以增加,例如增加一個sum等等。填寫完後不要忘記點擊ok,將填寫內容保存。

在這裏插入圖片描述

11、剩下的refresh setting是動態更新相關的內容,即當時間到達設置值時對內容進行歸併。advanced setting是高級設置,可以設置聚合組等,聚合組也是cube構建優化,選擇對應維度進行聚合綁定(強制維度、層級維度、聯合維度),可以按照用戶需求避免一些不需要的cuboid,適合基數很大的維度時使用,可以有效控制cube的膨脹率。configuration overwrite是配置覆蓋設置,可以覆蓋環境中的配置,使網頁上需要的配置生效。

在這裏插入圖片描述

12、cube創建完成後,可以點擊action —> build,進行預計算了。我們可以點到Monitor查看進程運行狀態,在這裏也可以看到具體運行步驟和日誌。

在這裏插入圖片描述

在這裏插入圖片描述

在這裏插入圖片描述

13、運行完成後,我們可以比較一下相同sql在hive和kylin中查詢速度。如下圖所示,可以看到聚合查詢操作會先進行速度較慢的MapReduce,最後得到結果,查詢時間爲31秒。而在kylin頁面查詢,可以看到時間很短,爲0.28秒,是因爲預計算已經進行了MapReduce計算,省去了很多時間,而我們查詢的時候直接查詢HBase,速度就很快。

在這裏插入圖片描述

在這裏插入圖片描述

Kylin結合Zeppelin工具

1、下載zeppelin工具。

2、下載完成後將壓縮包上傳到集羣,並解壓,然後切換到conf目錄,將template模板配置文件修改名字,去除template後綴,可以對文件中內容進行修改,本次安裝不做修改。

3、運行下面命令啓動zeppelin。

[hadoop@hadoop1 bin]$ ./zeppelin-daemon.sh start
Zeppelin start                                             [  OK  ]

注意:如果出現如下錯誤,可以定位查看日誌,logs/zeppelin-hadoop-hadoop1.out,如下,可以定位到是由於虛擬機內存不足,導致分配給jvm啓動資源不足,導致應用無法啓動。

[hadoop@hadoop1 zeppelin-0.8.0-bin-all]$ bin/zeppelin-daemon.sh start
Zeppelin start                                             [  OK  ]
Zeppelin process died                                      [FAILED]
 There is insufficient memory for the Java Runtime Environment to continue.
# Native memory allocation (mmap) failed to map 716177408 bytes for committing reserved memory.
# An error report file with more information is saved as:
# /home/hadoop/apache-kylin-2.5.1-bin-hbase1x/zeppelin-0.8.0-bin-all/hs_err_pid86405.log
ZEPPELIN_CLASSPATH: ::/home/hadoop/kylin/zeppelin-0.8.0-bin-all/lib/interpreter/*:/home/hadoop/kylin/zeppelin-0.8.0-bin-all/lib/*:/home/hadoop/kylin/zeppelin-0.8.0-bin-all/*::/home/hadoop/kylin/zeppelin-0.8.0-bin-all/conf
Java HotSpot(TM) 64-Bit Server VM warning: ignoring option MaxPermSize=512m; support was removed in 8.0
Java HotSpot(TM) 64-Bit Server VM warning: INFO: os::commit_memory(0x00000000c0000000, 716177408, 0) failed; error='Cannot allocate memory' (errno=12)

這時查看啓動腳本,可以看到對應的jvm配置是在common.sh腳本中,ZEPPELIN_MEM默認配置初始化堆內存爲1G,如果虛擬機未分配足夠的內存,便後出現資源不足的問題,導致Zeppelin無法啓動。問題找到了,我們修改一下堆大小就可以了,將1024改爲512(結合自身虛擬機內存配置)。修改完成後,順利啓動,可以通過hadoop1:8080訪問web頁面。

# Text encoding for
# read/write job into files,
# receiving/displaying query/result.
if [[ -z "${ZEPPELIN_ENCODING}" ]]; then
  export ZEPPELIN_ENCODING="UTF-8"
fi

if [[ -z "${ZEPPELIN_MEM}" ]]; then
  export ZEPPELIN_MEM="-Xms1024m -Xmx1024m -XX:MaxPermSize=256m"
fi

if [[ -z "${ZEPPELIN_INTP_MEM}" ]]; then
  export ZEPPELIN_INTP_MEM="-Xms1024m -Xmx1024m -XX:MaxPermSize=512m"
fi

JAVA_OPTS+=" ${ZEPPELIN_JAVA_OPTS} -Dfile.encoding=${ZEPPELIN_ENCODING} ${ZEPPELIN_MEM}"
JAVA_OPTS+=" -Dlog4j.configuration=file://${ZEPPELIN_CONF_DIR}/log4j.properties"
export JAVA_OPTS

另外,在運行的時候也會出現類似錯誤,這個參數也是在common.sh,ZEPPELIN_INTP_MEM參數控制,解決辦法也是如上述一致,修改對應堆大小就好。

# There is insufficient memory for the Java Runtime Environment to continue.
# Native memory allocation (mmap) failed to map 716177408 bytes for committing reserved memory.
# An error report file with more information is saved as:
# /home/hadoop/apache-kylin-2.5.1-bin-hbase1x/zeppelin-0.8.0-bin-all/hs_err_pid89070.log

	at org.apache.zeppelin.interpreter.remote.RemoteInterpreterManagedProcess.start(RemoteInterpreterManagedProcess.java:205)
	at org.apache.zeppelin.interpreter.ManagedInterpreterGroup.getOrCreateInterpreterProcess(ManagedInterpreterGroup.java:64)
	at org.apache.zeppelin.interpreter.remote.RemoteInterpreter.getOrCreateInterpreterProcess(RemoteInterpreter.java:111)

修改完成後,在zeppelin上配置好kylin訪問project和rest url後,即可利用該工具查詢,同時zeppelin還集成了很多其他框架的查詢,也可以通過配置後進行使用。

在這裏插入圖片描述

kylin部署問題

2020-03-19 19:13:20,596 INFO  [main] zookeeper.ZooKeeper:438 : Initiating client connection,connectString=hadoop1:2181:2181,hadoop1:2181:2181,hadoop1:2181:2181 sessionTimeout=120000 watcher=org.apache.curator.ConnectionState@493dfb8e
2020-03-19 19:13:20,596 ERROR [main] imps.CuratorFrameworkImpl:546 : Background exception was not retry-able or retry gave up
java.net.UnknownHostException: hadoop1:2181: 域名解析暫時失敗

出現上述問題的原因是在拼接connectString時,拼接了兩次2181,導致連接錯誤。

原因就是在HBase的配置文件hbase-site.xml中,參數hbase.zookeeper.quorum設置了ip+端口號,在kylin連接zookeeper時,會再利用該參數值再拼接端口號2181,至此出現問題。

既然多了一個端口號,解決方法就按照要求去除一個端口號,可以修改hbase-site.xml,將hbase.zookeeper.quorum參數的value值的:2181去除。

<property>
	<name>hbase.zookeeper.quorum</name>
	<value>hadoop1,hadoop2,hadoop3</value>
</property>
2020-03-19 21:14:48,286 ERROR [Scheduler 717691961 Job 305e13dc-8b20-f01b-316f-f7bacb10bfc5-60] common.HadoopJobStatusChecker:58 : error check status
java.io.IOException: java.net.ConnectException: Call From hadoop1/192.168.145.111 to 0.0.0.0:10020 failed on connection exception: java.net.ConnectException: Connection refused; For more details see:  http://wiki.apache.org/hadoop/ConnectionRefused
	at org.apache.hadoop.mapred.ClientServiceDelegate.invoke(ClientServiceDelegate.java:343)
	at org.apache.hadoop.mapred.ClientServiceDelegate.getJobStatus(ClientServiceDelegate.java:428)

在build cube時,出現上述異常的原因是沒有開啓hadoop的job history服務。使用下面命令開啓historyserver歷史服務即可解決問題。

mr-jobhistory-daemon.sh start historyserver
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章