KYLIN-1614 Diagnosis tool supports 1.3
Project: http://git-wip-us.apache.org/repos/asf/kylin/repo Commit: http://git-wip-us.apache.org/repos/asf/kylin/commit/7b2b9147 Tree: http://git-wip-us.apache.org/repos/asf/kylin/tree/7b2b9147 Diff: http://git-wip-us.apache.org/repos/asf/kylin/diff/7b2b9147 Branch: refs/heads/1.5.x-HBase1.x Commit: 7b2b9147db397b85ec45d17bb3787c9ff0f27a68 Parents: 51c275f Author: lidongsjtu <lid...@apache.org> Authored: Thu May 5 18:39:31 2016 +0800 Committer: lidongsjtu <lid...@apache.org> Committed: Thu May 5 18:39:51 2016 +0800 ---------------------------------------------------------------------- .../kylin/tool/AbstractInfoExtractor.java | 1 + .../apache/kylin/tool/CubeMetaExtractor.java | 53 ++++++++++------ .../org/apache/kylin/tool/DiagnosisInfoCLI.java | 1 + .../java/org/apache/kylin/tool/ToolUtil.java | 58 ----------------- .../kylin/tool/util/ResourceStoreUtil.java | 67 ++++++++++++++++++++ .../org/apache/kylin/tool/util/ToolUtil.java | 58 +++++++++++++++++ 6 files changed, 162 insertions(+), 76 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/kylin/blob/7b2b9147/tool/src/main/java/org/apache/kylin/tool/AbstractInfoExtractor.java ---------------------------------------------------------------------- diff --git a/tool/src/main/java/org/apache/kylin/tool/AbstractInfoExtractor.java b/tool/src/main/java/org/apache/kylin/tool/AbstractInfoExtractor.java index 0706143..9e4e83c 100644 --- a/tool/src/main/java/org/apache/kylin/tool/AbstractInfoExtractor.java +++ b/tool/src/main/java/org/apache/kylin/tool/AbstractInfoExtractor.java @@ -34,6 +34,7 @@ import org.apache.kylin.common.KylinVersion; import org.apache.kylin.common.util.AbstractApplication; import org.apache.kylin.common.util.OptionsHelper; import org.apache.kylin.common.util.ZipFileUtils; +import org.apache.kylin.tool.util.ToolUtil; import org.slf4j.Logger; import org.slf4j.LoggerFactory; http://git-wip-us.apache.org/repos/asf/kylin/blob/7b2b9147/tool/src/main/java/org/apache/kylin/tool/CubeMetaExtractor.java ---------------------------------------------------------------------- diff --git a/tool/src/main/java/org/apache/kylin/tool/CubeMetaExtractor.java b/tool/src/main/java/org/apache/kylin/tool/CubeMetaExtractor.java index bfe56e2..a8b732b 100644 --- a/tool/src/main/java/org/apache/kylin/tool/CubeMetaExtractor.java +++ b/tool/src/main/java/org/apache/kylin/tool/CubeMetaExtractor.java @@ -19,7 +19,6 @@ package org.apache.kylin.tool; import java.io.File; -import java.io.IOException; import java.util.List; import org.apache.commons.cli.Option; @@ -28,7 +27,6 @@ import org.apache.commons.cli.OptionGroup; import org.apache.commons.lang3.StringUtils; import org.apache.kylin.common.KylinConfig; import org.apache.kylin.common.persistence.ResourceStore; -import org.apache.kylin.common.persistence.ResourceTool; import org.apache.kylin.common.util.OptionsHelper; import org.apache.kylin.cube.CubeDescManager; import org.apache.kylin.cube.CubeInstance; @@ -38,6 +36,7 @@ import org.apache.kylin.cube.model.CubeDesc; import org.apache.kylin.job.dao.ExecutableDao; import org.apache.kylin.job.dao.ExecutablePO; import org.apache.kylin.job.exception.PersistentException; +import org.apache.kylin.metadata.MetadataConstants; import org.apache.kylin.metadata.MetadataManager; import org.apache.kylin.metadata.badquery.BadQueryHistoryManager; import org.apache.kylin.metadata.model.DataModelDesc; @@ -51,6 +50,7 @@ import org.apache.kylin.metadata.realization.RealizationRegistry; import org.apache.kylin.metadata.realization.RealizationType; import org.apache.kylin.storage.hybrid.HybridInstance; import org.apache.kylin.storage.hybrid.HybridManager; +import org.apache.kylin.tool.util.ResourceStoreUtil; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -178,30 +178,27 @@ public class CubeMetaExtractor extends AbstractInfoExtractor { } try { - ResourceStore src = ResourceStore.getStore(KylinConfig.getInstanceFromEnv()); - ResourceStore dst = ResourceStore.getStore(KylinConfig.createInstanceFromUri(dest)); + KylinConfig srcConfig = KylinConfig.getInstanceFromEnv(); + KylinConfig dstConfig = KylinConfig.createInstanceFromUri(dest); - for (String path : requiredResources) { - ResourceTool.copyR(src, dst, path); - } + ResourceStoreUtil.copy(srcConfig, dstConfig, requiredResources); - for (String path : optionalResources) { - try { - ResourceTool.copyR(src, dst, path); - } catch (Exception e) { - logger.warn("Exception when copying optional resource {}. May be caused by resource missing. Ignore it."); - } + try { + ResourceStoreUtil.copy(srcConfig, dstConfig, optionalResources); + } catch (Exception e) { + logger.warn("Exception when copying optional resource {}. May be caused by resource missing. Ignore it."); } + ResourceStore dstStore = ResourceStore.getStore(dstConfig); for (CubeInstance cube : cubesToTrimAndSave) { - CubeInstance trimmedCube = CubeInstance.getCopyOf(cube); + CubeInstance trimmedCube = copyCubeInstance(cube); trimmedCube.getSegments().clear(); trimmedCube.setUuid(cube.getUuid()); - dst.putResource(trimmedCube.getResourcePath(), trimmedCube, CubeManager.CUBE_SERIALIZER); + dstStore.putResource(trimmedCube.getResourcePath(), trimmedCube, CubeManager.CUBE_SERIALIZER); } - } catch (IOException e) { - throw new RuntimeException("IOException", e); + } catch (Exception e) { + throw new RuntimeException("Exception", e); } } @@ -209,6 +206,20 @@ public class CubeMetaExtractor extends AbstractInfoExtractor { return realizationRegistry.getRealization(realizationEntry.getType(), realizationEntry.getRealization()); } + // do not call CubeInstance.getCopyOf() to keep backward compatible with 1.3.x + private static CubeInstance copyCubeInstance(CubeInstance cubeInstance) { + CubeInstance newCube = new CubeInstance(); + newCube.setName(cubeInstance.getName()); + newCube.setSegments(cubeInstance.getSegments()); + newCube.setDescName(cubeInstance.getDescName()); + newCube.setStatus(cubeInstance.getStatus()); + newCube.setOwner(cubeInstance.getOwner()); + newCube.setCost(cubeInstance.getCost()); + newCube.setCreateTimeUTC(System.currentTimeMillis()); + newCube.updateRandomUuid(); + return newCube; + } + // private void dealWithStreaming(CubeInstance cube) { // streamingManager = StreamingManager.getInstance(kylinConfig); // for (StreamingConfig streamingConfig : streamingManager.listAllStreaming()) { @@ -219,6 +230,10 @@ public class CubeMetaExtractor extends AbstractInfoExtractor { // } // } + private static String concatCubeDescResourcePath(String descName) { + return ResourceStore.CUBE_DESC_RESOURCE_ROOT + "/" + descName + MetadataConstants.FILE_SURFIX; + } + private void retrieveResourcePath(IRealization realization) { logger.info("Deal with realization {} of type {}", realization.getName(), realization.getType()); @@ -238,7 +253,9 @@ public class CubeMetaExtractor extends AbstractInfoExtractor { } addRequired(DataModelDesc.concatResourcePath(modelDesc.getName())); - addRequired(CubeDesc.concatResourcePath(cubeDesc.getName())); + + // backward compatible with 1.3 + addRequired(concatCubeDescResourcePath(cubeDesc.getName())); if (includeSegments) { addRequired(CubeInstance.concatResourcePath(cube.getName())); http://git-wip-us.apache.org/repos/asf/kylin/blob/7b2b9147/tool/src/main/java/org/apache/kylin/tool/DiagnosisInfoCLI.java ---------------------------------------------------------------------- diff --git a/tool/src/main/java/org/apache/kylin/tool/DiagnosisInfoCLI.java b/tool/src/main/java/org/apache/kylin/tool/DiagnosisInfoCLI.java index 884a9d4..be41e74 100644 --- a/tool/src/main/java/org/apache/kylin/tool/DiagnosisInfoCLI.java +++ b/tool/src/main/java/org/apache/kylin/tool/DiagnosisInfoCLI.java @@ -25,6 +25,7 @@ import org.apache.commons.cli.Option; import org.apache.commons.cli.OptionBuilder; import org.apache.commons.io.FileUtils; import org.apache.kylin.common.util.OptionsHelper; +import org.apache.kylin.tool.util.ToolUtil; import org.slf4j.Logger; import org.slf4j.LoggerFactory; http://git-wip-us.apache.org/repos/asf/kylin/blob/7b2b9147/tool/src/main/java/org/apache/kylin/tool/ToolUtil.java ---------------------------------------------------------------------- diff --git a/tool/src/main/java/org/apache/kylin/tool/ToolUtil.java b/tool/src/main/java/org/apache/kylin/tool/ToolUtil.java deleted file mode 100644 index 494f4fe..0000000 --- a/tool/src/main/java/org/apache/kylin/tool/ToolUtil.java +++ /dev/null @@ -1,58 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ - -package org.apache.kylin.tool; - -import java.io.File; -import java.io.IOException; - -import org.apache.commons.lang.StringUtils; -import org.apache.hadoop.hbase.HBaseConfiguration; -import org.apache.hadoop.hbase.HTableDescriptor; -import org.apache.hadoop.hbase.TableName; -import org.apache.hadoop.hbase.client.HBaseAdmin; -import org.apache.kylin.common.KylinConfig; -import org.apache.kylin.engine.mr.HadoopUtil; -import org.apache.kylin.storage.hbase.HBaseConnection; - -public class ToolUtil { - public static String getConfFolder() { - final String CONF = "conf"; - String path = System.getProperty(KylinConfig.KYLIN_CONF); - if (StringUtils.isNotEmpty(path)) { - return path; - } - path = KylinConfig.getKylinHome(); - if (StringUtils.isNotEmpty(path)) { - return path + File.separator + CONF; - } - return null; - } - - public static String getHBaseMetaStoreId() throws IOException { - try (final HBaseAdmin hbaseAdmin = new HBaseAdmin(HBaseConfiguration.create(HadoopUtil.getCurrentConfiguration()))) { - final String metaStoreName = KylinConfig.getInstanceFromEnv().getMetadataUrlPrefix(); - final HTableDescriptor desc = hbaseAdmin.getTableDescriptor(TableName.valueOf(metaStoreName)); - return desc.getValue(HBaseConnection.HTABLE_UUID_TAG); - } catch (Exception e) { - return null; - } - } - -} http://git-wip-us.apache.org/repos/asf/kylin/blob/7b2b9147/tool/src/main/java/org/apache/kylin/tool/util/ResourceStoreUtil.java ---------------------------------------------------------------------- diff --git a/tool/src/main/java/org/apache/kylin/tool/util/ResourceStoreUtil.java b/tool/src/main/java/org/apache/kylin/tool/util/ResourceStoreUtil.java new file mode 100644 index 0000000..c7fd4d9 --- /dev/null +++ b/tool/src/main/java/org/apache/kylin/tool/util/ResourceStoreUtil.java @@ -0,0 +1,67 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +package org.apache.kylin.tool.util; + +import java.io.IOException; +import java.lang.reflect.Method; +import java.util.List; + +import org.apache.kylin.common.KylinConfig; +import org.apache.kylin.common.persistence.RawResource; +import org.apache.kylin.common.persistence.ResourceStore; + +/** + * Created by dongli on 5/5/16. + */ +public class ResourceStoreUtil { + public static void copy(KylinConfig srcConfig, KylinConfig dstConfig, List<String> paths) throws Exception { + ResourceStore src = ResourceStore.getStore(srcConfig); + ResourceStore dst = ResourceStore.getStore(dstConfig); + for (String path : paths) { + rCopy(src, dst, path); + } + } + + public static void rCopy(ResourceStore src, ResourceStore dst, String path) throws Exception { + Method listResourceMethod = ResourceStore.class.getMethod("listResources", String.class); + Iterable<String> children = (Iterable<String>) listResourceMethod.invoke(src, path); + + // case of resource (not a folder) + if (children == null) { + try { + RawResource res = src.getResource(path); + if (res != null) { + dst.putResource(path, res.inputStream, res.timestamp); + res.inputStream.close(); + } else { + System.out.println("Resource not exist for " + path); + } + } catch (Exception ex) { + System.err.println("Failed to open " + path); + ex.printStackTrace(); + } + } + // case of folder + else { + for (String child : children) + rCopy(src, dst, child); + } + } +} http://git-wip-us.apache.org/repos/asf/kylin/blob/7b2b9147/tool/src/main/java/org/apache/kylin/tool/util/ToolUtil.java ---------------------------------------------------------------------- diff --git a/tool/src/main/java/org/apache/kylin/tool/util/ToolUtil.java b/tool/src/main/java/org/apache/kylin/tool/util/ToolUtil.java new file mode 100644 index 0000000..3fb2c6c --- /dev/null +++ b/tool/src/main/java/org/apache/kylin/tool/util/ToolUtil.java @@ -0,0 +1,58 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +package org.apache.kylin.tool.util; + +import java.io.File; +import java.io.IOException; + +import org.apache.commons.lang.StringUtils; +import org.apache.hadoop.hbase.HBaseConfiguration; +import org.apache.hadoop.hbase.HTableDescriptor; +import org.apache.hadoop.hbase.TableName; +import org.apache.hadoop.hbase.client.HBaseAdmin; +import org.apache.kylin.common.KylinConfig; +import org.apache.kylin.engine.mr.HadoopUtil; +import org.apache.kylin.storage.hbase.HBaseConnection; + +public class ToolUtil { + public static String getConfFolder() { + final String CONF = "conf"; + String path = System.getProperty(KylinConfig.KYLIN_CONF); + if (StringUtils.isNotEmpty(path)) { + return path; + } + path = KylinConfig.getKylinHome(); + if (StringUtils.isNotEmpty(path)) { + return path + File.separator + CONF; + } + return null; + } + + public static String getHBaseMetaStoreId() throws IOException { + try (final HBaseAdmin hbaseAdmin = new HBaseAdmin(HBaseConfiguration.create(HadoopUtil.getCurrentConfiguration()))) { + final String metaStoreName = KylinConfig.getInstanceFromEnv().getMetadataUrlPrefix(); + final HTableDescriptor desc = hbaseAdmin.getTableDescriptor(TableName.valueOf(metaStoreName)); + return desc.getValue(HBaseConnection.HTABLE_UUID_TAG); + } catch (Exception e) { + return null; + } + } + +}