0 概念:
这里的kylin是 OLAP的范畴,是ebay上海研发团队研发的一个多维存储的产品,目的是为了
解决hbase紧依靠rowkey来快速查询的局限, 其核心是 空间换时间, 不是国产linux的kylin操作系统
1 说明:
1 使用apache原生,这里搭建成功的版本为: (kylin官网建议使用 hotonworks sandbox 而且看kylin/bin的文件也都有sandbox的痕迹 这里我使用apache 原生版本)
apache-kylin-0.7.1
apache-hive-0.14.0
hadoop-2.2.0
hbase-0.98.12
zookeeper-3.4.5
2其中一些说明如下,
0 jdk1.7版, 使用物理机器为 172.17.199.11 172.17.199.12 172.17.199.13
1 必须是 hadoop-2.2.0版本, 必须是hive0.14以上版本(kylin maillist建议是这样)
2 hive解压后的命名必须为hive ----> 可以看kylin/bin/find-hive-dependency.sh 22行代码,
3 建议机器为8G内存,如果是用虚拟机搭建单机环境,那么虚拟机建议给到5G+内存,否则可能kylin启动有问题,比如页面无法访问,或者bulid sample时候死机
4 建议kylin.sh中 手动导出 kylin_home 可以查看我上次的附件 kylin.sh第二行
然后,必须启动的服务有:
1 hadoop2的hdfs yarn 以及 jobhistory
2 hive --service metastore &
3 zookeeper
4 hbase
5 kylin
6 如上几项必须设置在集群每台机器的环境变量中
2 集群生态分布如下:
集群搭建在 172.17.199.11, 172.17.199.12, 172.17.199.13上,三台机器内存都是64G
集群生态分布如下:
hadoop2.2.0
机器 | 角色 | 启动的服务 |
172.17.199.11 | 主节点 | Namenode SecondaryNameNode JobHistoryServer ResouceManager |
172.17.199.12 | 从节点 | DataNode NodeManager |
172.17.199.13 | 从节点 | DataNode NodeManager |
Zookeeper-3.4.5
机器 | 启动的服务 |
172.17.199.11 | QuorumPeerMain |
172.17.199.12 | QuorumPeerMain |
172.17.199.13 | QuorumPeerMain |
Hbase-0.98.12
机器 | 启动的服务 |
172.17.199.11 | HMaster |
172.17.199.12 | HRegionServer |
172.17.199.13 | HRegionServer |
Hive-0.14.0
机器 | 启动的服务 |
172.17.199.11 | hive客户端 hive metastore |
Kylin-0.7.1
机器 | 启动的服务 |
172.17.199.11 | kylin服务 |
3 集群安装前的说明:
1 保证11,12,13 ssh三台互通,关闭防火墙,设置好机器别名,以及机器别名和IP地址映射
2 配置好后的 /etc/profile如下:
export JAVA_HOME=/usr/java/jdk1.7.0_71
export PATH=$JAVA_HOME/bin:$PATH
CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export HADOOP_HOME=/home/forkylin/hadoop-2.2.0
export HIVE_HOME=/home/forkylin/hive
export KYLIN_HOME=/home/forkylin/kylin-0.7.1
export HBASE_HOME=/home/forkylin/hbase-0.98.12
export ZOOKEEPER_HOME=/home/forkylin/zookeeper-3.4.5
export PATH=$PATH:$HADOOP_HOME/sbin:$HADOOP_HOME/bin:$HIVE_HOME/bin:$KYLIN_HOME/bin:$HBASE_HOME/bin:$ZOOKEEPER_HOME/bin
export JAVA_HOME CLASSPATH
4 hadoop集群安装:
hadoop2集群非ha模式下搭建配置文件写法
主要是mapred-site.xml yarn-site.xml 下mb内存的设置,如果不设置,在部署后kylin查询时,会卡死
配置好环境变量后启动hadoop集群,涉及到的命令:
start-all.sh mr-jobhistory-daemon.sh start historyserver
5 安装zookeeper集群:
参考链接 Zookeeper 简介 搭建
配置好环境变量后,启动时执行命令 zkServer.sh start
6 安装hbase集群:
参考链接 hbase简介 搭建
配置好环境变量后,启动时执行命令 start-hbase.sh
7 安装hive:
参考链接:0 hive 简介,安装,本地文件上传到hive操作
注意 解压后必须重命名为 hive
配置好环境变量后,启动时执行命令 hive -service metastore &
然后启动hive 查看hive客户端下能否查看表 创建表
8 安装kylin:
8.1 安装
a) 下载kylin到11节点, 这里解压到 /home/forkylin/kylin-0.7.1下
b) /home/forkylin/kylin-0.7.1/bin下 修改kylin.sh 显示声明 kylin_home,并在HBASE_CLASSPATH_PREFIX中显示增加$hive_dependency依赖,修改信息如下:
export KYLIN_HOME="/home/airsupply/develope/kylin-0.7.1" 第二行
第35行
export HBASE_CLASSPATH_PREFIX=${tomcat_root}/bin/bootstrap.jar:${tomcat_root}/bin/tomcat-juli.jar:${tomcat_root}/lib/*:$hive_dependency:$HBASE_CLASSPATH_PREFIX
c) 配置kylin的环境变量
8.2 启动
命令行任意位置下执行 kylin.sh start
可以通过 netstat -anp | grep 7070 查看(kylin默认使用7070端口)
也可以 tail -f /home/forkylin/kylin-0.7.1/tomct/logs 查看启动信息
启动成功后,访问 http://hadoop1:7070/kyliln/ 用户名 ADMIN 密码 KYLIN
8.3 kylin执行官网案例测试
a) 执行kylin.sh stop
b) /home/forkylin/kylin-0.7.1/bin下执行 sample.sh 将kylin测试数据写到hive中
c) 执行kylin.sh start
此时在Hive下能看到kylin导入的表, kylin_cal_dt kylin_catagory_groups kylin_sales
d) 访问http://hadoop1:7070/kyliln/cubes 界面如下:
选择 actions下的build选择框,后选择截止日期,提交job,
访问
http://hadoop1:7070/kylin/jobs 可以看到你刚提交的job, 此时kylin会把任务转交给mr
通过 tail -f /home/forkylin/kylin-0.7.1/tomcat/logs.kylin_job.log 事实查看 build日志信息
一般 build一个20G的数据,在上面这个集群下 跑了10小时, build上面kylin提供的sample案例 耗时2小时
build结果为:
9 注意事项:
a) 需要把11节点(别名hadoop1)上的hive目录拷贝到 12,13节点上,并在 12,13节点的 /etc/profile上显示导出
export hive_dependency=/home/forkylin/hive/conf:/home/forkylin/hive/lib/*:/home/forkylin/hive/hcatalog/share/hcatalog/hive-hcatalog-core-0.14.0.jar
因为kylin提交的任务交给mr后,hadoop集群将任务分发给从节点时,需要hive的依赖信息,因此需要在12,13上配置,否则mr任务报错为: hcatalogXXX找不到
b) 如果启动kylin时候 tomcat日志说无法解压 kylin.war 处理方式:
/home/forkylin/kylin-0.7.1/tomcat/work/Catalina下的东西清空,
ps -ef | grep java 后 kill -9 杀死所有kylin相关的进程(此时会把hadoop hive hbase zk都干掉) 然后再重启
一般都是因为启动的kylin过多,但是每次关闭的kylin都没有关闭死造成启动过多kylin造成的。
也可以通过 netstat -anp | grep 7070 查看7070被占用了多少次 如果过多 那么应该就是上面方式造成的,关闭多余的在重启,保证只有一个端口被占用
10 简单测试结果如下:
百万数据量下,在上面集群构建立方耗时800多min,物化文件28G
一个维度下,查询结果998949条,耗时:
oracle 16s
kylin 30s
按时间一个维度 查询结果65条 耗时:
oracle 23s
kylin 0.25s
按时间,行情两个维度 查询结果77025条 耗时:
oracle 19s
kylin 3.7s
按时间,科目两个维度 查询结果40625条 耗时:
oracle 40s
kylin 2.8s
按时间,机构,科目三个维度 查询结果20315条 耗时:
oracle 44s
kylin 9.2s
kylin的响应时间和实际返回条数成正比,在单维度查询下,针对oracle没有优势,
kylin更适合高度范化的聚合数据查询,不合适明细数据查询。
11 修改的kylin.sh文件贴上如下:
#!/bin/sh
export KYLIN_HOME="/home/airsupply/develope/kylin-0.7.1"
if [ $1 == "start" ]
then
dir=$(dirname ${0})
source ${dir}/check-env.sh
tomcat_root=${dir}/../tomcat
export tomcat_root
#The location of all hadoop/hbase configurations are difficult to get.
#Plus, some of the system properties are secretly set in hadoop/hbase shell command.
#For example, in hdp 2.2, there is a system property called hdp.version,
#which we cannot get until running hbase or hadoop shell command.
#
#To save all these troubles, we use hbase runjar to start tomcat.
#In this way we no longer need to explicitly configure hadoop/hbase related classpath for tomcat,
#hbase command will do all the dirty tasks for us:
useSandbox=`cat ${KYLIN_HOME}/conf/kylin.properties | grep 'kylin.sandbox' | awk -F '=' '{print $2}'`
spring_profile="default"
if [ "$useSandbox" = "true" ]
then spring_profile="sandbox"
fi
#retrive $hive_dependency
source ${dir}/find-hive-dependency.sh
#retrive $KYLIN_EXTRA_START_OPTS
if [ -f "${dir}/setenv.sh" ]
then source ${dir}/setenv.sh
fi
export HBASE_CLASSPATH_PREFIX=${tomcat_root}/bin/bootstrap.jar:${tomcat_root}/bin/tomcat-juli.jar:${tomcat_root}/lib/*:$hive_dependency:$HBASE_CLASSPATH_PREFIX
export HBASE_CLASSPATH=$hive_dependency:${HBASE_CLASSPATH}
export JAVA_OPTS="-Xms2048M -Xmx2048M -XX:MaxPermSize=512m"
hbase ${JAVA_OPTS} ${KYLIN_EXTRA_START_OPTS} \
-Djava.util.logging.config.file=${tomcat_root}/conf/logging.properties \
-Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager \
-Dorg.apache.tomcat.util.buf.UDecoder.ALLOW_ENCODED_SLASH=true \
-Dorg.apache.catalina.connector.CoyoteAdapter.ALLOW_BACKSLASH=true \
-Djava.endorsed.dirs=${tomcat_root}/endorsed \
-Dcatalina.base=${tomcat_root} \
-Dcatalina.home=${tomcat_root} \
-Djava.io.tmpdir=${tomcat_root}/temp \
-Dkylin.hive.dependency=${hive_dependency} \
-Dspring.profiles.active=${spring_profile} \
org.apache.hadoop.util.RunJar ${tomcat_root}/bin/bootstrap.jar org.apache.catalina.startup.Bootstrap start > ${tomcat_root}/logs/kylin.log 2>&1 & echo $! > ${KYLIN_HOME}/pid &
echo "A new Kylin instance is started by $USER, stop it using \"kylin.sh stop\""
if [ "$useSandbox" = "true" ]
then echo "Please visit http://:7070/kylin to play with the cubes! (Useranme: ADMIN, Password: KYLIN)"
else
echo "Please visit http://:7070/kylin"
fi
echo "You can check the log at ${tomcat_root}/logs/kylin.log"
exit 0
elif [ $1 == "stop" ]
then
if [ ! -f "${KYLIN_HOME}/pid" ]
then
echo "kylin is not running, please check"
exit 1
fi
pid=`cat ${KYLIN_HOME}/pid`
if [ "$pid" = "" ]
then
echo "kylin is not running, please check"
exit 1
else
echo "stopping kylin:$pid"
kill $pid
fi
rm ${KYLIN_HOME}/pid
exit 0
else
echo "usage: kylin.sh start or kylin.sh stop"
exit 1
fi
12 附加资料
附:
http://www.kylin.io/ : kylin 官网首页
https://github.com/KylinOLAP/Kylin : kylin github首页
https://github.com/KylinOLAP/Kylin/blob/master/docs/Installation/On%20Hadoop%20CLI%20installation.md : 在hadoop基础上安装
https://github.com/KylinOLAP/Kylin/blob/master/docs/Tutorial/Quick%20play%20with%20a%20sample%20cube.md : Quick start with sample cube 运行案例
https://github.com/KylinOLAP/Kylin/issues/ kylin问题列表 , 比如 https://github.com/KylinOLAP/Kylin/issues/462
http://kylin.markmail.org/ 通过这里可以查询kylin mailing list中所有提问的问题
kylin如果有使用中的问题,kylin只支持订阅他们的邮件 并通过邮件方式来解答,如果你在github上提问 他们是不会回答实质问题的,
订阅kylin的mailing list做法如下:
send any message to [email protected], then your'll subscribe our mail list.(there might be another confirming letter)
这里我用126邮箱发送但是无法接收到他们的回复邮件,最后用qq邮箱发送才能接收到到他们的回复邮件,根据回复邮件的提示,点击链接,后才能订阅成功
在订阅成功后,你就可以发送问题到[email protected],到时候 他们会一对一的回复你的问题。
他们的回复邮件如下:
Hi! This is the ezmlm program. I'm managing the
[email protected] mailing list.
I'm working for my owner, who can be reached
at [email protected].
To confirm that you would like
[email protected]
added to the dev mailing list, please send
a short reply to this address:
dev-sc.1431910996.pdgjekoiembmaillpnpm-190184501=qq.com@kylin.incubator.apache.org