Kylin与CDH兼容性剖析
1. 概述
Apache Kylin™是一个开源的分布式分析引擎,提供Hadoop之上的SQL查询接口及多维分析(OLAP)能力以支持超大规模数据,最初由eBay Inc. 开发并贡献至开源社区。它能在亚秒内查询巨大的Hive表。
2. 内容
在集成Kylin到CDH Hadoop环境中时,发现新版本Kylin-2.2.0无法集成到CDH Hadoop。环境信息如下:
- Hadoop:CDH-5.4.2,Hadoop-2.6
- Hive:Hive-2.1.1
- HBase:CDH-5.4.2,HBase-1.0.0
上述版本,如果使用apache-kylin-2.2.0-bin-cdh57.tar.gz集成,Kylin系统可以正常启动,但是在预编译Cube,将编译的结果写入HBase时会出现对应的类找不到。去翻阅CDH-HBase-1.0.0的源代码确实没有对应的类。在Kylin的JIRA中也有记录该现象,大家可以翻阅问题单:[KYLIN-1089]
2.1 Patch
针对该问题可以编辑源代码后,重新编译。需要注意的是,如果你想将pom.xml文件中的属性“hbase-hadoop2.version”改为“1.0.0-cdh5.4.2”,在编译的时候会出现“org.apache.hadoop.hbase.regionserver.ScannerContext.java”找不到。确实,在CDH版的HBase-1.0.0版本中该类不存在,在CDH中最低支持5.5.4,对应的Patch代码如下所示:
From c0e053d16fc8fa36947e6181589505b722ea54dd Mon Sep 17 00:00:00 2001
From: shaofengshi <shaofengshi@apache.org>
Date: Fri, 11 Nov 2016 08:41:57 +0800
Subject: [PATCH] KYLIN-1089 support CDH 5.5/hbase1.0 ---
pom.xml | 12 ++++++------
.../v1/coprocessor/observer/AggregateRegionObserver.java | 4 ++--
.../hbase/cube/v1/filter/TestFuzzyRowFilterV2EndToEnd.java | 3 +--
3 files changed, 9 insertions(+), 10 deletions(-) diff --git a/pom.xml b/pom.xml
index 9b84f23..8352e97 100644
--- a/pom.xml
+++ b/pom.xml
@@ -46,19 +46,19 @@
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <!-- Hadoop versions -->
- <hadoop2.version>2.6.0-cdh5.7.0</hadoop2.version>
- <yarn.version>2.6.0-cdh5.7.0</yarn.version>
+ <hadoop2.version>2.6.0-cdh5.5.4</hadoop2.version>
+ <yarn.version>2.6.0-cdh5.5.4</yarn.version> <!-- Hive versions -->
- <hive.version>1.1.0-cdh5.7.0</hive.version>
- <hive-hcatalog.version>1.1.0-cdh5.7.0</hive-hcatalog.version>
+ <hive.version>1.1.0-cdh5.5.4</hive.version>
+ <hive-hcatalog.version>1.1.0-cdh5.5.4</hive-hcatalog.version> <!-- HBase versions -->
- <hbase-hadoop2.version>1.2.0-cdh5.7.0</hbase-hadoop2.version>
+ <hbase-hadoop2.version>1.0.0-cdh5.5.4</hbase-hadoop2.version>
<kafka.version>0.8.1</kafka.version> <!-- Hadoop deps, keep compatible with hadoop2.version -->
- <zookeeper.version>3.4.5-cdh5.7.0</zookeeper.version>
+ <zookeeper.version>3.4.5-cdh5.5.4</zookeeper.version>
<curator.version>2.7.1</curator.version>
<jackson.version>2.2.4</jackson.version>
<jsr305.version>3.0.1</jsr305.version>
diff --git a/storage-hbase/src/main/java/org/apache/kylin/storage/hbase/cube/v1/coprocessor/observer/AggregateRegionObserver.java b/storage-hbase/src/main/java/org/apache/kylin/storage/hbase/cube/v1/coprocessor/observer/AggregateRegionObserver.java
index 7e25e4c..7139ca7 100644
--- a/storage-hbase/src/main/java/org/apache/kylin/storage/hbase/cube/v1/coprocessor/observer/AggregateRegionObserver.java
+++ b/storage-hbase/src/main/java/org/apache/kylin/storage/hbase/cube/v1/coprocessor/observer/AggregateRegionObserver.java
@@ -26,7 +26,7 @@ import org.apache.hadoop.hbase.client.Scan;
import org.apache.hadoop.hbase.coprocessor.BaseRegionObserver;
import org.apache.hadoop.hbase.coprocessor.ObserverContext;
import org.apache.hadoop.hbase.coprocessor.RegionCoprocessorEnvironment;
-import org.apache.hadoop.hbase.regionserver.Region;
+import org.apache.hadoop.hbase.regionserver.HRegion;
import org.apache.hadoop.hbase.regionserver.RegionCoprocessorHost;
import org.apache.hadoop.hbase.regionserver.RegionScanner;
import org.apache.kylin.gridtable.StorageSideBehavior;
@@ -99,7 +99,7 @@ public class AggregateRegionObserver extends BaseRegionObserver {
// start/end region operation & sync on scanner is suggested by the
// javadoc of RegionScanner.nextRaw()
// FIXME: will the lock still work when a iterator is returned? is it safe? Is readonly attribute helping here? by mhb
- Region region = ctxt.getEnvironment().getRegion();
+ HRegion region = ctxt.getEnvironment().getRegion();
region.startRegionOperation();
try {
synchronized (innerScanner) {
diff --git a/storage-hbase/src/test/java/org/apache/kylin/storage/hbase/cube/v1/filter/TestFuzzyRowFilterV2EndToEnd.java b/storage-hbase/src/test/java/org/apache/kylin/storage/hbase/cube/v1/filter/TestFuzzyRowFilterV2EndToEnd.java
index 04e2e8b..4e87093 100644
--- a/storage-hbase/src/test/java/org/apache/kylin/storage/hbase/cube/v1/filter/TestFuzzyRowFilterV2EndToEnd.java
+++ b/storage-hbase/src/test/java/org/apache/kylin/storage/hbase/cube/v1/filter/TestFuzzyRowFilterV2EndToEnd.java
@@ -44,7 +44,6 @@ import org.apache.hadoop.hbase.filter.FilterList;
import org.apache.hadoop.hbase.filter.FilterList.Operator;
import org.apache.hadoop.hbase.regionserver.ConstantSizeRegionSplitPolicy;
import org.apache.hadoop.hbase.regionserver.HRegion;
-import org.apache.hadoop.hbase.regionserver.Region;
import org.apache.hadoop.hbase.regionserver.RegionScanner;
import org.apache.hadoop.hbase.util.Bytes;
import org.apache.hadoop.hbase.util.Pair;
@@ -225,7 +224,7 @@ public class TestFuzzyRowFilterV2EndToEnd {
scan.addFamily(cf.getBytes());
scan.setFilter(filter);
List<HRegion> regions = TEST_UTIL.getHBaseCluster().getRegions(table.getBytes());
- Region first = regions.get(0);
+ HRegion first = regions.get(0);
first.getScanner(scan);
RegionScanner scanner = first.getScanner(scan);
List<Cell> results = new ArrayList<Cell>();
--
2.7.2
安装上述Patch文件中的内容,修改Kylin源代码文件中的内容后,在apache-kylin-2.2.0-bin/build/script/目录中运行package.sh脚本进行编译打包。
2.2 升级HBase版本
由于apache-kylin-2.2.0使用的是HBase1.1.x版本进行编译的,如果不编译Kylin源代码,可以通过升级HBase版本到1.1.x以上。比如,将CDH版的hbase-1.0.0-cdh5.4.2升级到hbase-1.2.0-cdh5.7.0版本。具体升级步骤比较简单这里就不多赘述了。
3. 实战演练
在Kylin-2.2.0中,省略了很多繁琐的配置,许多配置项都改为默认的配置属性了。只需在$KYLIN_HOME/conf目录中,编辑kylin.properties文件,配置如下属性值:
kylin.rest.servers=0.0.0.0:
kylin.job.jar=/data/soft/new/kylin/lib/kylin-job-2.2..jar
kylin.coprocessor.local.jar=/data/soft/new/kylin/lib/kylin-coprocessor-2.2..jar
在$KYLIN_HOME/bin目录中运行sample.sh脚本,加载批处理Cube。会在Hive仓库中生成如下表:
kylin_account
kylin_cal_dt
kylin_category_groupings
kylin_country
kylin_sales
这里只是演练MapReduce批处理Cube,对于Spark和Kafka这类流式数据暂不操作。可以在$KYLIN_HOME/bin目录编辑kylin.sh脚本,将Kafka和Spark依赖注释掉。内容如下所示:
# ....
function retrieveDependency() {
#retrive $hive_dependency and $hbase_dependency
source ${dir}/find-hive-dependency.sh
source ${dir}/find-hbase-dependency.sh
source ${dir}/find-hadoop-conf-dir.sh
#source ${dir}/find-kafka-dependency.sh
#source ${dir}/find-spark-dependency.sh
#retrive $KYLIN_EXTRA_START_OPTS
if [ -f "${dir}/setenv.sh" ]; then
echo "WARNING: ${dir}/setenv.sh is deprecated and ignored, please remove it and use ${KYLIN_HOME}/conf/setenv.sh instead"
source ${dir}/setenv.sh
fi
# ...
然后,运行check-env.sh脚本检测Kylin系统所需要环境依赖,比如Hadoop、Hive、HBase环境变量配置。在启动Kylin系统之前,需要将HBase的hbase-site.xml文件复制到$KYLIN_HOME/conf目录中,并修改该文件的Zookeeper客户端连接地址。在Kylin系统中,读取hbase-site.xml配置文件中的Zookeeper客户端地址时不需要指定2181端口,比如:之前的客户端地址为“dn1:2181,dn2:2181,dn3:2181”,改为“dn1,dn2,dn3”即可。
最后,执行kylin.sh start启动Kylin系统,系统默认登录用户名和密码为ADMIN/KYLIN。
3.1 预编译Cube
在Model中,选择 kylin_sales_cube批处理Cube进行编译,然后在Monitor模块中查看Cube编译的进度,如下图所示:

如果在编译Cube的过程中可能会出现连接异常,如下所示:
account.jetbrains.com: failed on connection exception
出现这类问题,是Hadoop的historyserver服务没有启动,执行以下命令启动该进程服务:
mr-jobhistory-daemon.sh start historyserver
在编译成功后,在Model模块中,对应的Cube由Disable状态编译Ready状态,如下图所示:

从上图中可以知道,预编译之后的结果是存储在HBase中的,如表名为:KYLIN_Y8ASHHZ0GY
最后,在Insight模块中的SQL编辑区域,编写SQL代码查询对应的结果,如下图所示:

4.总结
在集成的过程当中需要注意版本的兼容性问题。在新版本的Kylin中引入的新特性Diagnosis,如果在预编译Cube中出现错误,在解决不了的情况下,可以使用Diagnosis功能,将编译产生的结果,通过Diagnosis导出发送给Kylin官方寻求解决方式。
5.结束语
这篇博客就和大家分享到这里,如果大家在研究学习的过程当中有什么问题,可以加群进行讨论或发送邮件给我,我会尽我所能为您解答,与君共勉。
Kylin与CDH兼容性剖析的更多相关文章
- CDH+Kylin三部曲之一:准备工作
欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...
- 入门大数据---安装ClouderaManager,CDH和Impala,Hue,oozie等服务
1.要求和支持的版本 (PS:我使用的环境,都用加粗标识了.) 1.1 支持的操作系统版本 操作系统 版本 RHEL/CentOS/OL with RHCK kernel 7.6, 7.5, 7.4, ...
- 基于CDH,部署Apache Kylin读写分离
一. 部署读写分离的契机 目前公司整体项目稳定运行在CDH5.6版本上,与其搭配的Hbase1.0.0无法正确运行Kylin,原因是Kylin只满足Hbase1.1.x+版本.解决方案如下 1. 升级 ...
- Kylin CDH安装
Kylin安装 从官网下载 apache-kylin-2.0.0-bin-cdh57.tar.gz 放到每台需要安装kylin 服务的机器 [hadoop@hadoop3 cdh5.12.0]$ su ...
- CDH+Kylin三部曲之二:部署和设置
欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...
- CDH+Kylin三部曲之三:Kylin官方demo
欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...
- Kylin——CDH
CDH:Cloudera‘s Distribution,including Apache Hadoop. Hadoop众多分支中的一种,可直接用于成产环境 CM:Cloudera Manager
- 全面剖析 <input> 标签 ------ HTML\HTML5
<input>标签因其形式多样.功能强大,当之无愧成为了WEB前端开发人员最钟爱的元素之一.下面就来对<input>做一个全面的剖析: 标签定义: <input> ...
- 《基于Apache Kylin构建大数据分析平台》
Kyligence联合创始人兼CEO,Apache Kylin项目管理委员会主席(PMC Chair)韩卿 武汉市云升科技发展有限公司董事长,<智慧城市-大数据.物联网和云计算之应用>作者 ...
随机推荐
- [Contiki系列论文之1]Contiki——为微传感器网络而生的轻量级的、灵活的操作系统
说明:本系列文章翻译自Contiki之父Adam Dunkels经典论文,版权归原作者全部. Contiki是由Adam Dunkels及其团队开发的系统,研读其论文是对深入理解Contiki系统的最 ...
- x86 处理器开机顺序
无论是千万行的linux ,还是百万行的uefi ,或者百十行的app, 它都有一个主线.应用程序是main() 函数里面全部函数运行完,程序结束.这里main() 做为程序的起点,uefi 能够觉得 ...
- ajax接收json
l 什么是json? l Json和xml比较 l Ajax如何使用JSON l Ajax接收json响应案例 什么是json? JSON (JavaScript Object Notation) 是 ...
- iOS pch文件创建使用,和info.plis文件路径改变,路径的设置
一 路径报错: 二 pch创建设置: 一:如果要更改Info.plist与Prefix.pch文件实际路径,也就是实际文件的位置(不是在工程中的组织路径),需要到Build Settings中修改对应 ...
- (转载)Eclipse将引用了第三方jar包的Java项目打包成可执行jar的两种方法
转载自:http://www.cnblogs.com/lanxuezaipiao/p/3291641.html 方案一:用Eclipse自带的Export功能 步骤1:准备主清单文件 "MA ...
- 深谈auto变量
1.c++中有一个关键字auto,c语言也有这么一个关键字,但是两者的意义大不相同. 2.c++中用auto定义的变量自动匹配赋值号右边的值的类型,具有自动匹配类型的作用,而c语言中auto只是声明一 ...
- Java中读取txt文件中中文字符时,出现乱码的解决办法
这是我写的一个Java课程作业时,遇到的问题. 问题描述: 我要实现的就是将txt文件中的内容按一定格式读取出来后,存放在相应的数组. 我刚开始运行时发现,英文可以实现,但是中文字符就是各种乱码. 最 ...
- C# DataGridView中DataGridViewComboBoxCell列,下拉框事件的处理【完美解决】
http://blog.csdn.net/a312100321/article/details/25195311 问题:DataGridView绑定数据源之后,有一列需要用下拉框DataGridVie ...
- 鸟哥的linux私房菜学习-(二)VMware虚拟机及linux系统安装过程
一.安装虚拟机 1.虚拟机常用版本及注册码地址:https://pan.baidu.com/s/1dFnkBrN#list/path=%2FSoftware%20Big%2FVMware%20Work ...
- vue 全局插槽 全局插座
场景: slot 能够让父组件内容插入到子组件中,但是子孙组件不能够使用slot直接插入内容.在弹窗的时候,全屏弹窗需要直接在组件最上层显示,如果父组件级别不够,弹出就可能不是全屏的. 知识点: 1: ...