kylin 搭建和简单测试结果

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://<your_sandbox_ip>:7070/kylin to play with the cubes! (Useranme: ADMIN, Password: KYLIN)"
    else
        echo "Please visit http://<ip>: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

猜你喜欢

转载自chengjianxiaoxue.iteye.com/blog/2218510