Kylin修改默认hbase namespace命名空间default的解决方案

问题及背景:同一用户的三家公司的物理集群合并,合并后用dataspace+kerberos控制不同公司对集群资料的访问权限,三家公司分别使用独立的kerberos票据访问,特定的namespace,而生产环境部署的kylin-2.0/2.1只能保存cuboid到hbase 的 default namespace。

解决的过程及方案:
1、经多方查找发现, Kylin源码github项目,最新的master分支已经支持更改存储的hbase的默认namespace,但是官方对外发布的最新安装包才更新到Kylin-2.1版本,且最新源码并没有经过生产的验证,不敢冒然部署,于是想办法在现有的版本上重新编译源码、打包。
2、经多方搜索确认更改hbase namespace的commit是kylin-2846,于是查找相关实现的细节。

解决思路:
1、首先按照github上提供的修改方法更改了https://github.com/apache/kylin/commit/ffcbdb7f4288fa6011f018163bdce9602415cf10
中的五个类,重新编译打包,执行到convert cuboid Data to HFile这一步的时候抛出异常,找不到Hbase表

org.apache.hadoop.hbase.TableNotFoundException:ISW:KYLIN_F3KD3ZC1LU 
at org.apache.hadoop.hbase.client.HBaseAdmin.getTableDescriptor(HBaseAdmin.java:575)

而这时,我在hbase shell指定的namespace查看,已经生成了hbase表,为什么会找不到呢?继续查找原因
2、继续找Kylin-2846相关的内容,发现有人遇到同样的问题,地址:https://issues.apache.org/jira/browse/KYLIN-2846
原来github上给出的代码少了很关键的一步:

---.../main/java/org/apache/kylin/storage/hbase/steps/CubeHFileJob.java    | 2 +-1 file changed, 1 insertion(+), 1 deletion(-)diff --git a/storage-hbase/src/main/java/org/apache/kylin/storage/hbase/steps/CubeHFileJob.java b/storage-hbase/src/main/java/org/apache/kylin/storage/hbase/steps/CubeHFileJob.java
index 9f9b382..7a583ca 100644
--- a/storage-hbase/src/main/java/org/apache/kylin/storage/hbase/steps/CubeHFileJob.java
+++ b/storage-hbase/src/main/java/org/apache/kylin/storage/hbase/steps/CubeHFileJob.java
@@ -92,7 +92,7 @@ public class CubeHFileJob extends AbstractHadoopJob {attachCubeMetadata(cube, job.getConfiguration());Configuration hbaseConf = HBaseConfiguration.create(getConf());
-            HTable htable = new HTable(hbaseConf, getOptionValue(OPTION_HTABLE_NAME).toUpperCase());
+            HTable htable = new HTable(hbaseConf, getOptionValue(OPTION_HTABLE_NAME));// Automatic config !HFileOutputFormat.configureIncrementalLoad(job, htable);
-- 
1.9.1
具体的修改步骤如下:From 004e1bcb983442a1a2c69f7d1d6c09dc29d4301e Mon Sep 17 00:00:00 2001
From: Liu Shaohui <liushaohui@xiaomi.com>
Date: Tue, 5 Sep 2017 15:50:29 +0800
Subject: [PATCH] Add a config of hbase namespace for cube storage---.../src/main/java/org/apache/kylin/common/KylinConfigBase.java        | 4 ++++core-common/src/main/resources/kylin-defaults.properties              | 3 +++core-cube/src/main/java/org/apache/kylin/cube/CubeManager.java        | 2 ++.../main/java/org/apache/kylin/storage/hbase/steps/BulkLoadJob.java   | 2 +-.../main/java/org/apache/kylin/storage/hbase/steps/CubeHFileJob.java  | 2 +-5 files changed, 11 insertions(+), 2 deletions(-)diff --git a/core-common/src/main/java/org/apache/kylin/common/KylinConfigBase.java b/core-common/src/main/java/org/apache/kylin/common/KylinConfigBase.java
index 749b515..3f53023 100644
--- a/core-common/src/main/java/org/apache/kylin/common/KylinConfigBase.java
+++ b/core-common/src/main/java/org/apache/kylin/common/KylinConfigBase.java
@@ -712,6 +712,10 @@ abstract public class KylinConfigBase implements Serializable {return StorageURL.valueOf(url);}+    public String getHBaseStorageNameSpace() {
+        return getOptional("kylin.storage.hbase.namespace", "default");
+    }
+public String getHBaseClusterFs() {return getOptional("kylin.storage.hbase.cluster-fs", "");}
diff --git a/core-common/src/main/resources/kylin-defaults.properties b/core-common/src/main/resources/kylin-defaults.properties
index a3277ce..34fb5a0 100644
--- a/core-common/src/main/resources/kylin-defaults.properties
+++ b/core-common/src/main/resources/kylin-defaults.properties
@@ -65,6 +65,9 @@ kylin.source.hive.redistribute-flat-table=true# The storage for final cube file in hbasekylin.storage.url=hbase+# The namespace for hbase storage
+kylin.storage.hbase.namespace=default
+# Compression codec for htable, valid value [none, snappy, lzo, gzip, lz4]kylin.storage.hbase.compression-codec=nonediff --git a/core-cube/src/main/java/org/apache/kylin/cube/CubeManager.java b/core-cube/src/main/java/org/apache/kylin/cube/CubeManager.java
index 043993c..484b977 100644
--- a/core-cube/src/main/java/org/apache/kylin/cube/CubeManager.java
+++ b/core-cube/src/main/java/org/apache/kylin/cube/CubeManager.java
@@ -684,11 +684,13 @@ public class CubeManager implements IRealizationProvider {}private String generateStorageLocation() {
+        String namespace = config.getHBaseStorageNameSpace();String namePrefix = IRealizationConstants.CubeHbaseStorageLocationPrefix;String tableName = "";Random ran = new Random();do {StringBuffer sb = new StringBuffer();
+            sb.append(namespace).append(":");sb.append(namePrefix);for (int i = 0; i < HBASE_TABLE_LENGTH; i++) {sb.append(ALPHA_NUM.charAt(ran.nextInt(ALPHA_NUM.length())));
diff --git a/storage-hbase/src/main/java/org/apache/kylin/storage/hbase/steps/BulkLoadJob.java b/storage-hbase/src/main/java/org/apache/kylin/storage/hbase/steps/BulkLoadJob.java
index 30616c5..d1caccb 100644
--- a/storage-hbase/src/main/java/org/apache/kylin/storage/hbase/steps/BulkLoadJob.java
+++ b/storage-hbase/src/main/java/org/apache/kylin/storage/hbase/steps/BulkLoadJob.java
@@ -47,7 +47,7 @@ public class BulkLoadJob extends AbstractHadoopJob {options.addOption(OPTION_CUBE_NAME);parseOptions(options, args);-        String tableName = getOptionValue(OPTION_HTABLE_NAME).toUpperCase();
+        String tableName = getOptionValue(OPTION_HTABLE_NAME);// e.g// /tmp/kylin-3f150b00-3332-41ca-9d3d-652f67f044d7/test_kylin_cube_with_slr_ready_2_segments/hfile/// end with "/"
diff --git a/storage-hbase/src/main/java/org/apache/kylin/storage/hbase/steps/CubeHFileJob.java b/storage-hbase/src/main/java/org/apache/kylin/storage/hbase/steps/CubeHFileJob.java
index 1a624c4..9f9b382 100644
--- a/storage-hbase/src/main/java/org/apache/kylin/storage/hbase/steps/CubeHFileJob.java
+++ b/storage-hbase/src/main/java/org/apache/kylin/storage/hbase/steps/CubeHFileJob.java
@@ -68,7 +68,7 @@ public class CubeHFileJob extends AbstractHadoopJob {Path partitionFilePath = new Path(getOptionValue(OPTION_PARTITION_FILE_PATH));Path output = new Path(getOptionValue(OPTION_OUTPUT_PATH));
-            String cubeName = getOptionValue(OPTION_CUBE_NAME).toUpperCase();
+            String cubeName = getOptionValue(OPTION_CUBE_NAME);CubeManager cubeMgr = CubeManager.getInstance(KylinConfig.getInstanceFromEnv());-- 
1.9.1
2、、、From 677400ee7b4cf5be0ddc9b595d80e02a0ba87c12 Mon Sep 17 00:00:00 2001
From: Liu Shaohui <liushaohui@xiaomi.com>
Date: Fri, 15 Sep 2017 14:34:18 +0800
Subject: [PATCH] Addium for KYLIN-2846---.../main/java/org/apache/kylin/storage/hbase/steps/CubeHFileJob.java    | 2 +-1 file changed, 1 insertion(+), 1 deletion(-)diff --git a/storage-hbase/src/main/java/org/apache/kylin/storage/hbase/steps/CubeHFileJob.java b/storage-hbase/src/main/java/org/apache/kylin/storage/hbase/steps/CubeHFileJob.java
index 9f9b382..7a583ca 100644
--- a/storage-hbase/src/main/java/org/apache/kylin/storage/hbase/steps/CubeHFileJob.java
+++ b/storage-hbase/src/main/java/org/apache/kylin/storage/hbase/steps/CubeHFileJob.java
@@ -92,7 +92,7 @@ public class CubeHFileJob extends AbstractHadoopJob {attachCubeMetadata(cube, job.getConfiguration());Configuration hbaseConf = HBaseConfiguration.create(getConf());
-            HTable htable = new HTable(hbaseConf, getOptionValue(OPTION_HTABLE_NAME).toUpperCase());
+            HTable htable = new HTable(hbaseConf, getOptionValue(OPTION_HTABLE_NAME));// Automatic config !HFileOutputFormat.configureIncrementalLoad(job, htable);
-- 
1.9.1
3、clean htablediff --git a/server-base/src/main/java/org/apache/kylin/rest/job/StorageCleanJobHbaseUtil.java b/server-base/src/main/java/org/apache/kylin/rest/job/StorageCleanJobHbaseUtil.java
index 3728ea1..2d95542 100644
--- a/server-base/src/main/java/org/apache/kylin/rest/job/StorageCleanJobHbaseUtil.java
+++ b/server-base/src/main/java/org/apache/kylin/rest/job/StorageCleanJobHbaseUtil.java
@@ -46,15 +46,28 @@ public class StorageCleanJobHbaseUtil {public static void cleanUnusedHBaseTables(boolean delete, int deleteTimeout) throws IOException {Configuration conf = HBaseConfiguration.create();
-        CubeManager cubeMgr = CubeManager.getInstance(KylinConfig.getInstanceFromEnv());
+        KylinConfig config = KylinConfig.getInstanceFromEnv();
+        CubeManager cubeMgr = CubeManager.getInstance(config);// get all kylin hbase tablestry (HBaseAdmin hbaseAdmin = new HBaseAdmin(conf)) {
-            String tableNamePrefix = IRealizationConstants.SharedHbaseStorageLocationPrefix;
+            String namespace = config.getHBaseStorageNameSpace();
+            StringBuffer sb = new StringBuffer();
+            String tableNamePrefix = null;
+            if(namespace.equals("default") || namespace.equals("")){
+                tableNamePrefix = IRealizationConstants.SharedHbaseStorageLocationPrefix;
+            }else{
+                sb.append(config.getHBaseStorageNameSpace()).append(":");
+                sb.append(IRealizationConstants.SharedHbaseStorageLocationPrefix);
+                tableNamePrefix = sb.toString();
+            }
+HTableDescriptor[] tableDescriptors = hbaseAdmin.listTables(tableNamePrefix + ".*");
+List<String> allTablesNeedToBeDropped = new ArrayList<String>();for (HTableDescriptor desc : tableDescriptors) {
+String host = desc.getValue(IRealizationConstants.HTableTag);
-                if (KylinConfig.getInstanceFromEnv().getMetadataUrlPrefix().equalsIgnoreCase(host)) {
+                if (config.getMetadataUrlPrefix().equalsIgnoreCase(host)) {//only take care htables that belongs to self, and created more than 2 daysallTablesNeedToBeDropped.add(desc.getTableName().getNameAsString());}

修改完后,core-common, core-cure, storage-hbase三个目录重新打jar包,覆盖原Kylin安装目录KYLIN_HOME/tomcat/webapps/kylin.war下对应的jar包,重启Kylin,问题解决。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/570757.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

pip download timeout 下载慢,超时解决方法

更换国内的pypi源&#xff1a; 如&#xff1a; pip install -i https://pypi.tuna.tsinghua.edu.cn/simple –upgrade tensorflow-gpu

test'

message.info(Click on left button.);直接弹出提示信息console.log(click left button, e); 后台输出区别 import { Pagination } from antd;function onShowSizeChange(current, pageSize) {console.log(current, pageSize); }ReactDOM.render(<Pagination showSizeChang…

Error:-81024 LR_VUG:The 'QTWeb' type is not supported on win32 platforms

在LR的bin目录下&#xff0c;选择Wlrun.exe文件&#xff0c;右键单击&#xff0c;选择属性&#xff1b;在兼容性里面把兼容性模式改为Windows XP (Service Pack 3),应用保存&#xff1b;然后再关闭controller&#xff0c;重新打开运行就可以了&#xff1b;

VMware仅主机模式访问外网

原文转载至&#xff1a;https://blog.csdn.net/eussi/article/details/79054622 保证VMware Network Adapter VMnet1是启用状态 将可以连接外网的连接共享属性设置成如下图所示 将VMware Network Adapter VMnet1的IP地址设置成与本机IP不同的网段即可 VMware虚拟网络编辑器VMne…

Spark学习之RDD的概念

RDD又叫弹性分布式数据集&#xff0c;是Spark数据的基础单元&#xff0c;Spark编程是围绕着在RDD上创建和执行操作来进行的。它们是跨集群进行分区的不可变集合&#xff08;immutable collection&#xff09;&#xff0c;如果某个分区丢失&#xff0c;这些分区可以重建&#xf…

我的ELK搭建笔记(阿里云上部署)

文章转载&#xff1a;http://www.jianshu.com/p/797073c1913f 仅用作个人学习&#xff0c;收藏 我的 ELK 搭建笔记&#xff08;基于阿里云&#xff09; “不是最好的&#xff0c;但一定是有良心的操作记录。”目录一览 0 重不重要都得有的开头 1 安装配置 1.1 CentOS 7…

HBase regions分布不均匀的解决

1、先确定master页面是否还有region in transition,如果有并且长时间未变化&#xff0c;可以考虑重启master&#xff0c;重新触发容灾。 2、region都加载后进入hbase shell balance_swith ture 开启balancer balancer 手动触发balance 即可。

莫队分块

今天兔哥讲了一波莫队&#xff0c;比较有趣&#xff0c;先加一个链接,这是她的教程 rabbithu.cnblogs.com 这里就不详细说了&#xff0c;其实就是两个指针来优化的暴力。一开始排序函数有问题&#xff0c;没用上莫队的核心思想&#xff1a;把查询区间先排序&#xff0c;第一关键…

Linux Kettle 闪退问题解决方案

我们在搭建kettle平台时&#xff0c;往往会搭建两种平台&#xff0c;一种win、一种是linux。在windows上进行kettle ETL测试工作&#xff0c;测试成功之后&#xff0c;会发布到linux服务器上&#xff0c;这就出现了一下问题——linux执行ktr文件&#xff0c;界面闪退&#xff0…

django-总体

纲领 建立项目时&#xff0c;首先需要以规范的方式对项目进行描述&#xff0c;再建立虚拟环境&#xff0c;以便在其中创建项目。 创建项目后&#xff0c;创建app&#xff0c;并在项目的settings.py中“安装”该app 随后&#xff0c;就是根据项目描述编写urls.py、view层、model…

Python的元组被设计成不可变的影响

实际上元组是跟列表非常相近的另一种容器类型&#xff0c;元组和列表看起来不同的一点是元组用的是圆括号而列表用的是方括号。而功能上&#xff0c;元组和列表相比有一个很重要的区别&#xff0c;元组是一种不可变类型。正是因为这个原因元组能做一些列表不能做的事情……用做…

JS将数字转换为中文

<!DOCTYPE html> <html> <head><meta charset"UTF-8"><title>JS将数字转换为中文</title> </head> <body> <script>// 定义转换函数function transform(tranvalue){try{var i1;var dw2 new Array("&quo…

IE上ORACLE OEM 证书错误 , 导航阻止,无法”继续浏览此网站”

文章转载自&#xff1a;http://blog.51cto.com/cswggod/1193266 仅用于个人学习&#xff0c;知识收藏 本文是我安装ORACLE11g后客户端IE访问不了是出现的&#xff0c;无奈下找OTN上help&#xff0c; 结果很lucky的被解脱了。 网站是&#xff1a;https://forums.oracle.com/for…

testng使用DataProvider+Excel实现DDT

DDT&#xff0c;即数据驱动测试 Data Driver Test&#xff0c;我曾经记录了一篇关于python的DDT框架&#xff08;ExcelDDT数据驱动实例&#xff09;&#xff0c;那么java中的DDT是怎么样的呢&#xff1f;在java中&#xff0c;可以用testng的DataProvider和Excel实现。 首先建一…

Linux安装Oracle12C 过程及遇到的问题

一、环境介绍 1、系统环境&#xff1a;CentOS7.1 Oracle版本&#xff1a;12C 12.1.0 二、安装过程 1、安装过程文档见百度云上的文档 链接&#xff1a;https://pan.baidu.com/s/1nvd07NF 密码&#xff1a;mey9 2、安装完后登录数据库 su oracle source ~/.bash_profiel…

sqlserver服务启动后停止,传递给数据库 'master' 中的日志扫描操作的日志扫描号无效...

电脑异常重启&#xff0c;导致SqlServer服务启动后&#xff0c;自动停止&#xff0c;在【计算机管理】-【事件查看器】-【windows日志】中进行查看系统错误日志&#xff0c;在【应用程序】下发现可能的错误信息有以下两条&#xff1a; 1、错误&#xff1a;传递给数据库 master …

云监控 Ganglia 安装步骤 (含python module)

文章转载自&#xff1a;https://my.oschina.net/duangr/blog/181585 &#xff0c;仅用于个人学习、收藏&#xff0c;转载请注明原作者地址。 前言 最近在研究云监控的相关工具,感觉ganglia颇有亮点,能从一个集群整体的角度来展现数据. 但是安装过程稍过复杂,相关依赖稍多…

container-with-most-water(最大蓄水问题)

题目描述&#xff1a; Given n non-negative integers a1 , a2 , ..., an , where each represents a point at coordinate (i, ai ). n vertical lines are drawn such that the two endpoints of line i is at (i, ai ) and (i, 0). Find two lines, which together with x-a…

使用sqoop从Oracle或mysql抽取数据到HDFS遇到的报错及解决

一、参考文档&#xff1a; 1、https://www.rittmanmead.com/blog/2014/03/using-sqoop-for-loading-oracle-data-into-hadoop-on-the-bigdatalite-vm/ 2、http://www.cnblogs.com/bjtu-leefon/archive/2013/06/28/3160549.html 二、使用脚本 ----sqoop import zdsd 使用注…

POJ1426-Find The Multiple(DFS)

给出一个整数n&#xff0c;(1 < n < 200)。求出任意一个它的倍数m&#xff0c;要求m必须只由十进制的0或1组成。 #include <iostream>using namespace std;int N,flag;void DFS(int m,long long n) {if(m19) return;if(flag) return;if(n%N0){flag1;cout<<n&…