1. Kylin介绍

Apache Kylin是一个开源的分布式分析引擎,提供Hadoop/Spark之上的SQL查询接口及多维分析(OLAP)能力以支持超大规模数据,最初由eBay Inc开发并贡献至开源社区。它能在亚秒内查询巨大的Hive表。

2. Kylin架构

CDH6.3.0+Kylin集群实战_java

  1. REST Server

REST Server是一套面向应用程序开发的入口点,旨在实现针对Kylin平台的应用开发工作。 此类应用程序可以提供查询、获取结果、触发cube构建任务、获取元数据以及获取用户权限等等。另外可以通过Restful接口实现SQL查询。

  1. 查询引擎(Query Engine)

当cube准备就绪后,查询引擎就能够获取并解析用户查询。它随后会与系统中的其它组件进行交互,从而向用户返回对应的结果。

  1. 路由器(Routing)

在最初设计时曾考虑过将Kylin不能执行的查询引导去Hive中继续执行,但在实践后发现Hive与Kylin的速度差异过大,导致用户无法对查询的速度有一致的期望,很可能大多数查询几秒内就返回结果了,而有些查询则要等几分钟到几十分钟,因此体验非常糟糕。最后这个路由功能在发行版中默认关闭。

  1. 元数据管理工具(Metadata)

Kylin是一款元数据驱动型应用程序。元数据管理工具是一大关键性组件,用于对保存在Kylin当中的所有元数据进行管理,其中包括最为重要的cube元数据。其它全部组件的正常运作都需以元数据管理工具为基础。 Kylin的元数据存储在hbase中。

  1. 任务引擎(Cube Build Engine)

这套引擎的设计目的在于处理所有离线任务,其中包括shell脚本、Java API以及Map Reduce任务等等。任务引擎对Kylin当中的全部任务加以管理与协调,从而确保每一项任务都能得到切实执行并解决其间出现的故障。

3. Kylin特点

Kylin的主要特点包括支持SQL接口、支持超大规模数据集、亚秒级响应、可伸缩性、高吞吐率、BI工具集成等

  • 准S标准SQL接口:Kylin是以标准的SQL作为对外服务的接口。
  • 支持超大数据集:Kylin对于大数据的支撑能力可能是目前所有技术中最为领先的。早在2015年eBay的生产环境中就能支持百亿记录的秒级查询,之后在移动的应用场景中又有了千亿记录秒级查询的案例。
  • 亚秒级响应:Kylin拥有优异的查询相应速度,这点得益于预计算,很多复杂的计算,比如连接、聚合,在离线的预计算过程中就已经完成,这大大降低了查询时刻所需的计算量,提高了响应速度。
  • 可伸缩性和高吞吐率:单节点Kylin可实现每秒70个查询,还可以搭建Kylin的集群。
  • BI工具集成
  1. Kylin可以与现有的BI工具集成,具体包括如下内容。
  2. ODBC:与Tableau、Excel、PowerBI等工具集成
  3. JDBC:与Saiku、BIRT等Java工具集成
  4. RestAPI:与JavaScript、Web网页集成

Kylin开发团队还贡献了Zepplin的插件,也可以使用Zepplin来访问Kylin服务。

5. Kylin集群部署

5.1 安装环境准备

安装Kylin前需先部署好Hadoop、Hive、Zookeeper、HBase,并且需要在/etc/profile中配置以下环境变量HIVE_HOME,SPARKHOME,HBASE_HOME和JAVA_HOME,记得source使其生效。

CDH环境变量配置如下:

vim /etc/profile下追加

export HIVE_HOME=/opt/cloudera/parcels/CDH/lib/hive      #hive环境
export SPARK_HOME=/opt/cloudera/parcels/CDH/lib/spark #spark环境
export HBASE_HOME=/opt/cloudera/parcels/CDH/lib/hbase #hbase环境
export KYLIN_HOME=/opt/kylin #kylin环境,稍后部署

JAVA环境变量配置如下(hadoop集群应已配置):

vim /etc/profile.d/jdk.sh

#set default jdk1.8 env
JAVA_HOME=/usr/java/jdk1.8.0_181-cloudera
JRE_HOME=/usr/java/jdk1.8.0_181-cloudera/jre
PATH=$PATH:$JAVA_HOME/bin
export JAVA_HOME JRE_HOME PATH

5.2 安装主机列表

主机

主机名

角色

192.168.116.42

server-3

all

192.168.116.43

server-4

query

192.168.116.44

server-5

query

kyLin下载:​​kylin下载地址 ​

5.3 安装的版本

apache-kylin-3.0.0.tar.gz

CDH6.3.0+Kylin集群实战_java_02

5.4 解压&配置

  1. 将下载好的apache-kylin-3.0.0.tar.gz上传至server-3主机的/opt下,然后解压并修改名为kylin,操作如下:
[root@server-3 opt]# mv apache-kylin-3.0.0-bin-hadoop3 kylin
  1. 配置kylin

登陆sever-3主机:vim /optkylin/conf/kylin.properties

kylin.metadata.url= kylin_metadata@hbase
kylin.server.mode=all // 只能有一个节点是all,其他节点为query
kylin.server.cluster-servers=server-3:7070,server-4:7070,server-5:7070
  1. 配置加载hbase common lib
vi /opt/cloudera/parcels/CDH/lib/hbase/bin/hbase


CLASSPATH=${CLASSPATH}:$JAVA_HOME/lib/tools.jar

CLASSPATH=${CLASSPATH}:$JAVA_HOME/lib/tools.jar:/opt/cloudera/parcels/CDH/lib/hbase/lib/*
  1. sever-3主机修改好的kylin发至其它两台主机,操作如下:
scp -r /opt/kylin server-4:/opt/
scp -r /opt/kylin server-5:/opt/
  1. 修改sever-4,sever-5主机的/opt/kylin/conf/kylin.properties配置如下:
kylin.server.mode=
  1. 分别启动各自主机的kylin服务:
/opt/kylin/bin/kylin.sh start

登陆地址:http://server-3:7070/kylin

CDH6.3.0+Kylin集群实战_java_03

kylin的初始账户密码:ADMIN/KYLIN

6. FAQ

6.1 Argument list too long

[root@server-4 bin]# vim cached-hbase-dependency.sh
[root@server-4 bin]# ./kylin.sh start
Retrieving hadoop conf dir...
KYLIN_HOME is set to /opt/kylin
Using cached dependency...
Start to check whether we need to migrate acl tables
Using cached dependency...
/opt/cloudera/parcels/CDH-6.3.0-1.cdh6.3.0.p0.1279813/bin/../lib/hbase/bin/hbase: line 373: /usr/java/jdk1.8.0_181-cloudera/bin/java: Argument list too long
/opt/cloudera/parcels/CDH-6.3.0-1.cdh6.3.0.p0.1279813/bin/../lib/hbase/bin/hbase: line 674: /usr/java/jdk1.8.0_181-cloudera/bin/java: Argument list too long
/opt/cloudera/parcels/CDH-6.3.0-1.cdh6.3.0.p0.1279813/bin/../lib/hbase/bin/hbase: line 674: /usr/java/jdk1.8.0_181-cloudera/bin/java: Success
ERROR: Unknown error. Please check full log.

Argument list too long是因为句柄数不足导致,修改如下:

vim /etc/security/limits.conf下追加:

* soft memlock unlimited
* hard memlock unlimited
* soft nproc 65535
* hard nproc 65535
* soft nofile 65536
* hard nofile 65536
* soft stack 16384
* hard stack 32768

6.2 无法创建/kylin目录

因为我是root用户启动的,报错是如下:

KYLIN_HOME is set to /opt/kylin
mkdir: Permission denied: user=root, access=WRITE, inode="/":hdfs:supergroup:drwxr-xr-x

解决如下:

[hdfs@node03 ~]$ hdfs dfs -setfacl -R -m user:root:rwx /

6.3 org.apache.hadoop.hbase.util.GetJavaProperty

解决方案:

vim /opt/cloudera/parcels/CDH/lib/hbase/bin/hbase

编辑这个文件,然后在169行左右修改配置:

修改前:

CLASSPATH="${HBASE_CONF_DIR}"
CLASSPATH=${CLASSPATH}:$JAVA_HOME/lib/tools.jar

修改后:

CLASSPATH="${HBASE_CONF_DIR}"
CLASSPATH=${CLASSPATH}:$JAVA_HOME/lib/tools.jar:/opt/cloudera/parcels/CDH/lib/hbase/lib/*

6.4 org/apache/commons/configuration/ConfigurationException

Caused by: 
java.lang.NoClassDefFoundError: org/apache/commons/configuration/ConfigurationException

原因

kylin的tomcat容器缺少commons-configuration-1.x.jar依赖包

解决方式:

CDH上有commons-configuration-1.9.jar的jar包,直接拷贝到${kylin_home}/tomcat/webapps/kylin/WEB-INF/lib即可

cp /opt/cloudera/cm/cloudera-navigator-audit-server/commons-configuration-1.9.jar /opt/kylin/tomcat/webapps/kylin/WEB-INF/lib

重新启动kylin就可以了!