版本兼容性
Kylin | Hadoop | Hive | HBase | Spark | Kafka | Java | HDP | CDH |
---|---|---|---|---|---|---|---|---|
2.3 | 2.7+ | 0.13 - 1.2.1+ | 1.1+ | 2.1.1+ | 1.7+ | 2.2 - 2.6 | 5.7 - 5.11 | |
2.4 | 2.7+ | 0.13 - 1.2.1+ | 1.1+ | 2.1.1+ | 0.10.0+ | 1.7+ | 2.2 - 2.6 | 5.7 - 5.11 |
2.5, 2.6 | 2.7+, 3.1+ | 0.13 - 1.2.1+ | 1.1+, 2.0 | 2.3.0+ | 1.0.0+ | 1.8+ | 2.2 - 2.6, 3.0 | 5.7 - 5.11, 6.0 |
Hadoop 环境
Kylin 依赖于 Hadoop 集群处理大量的数据集。需要准备一个配置好 HDFS,YARN,MapReduce,Hive,HBase,Zookeeper 和其他服务的 Hadoop 集群供 Kylin 运行。
Kylin 可以在 Hadoop 集群的任意节点上启动。方便起见,可以在 master 节点上运行 Kylin。为了更好的稳定性,建议将 Kylin 部署在一个干净的 Hadoop client 节点上,该节点上 Hive,HBase,HDFS 等命令行已安装好且 client 配置(如 core-site.xml
,hive-site.xml
,hbase-site.xml
及其他)也已经合理的配置且其可以自动和其它节点同步。
运行 Kylin 的 Linux 用户要有访问 Hadoop 集群的权限,包括创建/写入 HDFS 文件夹,Hive 表,HBase 表和提交 MapReduce 任务的权限。
单机安装
- 下载安装包
> wget https://www.apache.org/dyn/closer.cgi/kylin/apache-kylin-2.6.3/apache-kylin-2.6.3-bin-hbase1x.tar.gz
- 解压安装包,配置环境变量
$KYLIN_HOME
指向 Kylin 文件夹。
> tar -zxvf apache-kylin-2.6.3-bin-hbase1x.tar.gz
> mv apache-kylin-2.6.3-bin-hbase1x apache-kylin-2.6.3
> cd apache-kylin-2.6.3
> export KYLIN_HOME=`pwd`
> export PATH=$PATH:$KYLIN_HOME/bin
Kylin 目录结构
从 v2.6.1 开始, Kylin 不再包含 Spark 二进制包。需要另外下载 Spark,然后设置 SPARK_HOME 系统变量。
bin shell 脚本,用于启动/停止 Kylin,备份/恢复 Kylin 元数据,以及一些检查端口、获取 Hive/HBase 依赖的方法等
conf Hadoop 任务的 XML 配置文件,这些文件的作用可参考配置页面
lib 供外面应用使用的 jar 文件,例如 Hadoop 任务 jar, JDBC 驱动, HBase coprocessor 等
meta_backups 执行 bin/metastore.sh backup 后的默认的备份目录
sample_cube 用于创建样例 Cube 和表的文件
spark 自带的 spark
tomcat 自带的 tomcat,用于启动 Kylin 服务
tool 用于执行一些命令行的 jar 文件
- 检查运行环境
Kylin 运行在 Hadoop 集群上,对各个组件的版本、访问权限及 CLASSPATH 等都有一定的要求,为了避免遇到各种环境问题,可以运行 $KYLIN_HOME/bin/check-env.sh
脚本来进行环境检测,如果环境存在任何的问题,脚本将打印出详细报错信息。如果没有报错信息,代表环境适合 Kylin 运行。
- 启动 Kylin
> $KYLIN_HOME/bin/kylin.sh start
Retrieving hadoop conf dir...
KYLIN_HOME is set to .../apache-kylin-2.6.3
......
A new Kylin instance is started by root. To stop it, run 'kylin.sh stop'
Check the log at $KYLIN_HOME/logs/kylin.log
Web UI is at http://<hostname>:7070/kylin
- 使用 Kylin
Kylin 启动后可以通过浏览器 [http://<hostname>:7070/kylin] 进行访问。
其中 <hostname> 为具体的机器名、IP 地址或域名,默认端口为 7070。
初始用户名和密码是 ADMIN/KYLIN
。
服务器启动后,可以通过查看 $KYLIN_HOME/logs/kylin.log
获得运行时日志。
- 停止 Kylin
> $KYLIN_HOME/bin/kylin.sh stop
Retrieving hadoop conf dir...
KYLIN_HOME is set to .../apache-kylin-2.6.3
Stopping Kylin: 25964
Stopping in progress. Will check after 2 secs again...
Kylin with pid 25964 has been stopped.
可以运行 ps -ef | grep kylin
来查看 Kylin 进程是否已停止。
HDFS 目录结构
Kylin 会在 HDFS 上生成文件,根目录是 /kylin/
然后会使用 Kylin 集群的元数据表名作为第二层目录名,默认为 kylin_metadata (可以在 conf/kylin.properties
中定制)
通常 /kylin/kylin_metadata
目录下会有这么几种子目录:
- cardinality -- Kylin 加载 Hive 表时,会启动一个 MR 任务来计算各个列的基数,输出结果会暂存在此目录。可以安全清除。
- coprocessor -- Kylin 用于存放 HBase coprocessor jar 的目录;请勿删除。
- kylin-job_id -- Cube 计算过程的数据存储目录,请勿删除。如需要清理,请遵循 storage cleanup guide
- resources -- Kylin 默认会将元数据存放在 HBase,但对于太大的文件(如字典或快照),会转存到 HDFS 的该目录下,请勿删除。如需要清理,请遵循 cleanup resources from metadata
- jdbc-resources -- 性质同上,只在使用 MySQL 做元数据存储时候出现。
集群安装
Kylin 实例是无状态的服务,运行时的状态信息存储在 HBase metastore 中。 出于负载均衡的考虑,可以启用多个共享一个 metastore 的 Kylin 实例,使得各个节点分担查询压力且互为备份,从而提高服务的可用性。
集群模式设置
如果需要将多个 Kylin 节点组成集群,请确保他们使用同一个 Hadoop 集群、HBase 集群。然后在每个节点的配置文件 $KYLIN_HOME/conf/kylin.properties
中执行下述操作:
- 配置相同的
kylin.metadata.url
值,即配置所有的 Kylin 节点使用同一个 HBase metastore。 - 配置 Kylin 节点列表
kylin.server.cluster-servers
,包括所有节点(包括当前节点),当事件变化时,接收变化的节点需要通知其他所有节点(包括当前节点)。 - 配置 Kylin 节点的运行模式
kylin.server.mode
,参数值可选all
,job
,query
中的一个,默认值为all
。-
job
模式代表该服务仅用于任务调度,不用于查询; -
query
模式代表该服务仅用于查询,不用于构建任务的调度; -
all
模式代表该服务同时用于任务调度和 SQL 查询。 - 注意:默认情况下只有一个实例用于构建任务的调度(即
kylin.server.mode
设置为all
或者job
模式)。
-
任务引擎高可用
从 v2.0 开始, Kylin 支持多个任务引擎一起运行,相比于默认单任务引擎的配置,多引擎可以保证任务构建的高可用。
使用多任务引擎,可以在多个 Kylin 节点上配置它的角色为 job
或 all
。为了避免它们之间产生竞争,需要启用分布式任务锁,请在 kylin.properties
里配置:
kylin.job.scheduler.default=2
kylin.job.lock=org.apache.kylin.storage.hbase.util.ZookeeperJobLock
将所有任务和查询节点的地址注册到 kylin.server.cluster-servers
。
安装负载均衡器
为了将查询请求发送给集群而非单个节点,可以部署一个负载均衡器,如 Nginx, F5 或 cloudlb 等,使得客户端和负载均衡器通信代替和特定的 Kylin 实例通信。
读写分离部署
为了达到更好的稳定性和最佳的性能,建议进行读写分离部署,将 Kylin 部署在两个集群上:
- 一个 Hadoop 集群用作 Cube 构建,这个集群可以是一个大的、与其它应用共享的集群;
- 一个 HBase 集群用作 SQL 查询,通常这个集群是专门为 Kylin 配置的,节点数不用像 Hadoop 集群那么多,HBase 的配置可以针对 Kylin Cube 只读的特性而进行优化。
这种部署策略是适合生产环境的最佳部署方案,关于如何进行读写分离部署,请参考 Deploy Apache Kylin with Standalone HBase Cluster