KYLIN-1714 Make job/source/storage engines configurable from kylin.properties


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

Branch: refs/heads/master
Commit: f31ad6e5bc5f4f7e90de04e6ad21f0ad11b45c52
Parents: aa7558a
Author: Li Yang <liy...@apache.org>
Authored: Fri May 20 15:00:07 2016 +0800
Committer: Li Yang <liy...@apache.org>
Committed: Fri May 20 15:00:07 2016 +0800

----------------------------------------------------------------------
 build/conf/kylin.properties                     | 13 +++++++++
 .../apache/kylin/common/KylinConfigBase.java    | 28 ++++++++++++++------
 .../org/apache/kylin/engine/EngineFactory.java  |  8 +-----
 .../kylin/metadata/model/IEngineAware.java      |  2 +-
 .../kylin/metadata/model/IStorageAware.java     |  2 +-
 .../org/apache/kylin/source/SourceFactory.java  |  7 ++---
 .../apache/kylin/storage/StorageFactory.java    | 11 ++------
 .../test_case_data/localmeta/kylin.properties   | 12 +++++++++
 .../test_case_data/sandbox/kylin.properties     | 13 +++++++++
 9 files changed, 65 insertions(+), 31 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/kylin/blob/f31ad6e5/build/conf/kylin.properties
----------------------------------------------------------------------
diff --git a/build/conf/kylin.properties b/build/conf/kylin.properties
index 9a2fd81..b4a49f6 100644
--- a/build/conf/kylin.properties
+++ b/build/conf/kylin.properties
@@ -15,6 +15,18 @@
 # limitations under the License.
 #
 
+# job engines
+kylin.job.engine.0=org.apache.kylin.engine.mr.MRBatchCubingEngine
+kylin.job.engine.2=org.apache.kylin.engine.mr.MRBatchCubingEngine2
+
+# source engines
+kylin.source.engine.0=org.apache.kylin.source.hive.HiveSource
+
+# storage engines
+kylin.storage.engine.0=org.apache.kylin.storage.hbase.HBaseStorage
+kylin.storage.engine.1=org.apache.kylin.storage.hybrid.HybridStorage
+kylin.storage.engine.2=org.apache.kylin.storage.hbase.HBaseStorage
+
 # kylin server's mode
 kylin.server.mode=all
 
@@ -89,6 +101,7 @@ kylin.query.security.enabled=true
 # whether get job status from resource manager with kerberos authentication
 kylin.job.status.with.kerberos=false
 
+
 ## kylin security configurations
 
 # spring security profile, options: testing, ldap, saml

http://git-wip-us.apache.org/repos/asf/kylin/blob/f31ad6e5/core-common/src/main/java/org/apache/kylin/common/KylinConfigBase.java
----------------------------------------------------------------------
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 f4b359f..76961c5 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
@@ -652,14 +652,6 @@ abstract public class KylinConfigBase implements 
Serializable {
         return getOptional("kylin.init.tasks");
     }
 
-    public String getMRBatchEngineV1Class() {
-        return getOptional("kylin.cube.mr.engine.v1.class", 
"org.apache.kylin.engine.mr.MRBatchCubingEngine");
-    }
-
-    public String getMRBatchEngineV2Class() {
-        return getOptional("kylin.cube.mr.engine.v2.class", 
"org.apache.kylin.engine.mr.MRBatchCubingEngine2");
-    }
-
     public int getDimCountDistinctMaxCardinality() {
         return Integer.parseInt(getOptional("kylin.query.dim.distinct.max", 
"5000000"));
     }
@@ -668,4 +660,24 @@ abstract public class KylinConfigBase implements 
Serializable {
         return 
Integer.parseInt(getOptional("kylin.job.cubing.inmem.sampling.hll.precision", 
"14"));
     }
 
+    public Map<Integer, String> getJobEngines() {
+        return convertKeyToInteger(getPropertiesByPrefix("kylin.job.engine."));
+    }
+
+    public Map<Integer, String> getSourceEngines() {
+        return 
convertKeyToInteger(getPropertiesByPrefix("kylin.source.engine."));
+    }
+
+    public Map<Integer, String> getStorageEngines() {
+        return 
convertKeyToInteger(getPropertiesByPrefix("kylin.storage.engine."));
+    }
+    
+    private Map<Integer, String> convertKeyToInteger(Map<String, String> map) {
+        Map<Integer, String> result = Maps.newLinkedHashMap();
+        for (Entry<String, String> entry : map.entrySet()) {
+            result.put(Integer.valueOf(entry.getKey()), entry.getValue());
+        }
+        return result;
+    }
+
 }

http://git-wip-us.apache.org/repos/asf/kylin/blob/f31ad6e5/core-job/src/main/java/org/apache/kylin/engine/EngineFactory.java
----------------------------------------------------------------------
diff --git a/core-job/src/main/java/org/apache/kylin/engine/EngineFactory.java 
b/core-job/src/main/java/org/apache/kylin/engine/EngineFactory.java
index bba9060..79d2f81 100644
--- a/core-job/src/main/java/org/apache/kylin/engine/EngineFactory.java
+++ b/core-job/src/main/java/org/apache/kylin/engine/EngineFactory.java
@@ -18,10 +18,6 @@
 
 package org.apache.kylin.engine;
 
-import static org.apache.kylin.metadata.model.IEngineAware.ID_MR_V1;
-import static org.apache.kylin.metadata.model.IEngineAware.ID_MR_V2;
-
-import java.util.HashMap;
 import java.util.Map;
 
 import org.apache.kylin.common.KylinConfig;
@@ -35,9 +31,7 @@ public class EngineFactory {
     private static ImplementationSwitch<IBatchCubingEngine> batchEngines;
     private static ImplementationSwitch<IStreamingCubingEngine> 
streamingEngines;
     static {
-        Map<Integer, String> impls = new HashMap<>();
-        impls.put(ID_MR_V1, 
KylinConfig.getInstanceFromEnv().getMRBatchEngineV1Class());
-        impls.put(ID_MR_V2, 
KylinConfig.getInstanceFromEnv().getMRBatchEngineV2Class());
+        Map<Integer, String> impls = 
KylinConfig.getInstanceFromEnv().getJobEngines();
         batchEngines = new ImplementationSwitch<IBatchCubingEngine>(impls, 
IBatchCubingEngine.class);
 
         impls.clear();

http://git-wip-us.apache.org/repos/asf/kylin/blob/f31ad6e5/core-metadata/src/main/java/org/apache/kylin/metadata/model/IEngineAware.java
----------------------------------------------------------------------
diff --git 
a/core-metadata/src/main/java/org/apache/kylin/metadata/model/IEngineAware.java 
b/core-metadata/src/main/java/org/apache/kylin/metadata/model/IEngineAware.java
index 882b2e3..a9fb491 100644
--- 
a/core-metadata/src/main/java/org/apache/kylin/metadata/model/IEngineAware.java
+++ 
b/core-metadata/src/main/java/org/apache/kylin/metadata/model/IEngineAware.java
@@ -24,6 +24,6 @@ public interface IEngineAware {
     public static final int ID_MR_V2 = 2;
     public static final int ID_MR_II = 3;
     public static final int ID_SPARK = 5;
-
+    
     int getEngineType();
 }

http://git-wip-us.apache.org/repos/asf/kylin/blob/f31ad6e5/core-metadata/src/main/java/org/apache/kylin/metadata/model/IStorageAware.java
----------------------------------------------------------------------
diff --git 
a/core-metadata/src/main/java/org/apache/kylin/metadata/model/IStorageAware.java
 
b/core-metadata/src/main/java/org/apache/kylin/metadata/model/IStorageAware.java
index e552574..9f9edca 100644
--- 
a/core-metadata/src/main/java/org/apache/kylin/metadata/model/IStorageAware.java
+++ 
b/core-metadata/src/main/java/org/apache/kylin/metadata/model/IStorageAware.java
@@ -23,6 +23,6 @@ public interface IStorageAware {
     public static final int ID_HBASE = 0;
     public static final int ID_HYBRID = 1;
     public static final int ID_SHARDED_HBASE = 2;
-
+    
     int getStorageType();
 }

http://git-wip-us.apache.org/repos/asf/kylin/blob/f31ad6e5/core-metadata/src/main/java/org/apache/kylin/source/SourceFactory.java
----------------------------------------------------------------------
diff --git 
a/core-metadata/src/main/java/org/apache/kylin/source/SourceFactory.java 
b/core-metadata/src/main/java/org/apache/kylin/source/SourceFactory.java
index 54068f6..f701a0f 100644
--- a/core-metadata/src/main/java/org/apache/kylin/source/SourceFactory.java
+++ b/core-metadata/src/main/java/org/apache/kylin/source/SourceFactory.java
@@ -18,11 +18,9 @@
 
 package org.apache.kylin.source;
 
-import static org.apache.kylin.metadata.model.ISourceAware.ID_HIVE;
-
-import java.util.HashMap;
 import java.util.Map;
 
+import org.apache.kylin.common.KylinConfig;
 import org.apache.kylin.common.util.ImplementationSwitch;
 import org.apache.kylin.metadata.model.ISourceAware;
 import org.apache.kylin.metadata.model.TableDesc;
@@ -31,8 +29,7 @@ public class SourceFactory {
 
     private static ImplementationSwitch<ISource> sources;
     static {
-        Map<Integer, String> impls = new HashMap<>();
-        impls.put(ID_HIVE, "org.apache.kylin.source.hive.HiveSource");
+        Map<Integer, String> impls = 
KylinConfig.getInstanceFromEnv().getSourceEngines();
         sources = new ImplementationSwitch<ISource>(impls, ISource.class);
     }
 

http://git-wip-us.apache.org/repos/asf/kylin/blob/f31ad6e5/core-storage/src/main/java/org/apache/kylin/storage/StorageFactory.java
----------------------------------------------------------------------
diff --git 
a/core-storage/src/main/java/org/apache/kylin/storage/StorageFactory.java 
b/core-storage/src/main/java/org/apache/kylin/storage/StorageFactory.java
index da2f69c..e7dd53c 100644
--- a/core-storage/src/main/java/org/apache/kylin/storage/StorageFactory.java
+++ b/core-storage/src/main/java/org/apache/kylin/storage/StorageFactory.java
@@ -18,13 +18,9 @@
 
 package org.apache.kylin.storage;
 
-import static org.apache.kylin.metadata.model.IStorageAware.ID_HBASE;
-import static org.apache.kylin.metadata.model.IStorageAware.ID_HYBRID;
-import static org.apache.kylin.metadata.model.IStorageAware.ID_SHARDED_HBASE;
-
-import java.util.HashMap;
 import java.util.Map;
 
+import org.apache.kylin.common.KylinConfig;
 import org.apache.kylin.common.util.ImplementationSwitch;
 import org.apache.kylin.metadata.model.IStorageAware;
 import org.apache.kylin.metadata.realization.IRealization;
@@ -35,10 +31,7 @@ public class StorageFactory {
 
     private static ImplementationSwitch<IStorage> storages;
     static {
-        Map<Integer, String> impls = new HashMap<>();
-        impls.put(ID_HBASE, "org.apache.kylin.storage.hbase.HBaseStorage");
-        impls.put(ID_SHARDED_HBASE, 
"org.apache.kylin.storage.hbase.HBaseStorage");//ID_SHARDED_HBASE is a special 
HBaseStorage
-        impls.put(ID_HYBRID, "org.apache.kylin.storage.hybrid.HybridStorage");
+        Map<Integer, String> impls = 
KylinConfig.getInstanceFromEnv().getStorageEngines();
         storages = new ImplementationSwitch<IStorage>(impls, IStorage.class);
     }
 

http://git-wip-us.apache.org/repos/asf/kylin/blob/f31ad6e5/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 9ac7625..9605d76 100644
--- a/examples/test_case_data/localmeta/kylin.properties
+++ b/examples/test_case_data/localmeta/kylin.properties
@@ -15,6 +15,18 @@
 # limitations under the License.
 #
 
+# job engines
+kylin.job.engine.0=org.apache.kylin.engine.mr.MRBatchCubingEngine
+kylin.job.engine.2=org.apache.kylin.engine.mr.MRBatchCubingEngine2
+
+# source engines
+kylin.source.engine.0=org.apache.kylin.source.hive.HiveSource
+
+# storage engines
+kylin.storage.engine.0=org.apache.kylin.storage.hbase.HBaseStorage
+kylin.storage.engine.1=org.apache.kylin.storage.hybrid.HybridStorage
+kylin.storage.engine.2=org.apache.kylin.storage.hbase.HBaseStorage
+
 # 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

http://git-wip-us.apache.org/repos/asf/kylin/blob/f31ad6e5/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 a004266..5247b02 100644
--- a/examples/test_case_data/sandbox/kylin.properties
+++ b/examples/test_case_data/sandbox/kylin.properties
@@ -15,6 +15,18 @@
 # limitations under the License.
 #
 
+# job engines
+kylin.job.engine.0=org.apache.kylin.engine.mr.MRBatchCubingEngine
+kylin.job.engine.2=org.apache.kylin.engine.mr.MRBatchCubingEngine2
+
+# source engines
+kylin.source.engine.0=org.apache.kylin.source.hive.HiveSource
+
+# storage engines
+kylin.storage.engine.0=org.apache.kylin.storage.hbase.HBaseStorage
+kylin.storage.engine.1=org.apache.kylin.storage.hybrid.HybridStorage
+kylin.storage.engine.2=org.apache.kylin.storage.hbase.HBaseStorage
+
 # kylin server's mode
 kylin.server.mode=all
 # optional information for the owner of kylin platform, it can be your team's 
email
@@ -86,6 +98,7 @@ kylin.cube.algorithm=random
 
 kylin.security.profile=testing
 
+
 ## Config for Restful APP ##
 # database connection settings:
 ldap.server=

Reply via email to