From 633ec0eec8f8e217ea55276c8e9dd866422f6553 Mon Sep 17 00:00:00 2001 From: John Zhao Date: Fri, 8 Apr 2016 17:36:00 -0700 Subject: [PATCH] KYLIN-1577 make kylin metadata store support multiple replication --- build/conf/kylin.properties | 3 ++- .../org/apache/kylin/common/KylinConfigBase.java | 8 ++++++++ .../kylin/storage/hbase/HBaseResourceStore.java | 21 +++++++++++++-------- 3 files changed, 23 insertions(+), 9 deletions(-) diff --git a/build/conf/kylin.properties b/build/conf/kylin.properties index 68678cc..59ccef69 100644 --- a/build/conf/kylin.properties +++ b/build/conf/kylin.properties @@ -24,6 +24,7 @@ kylin.rest.servers=localhost:7070 # The metadata store in hbase kylin.metadata.url=kylin_metadata@hbase +kylin.metadata.replication=2 # The storage for final cube file in hbase kylin.storage.url=hbase @@ -166,4 +167,4 @@ deploy.env=QA ###########################deprecated configs####################### kylin.sandbox=true - kylin.web.hive.limit=20 \ No newline at end of file + kylin.web.hive.limit=20 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 38abc9a..873590d 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 @@ -127,6 +127,14 @@ public class KylinConfigBase implements Serializable { return getOptional("kylin.metadata.url"); } + public int getMetaDataReplication() { + try { + return Integer.parseInt(getOptional("kylin.metadata.replication", "1")); + } catch (NumberFormatException e) { + return 1; + } + } + public void setMetadataUrl(String metadataUrl) { setProperty("kylin.metadata.url", metadataUrl); } diff --git a/storage-hbase/src/main/java/org/apache/kylin/storage/hbase/HBaseResourceStore.java b/storage-hbase/src/main/java/org/apache/kylin/storage/hbase/HBaseResourceStore.java index 9420d41..914c8e1 100644 --- a/storage-hbase/src/main/java/org/apache/kylin/storage/hbase/HBaseResourceStore.java +++ b/storage-hbase/src/main/java/org/apache/kylin/storage/hbase/HBaseResourceStore.java @@ -33,15 +33,9 @@ import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.FSDataOutputStream; import org.apache.hadoop.fs.FileSystem; import org.apache.hadoop.fs.Path; +import org.apache.hadoop.hbase.HTableDescriptor; import org.apache.hadoop.hbase.TableName; -import org.apache.hadoop.hbase.client.Delete; -import org.apache.hadoop.hbase.client.Get; -import org.apache.hadoop.hbase.client.Connection; -import org.apache.hadoop.hbase.client.Table; -import org.apache.hadoop.hbase.client.Put; -import org.apache.hadoop.hbase.client.Result; -import org.apache.hadoop.hbase.client.ResultScanner; -import org.apache.hadoop.hbase.client.Scan; +import org.apache.hadoop.hbase.client.*; import org.apache.hadoop.hbase.filter.CompareFilter; import org.apache.hadoop.hbase.filter.FilterList; import org.apache.hadoop.hbase.filter.KeyOnlyFilter; @@ -99,6 +93,17 @@ public class HBaseResourceStore extends ResourceStore { createHTableIfNeeded(getAllInOneTableName()); + int replication = kylinConfig.getMetaDataReplication(); + Admin admin = getConnection().getAdmin(); + TableName metaTbName = TableName.valueOf(getAllInOneTableName()); + HTableDescriptor tableDescriptor = getConnection().getAdmin().getTableDescriptor(metaTbName); + if (tableDescriptor.getRegionReplication() != replication) { + tableDescriptor.setRegionReplication(replication); + admin.disableTable(metaTbName); + admin.modifyTable(metaTbName, tableDescriptor); + admin.enableTable(metaTbName); + } + // tableNameMap = new LinkedHashMap(); // for (Entry entry : TABLE_SUFFIX_MAP.entrySet()) { // String pathPrefix = entry.getKey(); -- 2.6.4 (Apple Git-63)