Repository: kylin
Updated Branches:
  refs/heads/2.0-rc 0de917283 -> 6ec2adbbe


KYLIN-1239 attribute each htable with team contact and owner name


Project: http://git-wip-us.apache.org/repos/asf/kylin/repo
Commit: http://git-wip-us.apache.org/repos/asf/kylin/commit/6ec2adbb
Tree: http://git-wip-us.apache.org/repos/asf/kylin/tree/6ec2adbb
Diff: http://git-wip-us.apache.org/repos/asf/kylin/diff/6ec2adbb

Branch: refs/heads/2.0-rc
Commit: 6ec2adbbe3f26fb78c18b26f61a9c7f587ed34c0
Parents: 0de9172
Author: honma <ho...@ebay.com>
Authored: Thu Dec 17 11:31:55 2015 +0800
Committer: honma <ho...@ebay.com>
Committed: Tue Dec 22 16:10:36 2015 +0800

----------------------------------------------------------------------
 build/conf/kylin.properties                      |  5 +++++
 .../org/apache/kylin/common/KylinConfig.java     |  6 ++++++
 .../realization/IRealizationConstants.java       |  5 ++++-
 .../apache/kylin/engine/spark/SparkCubing.java   |  3 +--
 .../test_case_data/localmeta/kylin.properties    |  5 +++++
 examples/test_case_data/sandbox/kylin.properties |  5 +++++
 .../storage/hbase/steps/CreateHTableJob.java     |  4 +---
 .../storage/hbase/steps/CubeHTableUtil.java      | 19 ++++++++++++++++---
 .../hbase/steps/HBaseStreamingOutput.java        |  2 +-
 .../kylin/storage/hbase/util/CleanHtableCLI.java |  6 +++++-
 10 files changed, 49 insertions(+), 11 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/kylin/blob/6ec2adbb/build/conf/kylin.properties
----------------------------------------------------------------------
diff --git a/build/conf/kylin.properties b/build/conf/kylin.properties
index 2c34e92..f2170bd 100644
--- a/build/conf/kylin.properties
+++ b/build/conf/kylin.properties
@@ -17,6 +17,11 @@
 
 ## Config for Kylin Engine ##
 
+
+# optional information for the owner of kylin platform, it can be your team's 
email
+# currently it will be attached to each kylin's htable attribute
+kylin.owner=who...@kylin.apache.org
+
 # List of web servers in use, this enables one web server instance to sync up 
with other servers.
 kylin.rest.servers=localhost:7070
 

http://git-wip-us.apache.org/repos/asf/kylin/blob/6ec2adbb/core-common/src/main/java/org/apache/kylin/common/KylinConfig.java
----------------------------------------------------------------------
diff --git a/core-common/src/main/java/org/apache/kylin/common/KylinConfig.java 
b/core-common/src/main/java/org/apache/kylin/common/KylinConfig.java
index eb76534..c65ade4 100644
--- a/core-common/src/main/java/org/apache/kylin/common/KylinConfig.java
+++ b/core-common/src/main/java/org/apache/kylin/common/KylinConfig.java
@@ -55,6 +55,8 @@ public class KylinConfig implements Serializable {
      * NOTE: These key constants should be private or even better be removed.
      *       All external access should go through public methods.
      */
+    public static final String KYLIN_OWNER = "kylin.owner";
+
     public static final String KYLIN_STORAGE_URL = "kylin.storage.url";
 
     public static final String KYLIN_METADATA_URL = "kylin.metadata.url";
@@ -706,6 +708,10 @@ public class KylinConfig implements Serializable {
         return this.getOptional(HIVE_DATABASE_FOR_INTERMEDIATE_TABLE, 
"default");
     }
 
+    public String getKylinOwner() {
+        return this.getOptional(KYLIN_OWNER, "");
+    }
+
     public void setRunAsRemoteCommand(String v) {
         properties.setProperty(KYLIN_JOB_RUN_AS_REMOTE_CMD, v);
     }

http://git-wip-us.apache.org/repos/asf/kylin/blob/6ec2adbb/core-metadata/src/main/java/org/apache/kylin/metadata/realization/IRealizationConstants.java
----------------------------------------------------------------------
diff --git 
a/core-metadata/src/main/java/org/apache/kylin/metadata/realization/IRealizationConstants.java
 
b/core-metadata/src/main/java/org/apache/kylin/metadata/realization/IRealizationConstants.java
index 7cbcdf8..138a209 100644
--- 
a/core-metadata/src/main/java/org/apache/kylin/metadata/realization/IRealizationConstants.java
+++ 
b/core-metadata/src/main/java/org/apache/kylin/metadata/realization/IRealizationConstants.java
@@ -31,7 +31,10 @@ public class IRealizationConstants {
      * which kylin server(represented by its kylin_metadata prefix) owns this 
htable
      */
     public final static String HTableTag = "KYLIN_HOST";
-
+    
+    public final static String HTableOwner = "OWNER";
+    
+    public final static String HTableUser = "USER";
 
     public final static String HTableCreationTime = "CREATION_TIME";
 

http://git-wip-us.apache.org/repos/asf/kylin/blob/6ec2adbb/engine-spark/src/main/java/org/apache/kylin/engine/spark/SparkCubing.java
----------------------------------------------------------------------
diff --git 
a/engine-spark/src/main/java/org/apache/kylin/engine/spark/SparkCubing.java 
b/engine-spark/src/main/java/org/apache/kylin/engine/spark/SparkCubing.java
index 01d97fd..9a2610c 100644
--- a/engine-spark/src/main/java/org/apache/kylin/engine/spark/SparkCubing.java
+++ b/engine-spark/src/main/java/org/apache/kylin/engine/spark/SparkCubing.java
@@ -452,12 +452,11 @@ public class SparkCubing extends AbstractApplication {
     private byte[][] createHTable(String cubeName, String segmentId, Map<Long, 
HyperLogLogPlusCounter> samplingResult) throws Exception {
         final KylinConfig kylinConfig = KylinConfig.getInstanceFromEnv();
         final CubeInstance cubeInstance = 
CubeManager.getInstance(kylinConfig).getCube(cubeName);
-        final CubeDesc cubeDesc = cubeInstance.getDescriptor();
         final CubeSegment cubeSegment = cubeInstance.getSegmentById(segmentId);
         final Map<Long, Long> cubeSizeMap = 
CreateHTableJob.getCubeRowCountMapFromCuboidStatistics(samplingResult, 100);
         System.out.println("cube size estimation:" + cubeSizeMap);
         final byte[][] splitKeys = 
CreateHTableJob.getSplitsFromCuboidStatistics(cubeSizeMap, kylinConfig, 
cubeSegment);
-        CubeHTableUtil.createHTable(cubeDesc, 
cubeSegment.getStorageLocationIdentifier(), splitKeys);
+        CubeHTableUtil.createHTable(cubeSegment, splitKeys);
         System.out.println(cubeSegment.getStorageLocationIdentifier() + " 
table created");
         return splitKeys;
     }

http://git-wip-us.apache.org/repos/asf/kylin/blob/6ec2adbb/examples/test_case_data/localmeta/kylin.properties
----------------------------------------------------------------------
diff --git a/examples/test_case_data/localmeta/kylin.properties 
b/examples/test_case_data/localmeta/kylin.properties
index 08b351a..84c53bb 100644
--- a/examples/test_case_data/localmeta/kylin.properties
+++ b/examples/test_case_data/localmeta/kylin.properties
@@ -17,6 +17,11 @@
 
 ## Config for Kylin Engine ##
 
+
+# optional information for the owner of kylin platform, it can be your team's 
email
+# currently it will be attached to each kylin's htable attribute
+kylin.owner=who...@kylin.apache.org
+
 # List of web servers in use, this enables one web server instance to sync up 
with other servers.
 #kylin.rest.servers=localhost:7070
 

http://git-wip-us.apache.org/repos/asf/kylin/blob/6ec2adbb/examples/test_case_data/sandbox/kylin.properties
----------------------------------------------------------------------
diff --git a/examples/test_case_data/sandbox/kylin.properties 
b/examples/test_case_data/sandbox/kylin.properties
index d5446b5..4ca8c2d 100644
--- a/examples/test_case_data/sandbox/kylin.properties
+++ b/examples/test_case_data/sandbox/kylin.properties
@@ -17,6 +17,10 @@
 
 ## Config for Kylin Engine ##
 
+# optional information for the owner of kylin platform, it can be your team's 
email
+# currently it will be attached to each kylin's htable attribute
+kylin.owner=who...@kylin.apache.org
+
 # List of web servers in use, this enables one web server instance to sync up 
with other servers.
 kylin.rest.servers=localhost:7070
 
@@ -26,6 +30,7 @@ kylin.metadata.url=kylin_metadata@hbase
 # The storage for final cube file in hbase
 kylin.storage.url=hbase
 
+
 # Temp folder in hdfs, make sure user has the right access to the hdfs 
directory
 kylin.hdfs.working.dir=/kylin
 

http://git-wip-us.apache.org/repos/asf/kylin/blob/6ec2adbb/storage-hbase/src/main/java/org/apache/kylin/storage/hbase/steps/CreateHTableJob.java
----------------------------------------------------------------------
diff --git 
a/storage-hbase/src/main/java/org/apache/kylin/storage/hbase/steps/CreateHTableJob.java
 
b/storage-hbase/src/main/java/org/apache/kylin/storage/hbase/steps/CreateHTableJob.java
index 62554b2..dfa5e90 100644
--- 
a/storage-hbase/src/main/java/org/apache/kylin/storage/hbase/steps/CreateHTableJob.java
+++ 
b/storage-hbase/src/main/java/org/apache/kylin/storage/hbase/steps/CreateHTableJob.java
@@ -91,7 +91,6 @@ public class CreateHTableJob extends AbstractHadoopJob {
         options.addOption(OPTION_CUBE_NAME);
         options.addOption(OPTION_SEGMENT_NAME);
         options.addOption(OPTION_PARTITION_FILE_PATH);
-        options.addOption(OPTION_HTABLE_NAME);
         options.addOption(OPTION_STATISTICS_ENABLED);
         parseOptions(options, args);
 
@@ -106,7 +105,6 @@ public class CreateHTableJob extends AbstractHadoopJob {
         segmentName = getOptionValue(OPTION_SEGMENT_NAME);
         CubeSegment cubeSegment = cube.getSegment(segmentName, 
SegmentStatusEnum.NEW);
 
-        String tableName = getOptionValue(OPTION_HTABLE_NAME).toUpperCase();
         Configuration conf = HBaseConnection.getCurrentHBaseConfiguration();
 
         try {
@@ -118,7 +116,7 @@ public class CreateHTableJob extends AbstractHadoopJob {
                 splitKeys = getSplits(conf, partitionFilePath);
             }
 
-            CubeHTableUtil.createHTable(cubeDesc, tableName, splitKeys);
+            CubeHTableUtil.createHTable(cubeSegment, splitKeys);
             return 0;
         } catch (Exception e) {
             printUsage(options);

http://git-wip-us.apache.org/repos/asf/kylin/blob/6ec2adbb/storage-hbase/src/main/java/org/apache/kylin/storage/hbase/steps/CubeHTableUtil.java
----------------------------------------------------------------------
diff --git 
a/storage-hbase/src/main/java/org/apache/kylin/storage/hbase/steps/CubeHTableUtil.java
 
b/storage-hbase/src/main/java/org/apache/kylin/storage/hbase/steps/CubeHTableUtil.java
index cdc259b..61bea36 100644
--- 
a/storage-hbase/src/main/java/org/apache/kylin/storage/hbase/steps/CubeHTableUtil.java
+++ 
b/storage-hbase/src/main/java/org/apache/kylin/storage/hbase/steps/CubeHTableUtil.java
@@ -2,6 +2,7 @@ package org.apache.kylin.storage.hbase.steps;
 
 import java.io.IOException;
 
+import org.apache.commons.lang.StringUtils;
 import org.apache.hadoop.conf.Configuration;
 import org.apache.hadoop.hbase.HBaseConfiguration;
 import org.apache.hadoop.hbase.HColumnDescriptor;
@@ -10,10 +11,11 @@ import org.apache.hadoop.hbase.TableName;
 import org.apache.hadoop.hbase.client.HBaseAdmin;
 import org.apache.hadoop.hbase.io.compress.Compression.Algorithm;
 import org.apache.hadoop.hbase.io.encoding.DataBlockEncoding;
-import org.apache.hadoop.hbase.regionserver.ConstantSizeRegionSplitPolicy;
 import org.apache.hadoop.hbase.regionserver.DisabledRegionSplitPolicy;
 import org.apache.hadoop.hbase.security.User;
 import org.apache.kylin.common.KylinConfig;
+import org.apache.kylin.cube.CubeInstance;
+import org.apache.kylin.cube.CubeSegment;
 import org.apache.kylin.cube.model.CubeDesc;
 import org.apache.kylin.cube.model.HBaseColumnFamilyDesc;
 import org.apache.kylin.metadata.realization.IRealizationConstants;
@@ -29,15 +31,26 @@ public class CubeHTableUtil {
 
     private static final Logger logger = 
LoggerFactory.getLogger(CubeHTableUtil.class);
 
-    public static void createHTable(CubeDesc cubeDesc, String tableName, 
byte[][] splitKeys) throws IOException {
+    public static void createHTable(CubeSegment cubeSegment, byte[][] 
splitKeys) throws IOException {
+        String tableName = cubeSegment.getStorageLocationIdentifier();
+        CubeInstance cubeInstance = cubeSegment.getCubeInstance();
+        CubeDesc cubeDesc = cubeInstance.getDescriptor();
         KylinConfig kylinConfig = KylinConfig.getInstanceFromEnv();
 
-        HTableDescriptor tableDesc = new 
HTableDescriptor(TableName.valueOf(tableName));
+        HTableDescriptor tableDesc = new 
HTableDescriptor(TableName.valueOf(cubeSegment.getStorageLocationIdentifier()));
         // 
https://hbase.apache.org/apidocs/org/apache/hadoop/hbase/regionserver/ConstantSizeRegionSplitPolicy.html
         tableDesc.setValue(HTableDescriptor.SPLIT_POLICY, 
DisabledRegionSplitPolicy.class.getName());
         tableDesc.setValue(IRealizationConstants.HTableTag, 
kylinConfig.getMetadataUrlPrefix());
         tableDesc.setValue(IRealizationConstants.HTableCreationTime, 
String.valueOf(System.currentTimeMillis()));
 
+        if (!StringUtils.isEmpty(kylinConfig.getKylinOwner())) {
+            //HTableOwner is the team that provides kylin service
+            tableDesc.setValue(IRealizationConstants.HTableOwner, 
kylinConfig.getKylinOwner());
+        }
+
+        //HTableUser is the cube owner, which will be the "user"
+        tableDesc.setValue(IRealizationConstants.HTableUser, 
cubeInstance.getOwner());
+
         Configuration conf = HBaseConfiguration.create();
         HBaseAdmin admin = new HBaseAdmin(conf);
 

http://git-wip-us.apache.org/repos/asf/kylin/blob/6ec2adbb/storage-hbase/src/main/java/org/apache/kylin/storage/hbase/steps/HBaseStreamingOutput.java
----------------------------------------------------------------------
diff --git 
a/storage-hbase/src/main/java/org/apache/kylin/storage/hbase/steps/HBaseStreamingOutput.java
 
b/storage-hbase/src/main/java/org/apache/kylin/storage/hbase/steps/HBaseStreamingOutput.java
index 896bc72..fdab8eb 100644
--- 
a/storage-hbase/src/main/java/org/apache/kylin/storage/hbase/steps/HBaseStreamingOutput.java
+++ 
b/storage-hbase/src/main/java/org/apache/kylin/storage/hbase/steps/HBaseStreamingOutput.java
@@ -83,7 +83,7 @@ public class HBaseStreamingOutput implements IStreamingOutput 
{
 
     private HTableInterface createHTable(final CubeSegment cubeSegment) throws 
IOException {
         final String hTableName = cubeSegment.getStorageLocationIdentifier();
-        CubeHTableUtil.createHTable(cubeSegment.getCubeDesc(), hTableName, 
null);
+        CubeHTableUtil.createHTable(cubeSegment, null);
         final HTableInterface hTable = 
HBaseConnection.get(KylinConfig.getInstanceFromEnv().getStorageUrl()).getTable(hTableName);
         logger.info("hTable:" + hTableName + " for segment:" + 
cubeSegment.getName() + " created!");
         return hTable;

http://git-wip-us.apache.org/repos/asf/kylin/blob/6ec2adbb/storage-hbase/src/main/java/org/apache/kylin/storage/hbase/util/CleanHtableCLI.java
----------------------------------------------------------------------
diff --git 
a/storage-hbase/src/main/java/org/apache/kylin/storage/hbase/util/CleanHtableCLI.java
 
b/storage-hbase/src/main/java/org/apache/kylin/storage/hbase/util/CleanHtableCLI.java
index c583f90..957e04b 100644
--- 
a/storage-hbase/src/main/java/org/apache/kylin/storage/hbase/util/CleanHtableCLI.java
+++ 
b/storage-hbase/src/main/java/org/apache/kylin/storage/hbase/util/CleanHtableCLI.java
@@ -27,6 +27,7 @@ import org.apache.hadoop.hbase.HTableDescriptor;
 import org.apache.hadoop.hbase.client.HBaseAdmin;
 import org.apache.hadoop.util.ToolRunner;
 import org.apache.kylin.engine.mr.common.AbstractHadoopJob;
+import org.apache.kylin.metadata.realization.IRealizationConstants;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -57,10 +58,13 @@ public class CleanHtableCLI extends AbstractHadoopJob {
         for (HTableDescriptor descriptor : hbaseAdmin.listTables()) {
             String name = descriptor.getNameAsString().toLowerCase();
             if (name.startsWith("kylin") || name.startsWith("_kylin")) {
-                String x = descriptor.getValue("KYLIN_HOST");
+                String x = 
descriptor.getValue(IRealizationConstants.HTableTag);
                 System.out.println("table name " + 
descriptor.getNameAsString() + " host: " + x);
                 System.out.println(descriptor);
                 System.out.println();
+
+                descriptor.setValue(IRealizationConstants.HTableOwner, 
"dl-ebay-ky...@ebay.com");
+                hbaseAdmin.modifyTable(descriptor.getNameAsString(), 
descriptor);
             }
         }
         hbaseAdmin.close();

Reply via email to