Apache Kylin安裝部署

0x01 Kylin安裝環境

Kylin依賴於hadoop大數據平臺,安裝部署之前確認,大數據平臺已經安裝Hadoop, HBase, Hive

1.1 瞭解kylin的兩種二進制包

預打包的二進制安裝包:apache-kylin-1.6.0-bin.tar.gz
特別二進制包:apache-kylin-1.6.0-HBase1.x-bin.tar.gz

說明:特別二進制包是一個在HBase 1.1+環境上編譯的Kylin快照二進制包;安裝它需要HBase 1.1.3或更高版本,否則之前版本中有一個已知的關於fuzzy key過濾器的缺陷,會導致Kylin查詢結果缺少記錄:HBASE-14269。此外還需注意的是,這不是一個正式的發佈版(每隔幾周rebase KYLIN 1.3.x 分支上最新的改動),沒有經過完整的測試。

0x02 安裝部署

2.1 下載

可以選擇自己需要的版本進行下載,這裏下載的是pache-kylin-1.6.0-bin.tar.gz

2.2 安裝

$ tar -zxvf apache-kylin-1.6.0-bin.tar.gz
$ mv apache-kylin-1.6.0 /home/hadoop/cloud/
$ ln -s /home/hadoop/cloud/apache-kylin-1.6.0 /home/hadoop/cloud/kylin

2.3 配置環境變量

在/etc/profile裏配置KYLIN環境變量和一個名爲hive_dependency的變量

# vim /etc/profile

//追加
export KYLIN_HOME=/home/hadoop/kylin
export PATH=$PATH:$ KYLIN_HOME/bin
export hive_dependency=/home/hadoop/hive/conf:/home/hadoop/hive/lib/*:/home/hadoop/hive/hcatalog/share/hcatalog/hive-hcatalog-core-2.0.0.jar

使配置文件生效

# source /etc/profile
# su hadoop
$ source /etc/profile

這個配置需要在從節點master2,slave1,slave2上同時配置,因爲kylin提交的任務交給mr後,hadoop集羣將任務分發給從節點時,需要hive的依賴信息,如果不配置,則mr任務將報錯爲: hcatalogXXX找不到。

2.4 配置kylin.sh

$ vim ~/cloud/kylin/bin/kylin.sh

//顯式聲明 KYLIN_HOME
export KYLIN_HOME=/home/Hadoop/kylin
//在HBASE_CLASSPATH_PREFIX中顯示增加$hive_dependency依賴
export HBASE_CLASSPATH_PREFIX=${tomcat_root}/bin/bootstrap.jar:${tomcat_root}/bin/tomcat-juli.jar:${tomcat_root}/lib/*:$hive_dependency:$HBASE_CLASSPATH_PREFIX

2.5 檢查環境是否設置成功

$ check-env.sh
KYLIN_HOME is set to /home/hadoop/kylin

2.6 配置kylin.properties

進入conf文件夾,修改kylin各配置文件kylin.properties如下

$ vim ~/cloud/kylin/conf/kylin.properties

kylin.rest.servers=master:7070
#定義kylin用於MR jobs的job.jar包和hbase的協處理jar包,用於提升性能。
kylin.job.jar=/home/hadoop/kylin/lib/kylin-job-1.6.0-SNAPSHOT.jar
kylin.coprocessor.local.jar=/home/hadoop/kylin/lib/kylin-coprocessor-1.6.0-SNAPSHOT.jar

2.7 配置kylin_hive_conf.xml和kylin_job_conf.xml

kylin_hive_conf.xmlkylin_job_conf.xml的副本數設置爲2

<property>
  <name>dfs.replication</name>
  <value>2</value>
  <description>Block replication</description>
</property>

2.8 啓動服務

注意:在啓動Kylin之前,先確認以下服務已經啓動

hadoop的hdfs/yarn/jobhistory服務

start-all.sh
mr-jobhistory-daemon.sh start historyserver

hive 元數據庫

hive --service metastore &

zookeeper

zkService.sh start

需要在每個節點上執行,分別啓動所有節點的zookeeper服務

hbase

start-hbase.sh

檢查hive和hbase的依賴

$ find-hive-dependency.sh
$ find-hbase-dependency.sh

啓動和停止kylin的命令

$ kylin.sh start
$ kylin.sh stop

Web訪問地址: http://192.168.1.10:7070/kylin/login

默認的登錄username/password 是 ADMIN/KYLIN

0x03 測試

3.1 測試Kylin自帶的sample

Kylin提供一個自動化腳本來創建測試CUBE,這個腳本也會自動創建出相應的hive數據表。運行sample例子的步驟:

S1: 運行${KYLIN_HOME}/bin/sample.sh腳本

$ sample.sh

關鍵提示信息:

KYLIN_HOME is set to /home/hadoop/kylin
Going to create sample tables in hive...
Sample hive tables are created successfully; Going to create sample cube...
Sample cube is created successfully in project 'learn_kylin'; Restart Kylin server or reload the metadata from web UI to see the change.

S2:在MYSQL中查看此sample創建了哪幾張表

select DB_ID,OWNER,SD_ID,TBL_NAME from TBLS;

S3: 在hive客戶端查看創建的表和數據量(1w條)

hive> show tables;
OK
kylin_cal_dt
kylin_category_groupings
kylin_sales
Time taken: 1.835 seconds, Fetched: 3 row(s)
hive> select count(*) from kylin_sales;
OK
Time taken: 65.351 seconds, Fetched: 1 row(s)

S4: 重啓kylin server 刷新緩存

$ kylin.sh stop
$ kylin.sh start

S5:用默認的用戶名密碼ADMIN/KYLIN訪問192.168.200.165:7070/kylin

進入控制檯後選擇project爲learn_kylin的那個項目。

S6: 選擇測試cube “kylin_sales_cube”,點擊“Action”-“Build”,選擇一個2014-01-01以後的日期,這是爲了選擇全部的10000條測試記錄。

選擇一個生成日期
點擊提交會出現重建任務成功提交的提示

S7: 監控臺查看這個任務的執行進度,直到這個任務100%完成。

任務完成
切換到model控制檯會發現cube的狀態成爲了ready,表示可以執行sql查詢了
執行過程中,在hive裏會生成臨時表,待任務100%完成後,這張表會自動刪除

0x04 常見錯誤

4.1 運行check-env.sh提示

please make sure user has the privilege to run hbase shell

檢查hbase環境變量是否配置正確。重新配置後問題解決。
參考:http://www.jianshu.com/p/632b...

4.2 hadoop-env.sh腳本問題

Kylin安裝問題--/home/hadoop-2.5.1/contrib/capacity-scheduler/.jar (No such file or directory)

WARNING: Failed to process JAR
 [jar:file:/home/hadoop-2.5.1/contrib/capacity-scheduler/.jar!/] for
 TLD files
 java.io.FileNotFoundException:
 /home/hadoop-2.5.1/contrib/capacity-scheduler/.jar (No such file or
 directory)
 at java.util.zip.ZipFile.open(Native Method)
 at java.util.zip.ZipFile.(ZipFile.java:215)
 at java.util.zip.ZipFile.(ZipFile.java:145)
 at java.util.jar.JarFile.(JarFile.java:153)
 at java.util.jar.JarFile.(JarFile.java:90)
 at sun.net.www.protocol.jar.URLJarFile.(URLJarFile.java:93)
 at sun.net.www.protocol.jar.URLJarFile.getJarFile(URLJarFile.java:69)
 at sun.net.www.protocol.jar.JarFileFactory.get(JarFileFactory.java:99)
 at
 sun.net.www.protocol.jar.JarURLConnection.connect(JarURLConnection.java:122)
 at
 sun.net.www.protocol.jar.JarURLConnection.getJarFile(JarURLConnection.java:89)
 at org.apache.tomcat.util.scan.FileUrlJar.(FileUrlJar.java:41)
 at org.apache.tomcat.util.scan.JarFactory.newInstance(JarFactory.java:34)
 at org.apache.catalina.startup.TldConfig.tldScanJar(TldConfig.java:485)
 at org.apache.catalina.startup.TldConfig.access$100(TldConfig.java:61)
 at
 org.apache.catalina.startup.TldConfig$TldJarScannerCallback.scan(TldConfig.java:296)
 at
 org.apache.tomcat.util.scan.StandardJarScanner.process(StandardJarScanner.java:258)
 at
 org.apache.tomcat.util.scan.StandardJarScanner.scan(StandardJarScanner.java:220)
 at org.apache.catalina.startup.TldConfig.execute(TldConfig.java:269)
 at
 org.apache.catalina.startup.TldConfig.lifecycleEvent(TldConfig.java:565)
 at
 org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:117)
 at
 org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:90)
 at
 org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5412)
 at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
 at
 org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:901)
 at
 org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:877)
 at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:649)
 at org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:1081)
 at
 org.apache.catalina.startup.HostConfig$DeployWar.run(HostConfig.java:1877)
 at
 java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471)
 at java.util.concurrent.FutureTask.run(FutureTask.java:262)
 at
 java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
 at
 java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)

其實這個問題只是一些小bug問題把這個腳本的內容改動一下就好了${HADOOP_HOME}/etc/hadoop/hadoop-env.sh把下面的這一段循環語句給註釋掉

#for f in $HADOOP_HOME/contrib/capacity-scheduler/*.jar; do
#  if [ "$HADOOP_CLASSPATH" ]; then
#    export HADOOP_CLASSPATH=$HADOOP_CLASSPATH:$f
#  else
#    export HADOOP_CLASSPATH=$f
#  fi
#done

4.3 清理kylin空間

kylin.sh org.apache.kylin.storage.hbase.util.StorageCleanupJob --delete true

4.4 Permission denied

kylin cube測試時,報錯:org.apache.hadoop.security.AccessControlException: Permission denied: user=root, access=WRITE, inode="/user":hdfs:supergroup:drwxr-xr-x

解決辦法:

1 配置hdfs-site.xml

<property>
    <name>dfs.permissions</name>
    <value>false</value>
</property>

2 在hdfs上給目錄/user 777的權限

$ hadoop fs -chmod -R 777 /user

0x05 參考鏈接

http://kylin.apache.org/cn/do...
http://kylin.apache.org/cn/do...
http://www.cnblogs.com/avivay...

2017-02-17 19:51:39 星期五

update1: 2017-05-04 20:10:05 星期四

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