KYLIN-2802 minor code review This closes #70
Project: http://git-wip-us.apache.org/repos/asf/kylin/repo Commit: http://git-wip-us.apache.org/repos/asf/kylin/commit/e21fe2ac Tree: http://git-wip-us.apache.org/repos/asf/kylin/tree/e21fe2ac Diff: http://git-wip-us.apache.org/repos/asf/kylin/diff/e21fe2ac Branch: refs/heads/master Commit: e21fe2acb46d4786ff9b694e66195798e31ab501 Parents: f0bc691 Author: Li Yang <liy...@apache.org> Authored: Sat Sep 23 18:53:48 2017 +0800 Committer: Li Yang <liy...@apache.org> Committed: Sat Sep 23 19:29:25 2017 +0800 ---------------------------------------------------------------------- .../apache/kylin/common/KylinConfigBase.java | 59 +++++++++++--------- .../main/resources/kylin-defaults.properties | 9 +++ .../org/apache/kylin/cube/CubeInstance.java | 30 ---------- .../java/org/apache/kylin/cube/CubeManager.java | 2 +- .../kylin/engine/mr/common/CubeStatsReader.java | 2 +- .../engine/mr/common/CuboidStatsReaderUtil.java | 2 +- .../mr/common/StatisticsDecisionUtil.java | 4 ++ 7 files changed, 48 insertions(+), 60 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/kylin/blob/e21fe2ac/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 eb2adab..71de284 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 @@ -409,6 +409,38 @@ abstract public class KylinConfigBase implements Serializable { } // ============================================================================ + // Cube Planner + // ============================================================================ + + public boolean isCubePlannerEnabled() { + return Boolean.parseBoolean(getOptional("kylin.cube.cubeplanner.enabled", "false")); + } + + public boolean isCubePlannerEnabledForExistingCube() { + return Boolean.parseBoolean(getOptional("kylin.cube.cubeplanner.enabled-for-existing-cube", "false")); + } + + public double getCubePlannerExpansionRateThreshold() { + return Double.parseDouble(getOptional("kylin.cube.cubeplanner.expansion-threshold", "15.0")); + } + + public int getCubePlannerRecommendCuboidCacheMaxSize() { + return Integer.parseInt(getOptional("kylin.cube.cubeplanner.recommend-cache-max-size", "200")); + } + + public long getCubePlannerMandatoryRollUpThreshold() { + return Long.parseLong(getOptional("kylin.cube.cubeplanner.mandatory-rollup-threshold", "1000")); + } + + public int getCubePlannerAgreedyAlgorithmAutoThreshold() { + return Integer.parseInt(getOptional("kylin.cube.cubeplanner.algorithm-threshold-greedy", "10")); + } + + public int getCubePlannerGeneticAlgorithmAutoThreshold() { + return Integer.parseInt(getOptional("kylin.cube.cubeplanner.algorithm-threshold-genetic", "23")); + } + + // ============================================================================ // JOB // ============================================================================ @@ -1224,33 +1256,6 @@ abstract public class KylinConfigBase implements Serializable { } // ============================================================================ - // Cube Planner - // ============================================================================ - public boolean isCubePlannerEnabledForExistingCube() { - return Boolean.parseBoolean(getOptional("kylin.cube.cubeplanner.enabled-for-existing-cube", "false")); - } - - public double getCubePlannerExpansionRateThreshold() { - return Double.parseDouble(getOptional("kylin.cube.cubeplanner.expansion-threshold", "15.0")); - } - - public int getCubePlannerRecommendCuboidCacheMaxSize() { - return Integer.parseInt(getOptional("kylin.cube.cubeplanner.recommend-cache-max-size", "200")); - } - - public long getCubePlannerMandatoryRollUpThreshold() { - return Long.parseLong(getOptional("kylin.cube.cubeplanner.mandatory-rollup-threshold", "1000")); - } - - public int getCubePlannerAgreedyAlgorithmAutoThreshold() { - return Integer.parseInt(getOptional("kylin.cube.cubeplanner.algorithm-threshold-greedy", "10")); - } - - public int getCubePlannerGeneticAlgorithmAutoThreshold() { - return Integer.parseInt(getOptional("kylin.cube.cubeplanner.algorithm-threshold-genetic", "23")); - } - - // ============================================================================ // RESTCLIENT // ============================================================================ http://git-wip-us.apache.org/repos/asf/kylin/blob/e21fe2ac/core-common/src/main/resources/kylin-defaults.properties ---------------------------------------------------------------------- diff --git a/core-common/src/main/resources/kylin-defaults.properties b/core-common/src/main/resources/kylin-defaults.properties index c2da3f8..ad313ca 100644 --- a/core-common/src/main/resources/kylin-defaults.properties +++ b/core-common/src/main/resources/kylin-defaults.properties @@ -157,6 +157,7 @@ kylin.engine.mr.build-dict-in-reducer=true # Number of reducers for fetching UHC column distinct values kylin.engine.mr.uhc-reducer-count=1 + ### CUBE | DICTIONARY ### kylin.cube.cuboid-scheduler=org.apache.kylin.cube.cuboid.DefaultCuboidScheduler @@ -172,6 +173,14 @@ kylin.cube.aggrgroup.max-combination=4096 kylin.snapshot.max-mb=300 +kylin.cube.cubeplanner.enabled=false +kylin.cube.cubeplanner.enabled-for-existing-cube=false +kylin.cube.cubeplanner.expansion-threshold=15.0 +kylin.cube.cubeplanner.recommend-cache-max-size=200 +kylin.cube.cubeplanner.mandatory-rollup-threshold=1000 +kylin.cube.cubeplanner.algorithm-threshold-greedy=10 +kylin.cube.cubeplanner.algorithm-threshold-genetic=23 + ### QUERY ### http://git-wip-us.apache.org/repos/asf/kylin/blob/e21fe2ac/core-cube/src/main/java/org/apache/kylin/cube/CubeInstance.java ---------------------------------------------------------------------- diff --git a/core-cube/src/main/java/org/apache/kylin/cube/CubeInstance.java b/core-cube/src/main/java/org/apache/kylin/cube/CubeInstance.java index a611b96..5177898 100644 --- a/core-cube/src/main/java/org/apache/kylin/cube/CubeInstance.java +++ b/core-cube/src/main/java/org/apache/kylin/cube/CubeInstance.java @@ -29,7 +29,6 @@ import org.apache.kylin.common.persistence.ResourceStore; import org.apache.kylin.common.persistence.RootPersistentEntity; import org.apache.kylin.common.util.CompressionUtils; import org.apache.kylin.common.util.JsonUtil; -import org.apache.kylin.cube.cuboid.CuboidModeEnum; import org.apache.kylin.cube.cuboid.CuboidScheduler; import org.apache.kylin.cube.cuboid.TreeCuboidScheduler; import org.apache.kylin.cube.model.CubeDesc; @@ -328,35 +327,6 @@ public class CubeInstance extends RootPersistentEntity implements IRealization, this.createTimeUTC = createTimeUTC; } - public Set<Long> getCuboidsByMode(String cuboidModeName) { - return getCuboidsByMode(CuboidModeEnum.getByModeName(cuboidModeName)); - } - - public Set<Long> getCuboidsByMode(CuboidModeEnum cuboidMode) { - if (cuboidMode == null || cuboidMode == CuboidModeEnum.CURRENT) { - return getCuboidScheduler().getAllCuboidIds(); - } - Set<Long> cuboidsRecommend = getCuboidsRecommend(); - if (cuboidsRecommend == null || cuboidMode == CuboidModeEnum.RECOMMEND) { - return cuboidsRecommend; - } - Set<Long> currentCuboids = getCuboidScheduler().getAllCuboidIds(); - switch (cuboidMode) { - case RECOMMEND_EXISTING: - cuboidsRecommend.retainAll(currentCuboids); - return cuboidsRecommend; - case RECOMMEND_MISSING: - cuboidsRecommend.removeAll(currentCuboids); - return cuboidsRecommend; - case RECOMMEND_MISSING_WITH_BASE: - cuboidsRecommend.removeAll(currentCuboids); - currentCuboids.add(getCuboidScheduler().getBaseCuboidId()); - return cuboidsRecommend; - default: - return null; - } - } - public Map<Long, Long> getCuboids() { if (cuboidBytes == null) return null; http://git-wip-us.apache.org/repos/asf/kylin/blob/e21fe2ac/core-cube/src/main/java/org/apache/kylin/cube/CubeManager.java ---------------------------------------------------------------------- diff --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 d4d88fd..0ba7f21 100755 --- a/core-cube/src/main/java/org/apache/kylin/cube/CubeManager.java +++ b/core-cube/src/main/java/org/apache/kylin/cube/CubeManager.java @@ -418,7 +418,7 @@ public class CubeManager implements IRealizationProvider { cube.setCost(update.getCost()); } - if(update.getCuboids() != null){ + if (update.getCuboids() != null) { cube.setCuboids(update.getCuboids()); } http://git-wip-us.apache.org/repos/asf/kylin/blob/e21fe2ac/engine-mr/src/main/java/org/apache/kylin/engine/mr/common/CubeStatsReader.java ---------------------------------------------------------------------- diff --git a/engine-mr/src/main/java/org/apache/kylin/engine/mr/common/CubeStatsReader.java b/engine-mr/src/main/java/org/apache/kylin/engine/mr/common/CubeStatsReader.java index 8f1da6e..c82d797 100644 --- a/engine-mr/src/main/java/org/apache/kylin/engine/mr/common/CubeStatsReader.java +++ b/engine-mr/src/main/java/org/apache/kylin/engine/mr/common/CubeStatsReader.java @@ -140,7 +140,7 @@ public class CubeStatsReader { return tempFile; } - public Map<Long, HLLCounter> getCuboidRowEstimatesHLLOrigin() { + public Map<Long, HLLCounter> getCuboidRowHLLCounters() { return this.cuboidRowEstimatesHLL; } http://git-wip-us.apache.org/repos/asf/kylin/blob/e21fe2ac/engine-mr/src/main/java/org/apache/kylin/engine/mr/common/CuboidStatsReaderUtil.java ---------------------------------------------------------------------- diff --git a/engine-mr/src/main/java/org/apache/kylin/engine/mr/common/CuboidStatsReaderUtil.java b/engine-mr/src/main/java/org/apache/kylin/engine/mr/common/CuboidStatsReaderUtil.java index 3025750..68380f3 100644 --- a/engine-mr/src/main/java/org/apache/kylin/engine/mr/common/CuboidStatsReaderUtil.java +++ b/engine-mr/src/main/java/org/apache/kylin/engine/mr/common/CuboidStatsReaderUtil.java @@ -75,7 +75,7 @@ public class CuboidStatsReaderUtil { Map<Long, Double> sizeMapMerged = Maps.newHashMapWithExpectedSize(cuboidSet.size()); for (CubeSegment pSegment : segmentList) { CubeStatsReader pReader = new CubeStatsReader(pSegment, pSegment.getConfig()); - Map<Long, HLLCounter> pHLLMap = pReader.getCuboidRowEstimatesHLLOrigin(); + Map<Long, HLLCounter> pHLLMap = pReader.getCuboidRowHLLCounters(); if (pHLLMap == null || pHLLMap.isEmpty()) { logger.info("Cuboid Statistics for segment " + pSegment.getName() + " is not enabled."); nSegment--; http://git-wip-us.apache.org/repos/asf/kylin/blob/e21fe2ac/engine-mr/src/main/java/org/apache/kylin/engine/mr/common/StatisticsDecisionUtil.java ---------------------------------------------------------------------- diff --git a/engine-mr/src/main/java/org/apache/kylin/engine/mr/common/StatisticsDecisionUtil.java b/engine-mr/src/main/java/org/apache/kylin/engine/mr/common/StatisticsDecisionUtil.java index 4145226..9c805a8 100644 --- a/engine-mr/src/main/java/org/apache/kylin/engine/mr/common/StatisticsDecisionUtil.java +++ b/engine-mr/src/main/java/org/apache/kylin/engine/mr/common/StatisticsDecisionUtil.java @@ -90,6 +90,10 @@ public class StatisticsDecisionUtil { public static void optimizeCubingPlan(CubeSegment segment) throws IOException { CubeInstance cube = segment.getCubeInstance(); + + if (cube.getConfig().isCubePlannerEnabled() == false) + return; + List<CubeSegment> readySegments = cube.getSegments(SegmentStatusEnum.READY); if (readySegments.size() == 0 || (cube.getConfig().isCubePlannerEnabledForExistingCube() && readySegments.size() == 1 && (readySegments.get(0).getSegRange().equals(segment.getSegRange())))) {