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