You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@kylin.apache.org by li...@apache.org on 2016/04/30 09:10:42 UTC
[1/2] kylin git commit: KYLIN-1639 Fix typo for wrong logging of JobID
Repository: kylin
Updated Branches:
refs/heads/master 2fc5827f0 -> 79d1c6d54
KYLIN-1639 Fix typo for wrong logging of JobID
Project: http://git-wip-us.apache.org/repos/asf/kylin/repo
Commit: http://git-wip-us.apache.org/repos/asf/kylin/commit/eb4cec69
Tree: http://git-wip-us.apache.org/repos/asf/kylin/tree/eb4cec69
Diff: http://git-wip-us.apache.org/repos/asf/kylin/diff/eb4cec69
Branch: refs/heads/master
Commit: eb4cec69fb877f5b9f0b1de450eae296f22843ef
Parents: 2fc5827
Author: lidongsjtu <li...@apache.org>
Authored: Sat Apr 30 14:35:08 2016 +0800
Committer: lidongsjtu <li...@apache.org>
Committed: Sat Apr 30 14:35:08 2016 +0800
----------------------------------------------------------------------
.../org/apache/kylin/engine/mr/common/MapReduceExecutable.java | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/kylin/blob/eb4cec69/engine-mr/src/main/java/org/apache/kylin/engine/mr/common/MapReduceExecutable.java
----------------------------------------------------------------------
diff --git a/engine-mr/src/main/java/org/apache/kylin/engine/mr/common/MapReduceExecutable.java b/engine-mr/src/main/java/org/apache/kylin/engine/mr/common/MapReduceExecutable.java
index 19d888c..54459d7 100644
--- a/engine-mr/src/main/java/org/apache/kylin/engine/mr/common/MapReduceExecutable.java
+++ b/engine-mr/src/main/java/org/apache/kylin/engine/mr/common/MapReduceExecutable.java
@@ -104,7 +104,7 @@ public class MapReduceExecutable extends AbstractExecutable {
if (extra.containsKey(ExecutableConstants.MR_JOB_ID)) {
Configuration conf = HadoopUtil.getCurrentConfiguration();
job = new Cluster(conf).getJob(JobID.forName(extra.get(ExecutableConstants.MR_JOB_ID)));
- logger.info("mr_job_id:" + extra.get(ExecutableConstants.MR_JOB_ID + " resumed"));
+ logger.info("mr_job_id:" + extra.get(ExecutableConstants.MR_JOB_ID) + " resumed");
} else {
final Constructor<? extends AbstractHadoopJob> constructor = ClassUtil.forName(mapReduceJobClass, AbstractHadoopJob.class).getConstructor();
final AbstractHadoopJob hadoopJob = constructor.newInstance();
[2/2] kylin git commit: KYLIN-1614 Job diag tool
Posted by li...@apache.org.
KYLIN-1614 Job diag tool
Project: http://git-wip-us.apache.org/repos/asf/kylin/repo
Commit: http://git-wip-us.apache.org/repos/asf/kylin/commit/79d1c6d5
Tree: http://git-wip-us.apache.org/repos/asf/kylin/tree/79d1c6d5
Diff: http://git-wip-us.apache.org/repos/asf/kylin/diff/79d1c6d5
Branch: refs/heads/master
Commit: 79d1c6d5450c054b28eea19d486b069f3650c5f7
Parents: eb4cec6
Author: lidongsjtu <li...@apache.org>
Authored: Sat Apr 30 14:36:18 2016 +0800
Committer: lidongsjtu <li...@apache.org>
Committed: Sat Apr 30 14:42:20 2016 +0800
----------------------------------------------------------------------
.../kylin/tool/AbstractInfoExtractor.java | 29 +++++--
.../apache/kylin/tool/ClientEnvExtractor.java | 89 ++++++++++++++++++++
.../apache/kylin/tool/CubeMetaExtractor.java | 2 +-
.../org/apache/kylin/tool/DiagnosisInfoCLI.java | 42 +++------
.../apache/kylin/tool/JobDiagnosisInfoCLI.java | 17 +++-
.../apache/kylin/tool/KylinLogExtractor.java | 2 +-
.../java/org/apache/kylin/tool/ToolUtil.java | 1 +
7 files changed, 139 insertions(+), 43 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/kylin/blob/79d1c6d5/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 64e1db8..23a4559 100644
--- a/tool/src/main/java/org/apache/kylin/tool/AbstractInfoExtractor.java
+++ b/tool/src/main/java/org/apache/kylin/tool/AbstractInfoExtractor.java
@@ -28,6 +28,7 @@ import org.apache.commons.cli.OptionBuilder;
import org.apache.commons.cli.Options;
import org.apache.commons.io.FileUtils;
import org.apache.commons.lang.StringUtils;
+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;
@@ -46,12 +47,11 @@ public abstract class AbstractInfoExtractor extends AbstractApplication {
@SuppressWarnings("static-access")
private static final Option OPTION_QUIET = OptionBuilder.withArgName("quiet").hasArg().isRequired(false).withDescription("specify whether to print final result").create("quiet");
-
- private static final String DEFAULT_PACKAGE_PREFIX = "dump";
+ private static final String DEFAULT_PACKAGE_TYPE = "base";
protected final Options options;
- protected String packagePrefix;
+ protected String packageType;
protected File exportDir;
public AbstractInfoExtractor() {
@@ -60,7 +60,7 @@ public abstract class AbstractInfoExtractor extends AbstractApplication {
options.addOption(OPTION_COMPRESS);
options.addOption(OPTION_QUIET);
- packagePrefix = DEFAULT_PACKAGE_PREFIX;
+ packageType = DEFAULT_PACKAGE_TYPE;
}
@Override
@@ -82,17 +82,18 @@ public abstract class AbstractInfoExtractor extends AbstractApplication {
}
// create new folder to contain the output
- String packageName = packagePrefix + "_" + new SimpleDateFormat("YYYY_MM_dd_HH_mm_ss").format(new Date());
+ String packageName = packageType.toLowerCase() + "_" + new SimpleDateFormat("YYYY_MM_dd_HH_mm_ss").format(new Date());
if (new File(exportDest).exists()) {
exportDest = exportDest + packageName + "/";
}
exportDir = new File(exportDest);
+ dumpBasicDiagInfo();
executeExtract(optionsHelper, exportDir);
// compress to zip package
if (compress) {
- File tempZipFile = File.createTempFile(packagePrefix + "_", ".zip");
+ File tempZipFile = File.createTempFile(packageType + "_", ".zip");
ZipFileUtils.compressZipFile(exportDir.getAbsolutePath(), tempZipFile.getAbsolutePath());
FileUtils.cleanDirectory(exportDir);
@@ -105,12 +106,26 @@ public abstract class AbstractInfoExtractor extends AbstractApplication {
if (!quiet) {
StringBuffer output = new StringBuffer();
output.append("\n========================================");
- output.append("\nDump " + packagePrefix + " package locates at: \n" + exportDir.getAbsolutePath());
+ output.append("\nDump " + packageType + " package locates at: \n" + exportDir.getAbsolutePath());
output.append("\n========================================");
logger.info(output.toString());
}
}
+ private void dumpBasicDiagInfo() {
+ try {
+ String output = KylinVersion.getKylinClientInformation() + "\n";
+ FileUtils.writeStringToFile(new File(exportDir, "kylin_env"), output);
+
+ StringBuilder basicSb = new StringBuilder();
+ basicSb.append(ToolUtil.getHBaseMetaStoreId()).append("\n");
+ basicSb.append("PackageType: ").append(packageType.toUpperCase()).append("\n");
+ FileUtils.writeStringToFile(new File(exportDir, "info"), basicSb.toString());
+ } catch (Exception e) {
+ logger.warn("Error in export process info.", e);
+ }
+ }
+
protected abstract void executeExtract(OptionsHelper optionsHelper, File exportDir) throws Exception;
public String getExportDest() {
http://git-wip-us.apache.org/repos/asf/kylin/blob/79d1c6d5/tool/src/main/java/org/apache/kylin/tool/ClientEnvExtractor.java
----------------------------------------------------------------------
diff --git a/tool/src/main/java/org/apache/kylin/tool/ClientEnvExtractor.java b/tool/src/main/java/org/apache/kylin/tool/ClientEnvExtractor.java
new file mode 100644
index 0000000..b0e79d4
--- /dev/null
+++ b/tool/src/main/java/org/apache/kylin/tool/ClientEnvExtractor.java
@@ -0,0 +1,89 @@
+/*
+ * 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.io.FileUtils;
+import org.apache.commons.lang.StringUtils;
+import org.apache.kylin.common.KylinConfig;
+import org.apache.kylin.common.util.CliCommandExecutor;
+import org.apache.kylin.common.util.OptionsHelper;
+import org.apache.kylin.common.util.Pair;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import com.google.common.io.Files;
+
+public class ClientEnvExtractor extends AbstractInfoExtractor {
+ private KylinConfig kylinConfig;
+ private CliCommandExecutor cmdExecutor;
+ private static final Logger logger = LoggerFactory.getLogger(ClientEnvExtractor.class);
+
+ public ClientEnvExtractor() throws IOException {
+ super();
+ packageType = "client";
+ kylinConfig = KylinConfig.getInstanceFromEnv();
+ cmdExecutor = kylinConfig.getCliCommandExecutor();
+ }
+
+ @Override
+ protected void executeExtract(OptionsHelper optionsHelper, File exportDir) throws Exception {
+ addLocalFile("/sys/kernel/mm/transparent_hugepage/defrag", "linux/transparent_hugepage");
+ addLocalFile("/proc/sys/vm/swappiness", "linux/swappiness");
+ addShellOutput("lsb_release -a", "linux", "lsb_release");
+ addShellOutput("ps aux|grep kylin", "kylin", "processes");
+ }
+
+ private void addLocalFile(String src, String destDir) {
+ try {
+ File srcFile = new File(src);
+ File destDirFile = null;
+ if (StringUtils.isEmpty(destDir)) {
+ destDirFile = new File(exportDir, destDir);
+ FileUtils.forceMkdir(destDirFile);
+ } else {
+ destDirFile = exportDir;
+ }
+ FileUtils.forceMkdir(destDirFile);
+ Files.copy(srcFile, new File(destDirFile, srcFile.getName()));
+ } catch (Exception e) {
+ logger.warn("Failed to copy " + src + ".", e);
+ }
+ }
+
+ private void addShellOutput(String cmd, String destDir, String filename) {
+ try {
+ File destDirFile = null;
+ if (StringUtils.isEmpty(destDir)) {
+ destDirFile = new File(exportDir, destDir);
+ FileUtils.forceMkdir(destDirFile);
+ } else {
+ destDirFile = exportDir;
+ }
+ Pair<Integer, String> result = cmdExecutor.execute(cmd);
+ String output = result.getSecond();
+ FileUtils.writeStringToFile(new File(destDirFile, filename), output);
+ } catch (Exception e) {
+ logger.warn("Failed to run command: " + cmd + ".", e);
+ }
+ }
+}
http://git-wip-us.apache.org/repos/asf/kylin/blob/79d1c6d5/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 73eec0d..28f5e70 100644
--- a/tool/src/main/java/org/apache/kylin/tool/CubeMetaExtractor.java
+++ b/tool/src/main/java/org/apache/kylin/tool/CubeMetaExtractor.java
@@ -105,7 +105,7 @@ public class CubeMetaExtractor extends AbstractInfoExtractor {
public CubeMetaExtractor() {
super();
- packagePrefix = "cubemeta";
+ packageType = "cubemeta";
OptionGroup realizationOrProject = new OptionGroup();
realizationOrProject.addOption(OPTION_CUBE);
http://git-wip-us.apache.org/repos/asf/kylin/blob/79d1c6d5/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 05285bd..bd88fe7 100644
--- a/tool/src/main/java/org/apache/kylin/tool/DiagnosisInfoCLI.java
+++ b/tool/src/main/java/org/apache/kylin/tool/DiagnosisInfoCLI.java
@@ -30,8 +30,6 @@ import org.apache.kylin.common.util.OptionsHelper;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import com.google.common.io.Files;
-
public class DiagnosisInfoCLI extends AbstractInfoExtractor {
private static final Logger logger = LoggerFactory.getLogger(DiagnosisInfoCLI.class);
@@ -45,20 +43,20 @@ public class DiagnosisInfoCLI extends AbstractInfoExtractor {
private static final Option OPTION_INCLUDE_HBASE = OptionBuilder.withArgName("includeHBase").hasArg().isRequired(false).withDescription("Specify whether to include hbase files to extract. Default true.").create("includeHBase");
@SuppressWarnings("static-access")
- private static final Option OPTION_INCLUDE_LINUX = OptionBuilder.withArgName("includeLinux").hasArg().isRequired(false).withDescription("Specify whether to include os and linux kernel info to extract. Default true.").create("includeLinux");
+ private static final Option OPTION_INCLUDE_CLIENT = OptionBuilder.withArgName("includeClient").hasArg().isRequired(false).withDescription("Specify whether to include client info to extract. Default true.").create("includeClient");
private KylinConfig kylinConfig;
public DiagnosisInfoCLI() {
super();
- packagePrefix = "diagnosis";
+ packageType = "diagnosis";
kylinConfig = KylinConfig.getInstanceFromEnv();
options.addOption(OPTION_PROJECT);
options.addOption(OPTION_INCLUDE_CONF);
options.addOption(OPTION_INCLUDE_HBASE);
- options.addOption(OPTION_INCLUDE_LINUX);
+ options.addOption(OPTION_INCLUDE_CLIENT);
}
public static void main(String args[]) {
@@ -71,7 +69,7 @@ public class DiagnosisInfoCLI extends AbstractInfoExtractor {
final String project = optionsHelper.getOptionValue(options.getOption("project"));
boolean includeConf = optionsHelper.hasOption(OPTION_INCLUDE_CONF) ? Boolean.valueOf(optionsHelper.getOptionValue(OPTION_INCLUDE_CONF)) : true;
boolean includeHBase = optionsHelper.hasOption(OPTION_INCLUDE_HBASE) ? Boolean.valueOf(optionsHelper.getOptionValue(OPTION_INCLUDE_HBASE)) : true;
- boolean includeLinux = optionsHelper.hasOption(OPTION_INCLUDE_LINUX) ? Boolean.valueOf(optionsHelper.getOptionValue(OPTION_INCLUDE_LINUX)) : true;
+ boolean includeClient = optionsHelper.hasOption(OPTION_INCLUDE_CLIENT) ? Boolean.valueOf(optionsHelper.getOptionValue(OPTION_INCLUDE_CLIENT)) : true;
// export cube metadata
String[] cubeMetaArgs = { "-destDir", new File(exportDir, "metadata").getAbsolutePath(), "-project", project, "-compress", "false", "-quiet", "false" };
@@ -95,27 +93,11 @@ public class DiagnosisInfoCLI extends AbstractInfoExtractor {
}
}
- // export os (linux)
- if (includeLinux) {
- File linuxDir = new File(exportDir, "linux");
- FileUtils.forceMkdir(linuxDir);
- File transparentHugepageCompactionDir = new File(linuxDir, "transparent_hugepage");
- FileUtils.forceMkdir(transparentHugepageCompactionDir);
- File vmSwappinessDir = new File(linuxDir, "vm.swappiness");
- FileUtils.forceMkdir(vmSwappinessDir);
- try {
- String transparentHugepageCompactionPath = "/sys/kernel/mm/transparent_hugepage/defrag";
- Files.copy(new File(transparentHugepageCompactionPath), new File(transparentHugepageCompactionDir, "defrag"));
- } catch (Exception e) {
- logger.warn("Error in export transparent hugepage compaction status.", e);
- }
-
- try {
- String vmSwapinessPath = "/proc/sys/vm/swappiness";
- Files.copy(new File(vmSwapinessPath), new File(vmSwappinessDir, "swappiness"));
- } catch (Exception e) {
- logger.warn("Error in export vm swapiness.", e);
- }
+ // export client
+ if (includeClient) {
+ String[] clientArgs = { "-destDir", new File(exportDir, "client").getAbsolutePath(), "-compress", "false", "-quiet", "false" };
+ ClientEnvExtractor clientEnvExtractor = new ClientEnvExtractor();
+ clientEnvExtractor.execute(clientArgs);
}
// export commit id
@@ -129,11 +111,7 @@ public class DiagnosisInfoCLI extends AbstractInfoExtractor {
try {
File basicDir = new File(exportDir, "basic");
FileUtils.forceMkdir(basicDir);
- String output = kylinConfig.getCliCommandExecutor().execute("ps -ef|grep kylin").getSecond();
- FileUtils.writeStringToFile(new File(basicDir, "process"), output);
- output = kylinConfig.getCliCommandExecutor().execute("lsb_release -a").getSecond();
- FileUtils.writeStringToFile(new File(basicDir, "lsb_release"), output);
- output = KylinVersion.getKylinClientInformation();
+ String output = KylinVersion.getKylinClientInformation();
FileUtils.writeStringToFile(new File(basicDir, "client"), output + "\n");
output = ToolUtil.getHBaseMetaStoreId();
FileUtils.writeStringToFile(new File(basicDir, "client"), output, true);
http://git-wip-us.apache.org/repos/asf/kylin/blob/79d1c6d5/tool/src/main/java/org/apache/kylin/tool/JobDiagnosisInfoCLI.java
----------------------------------------------------------------------
diff --git a/tool/src/main/java/org/apache/kylin/tool/JobDiagnosisInfoCLI.java b/tool/src/main/java/org/apache/kylin/tool/JobDiagnosisInfoCLI.java
index 63b71d2..85fd539 100644
--- a/tool/src/main/java/org/apache/kylin/tool/JobDiagnosisInfoCLI.java
+++ b/tool/src/main/java/org/apache/kylin/tool/JobDiagnosisInfoCLI.java
@@ -52,6 +52,9 @@ public class JobDiagnosisInfoCLI extends AbstractInfoExtractor {
@SuppressWarnings("static-access")
private static final Option OPTION_INCLUDE_YARN_LOGS = OptionBuilder.withArgName("includeYarnLogs").hasArg().isRequired(false).withDescription("set this to true if want to extract related yarn logs too. Default true").create("includeYarnLogs");
+ @SuppressWarnings("static-access")
+ private static final Option OPTION_INCLUDE_CLIENT = OptionBuilder.withArgName("includeClient").hasArg().isRequired(false).withDescription("Specify whether to include client info to extract. Default true.").create("includeClient");
+
private KylinConfig kylinConfig;
private ExecutableDao executableDao;
@@ -61,10 +64,11 @@ public class JobDiagnosisInfoCLI extends AbstractInfoExtractor {
public JobDiagnosisInfoCLI() {
super();
- packagePrefix = "job";
+ packageType = "job";
options.addOption(OPTION_JOB_ID);
options.addOption(OPTION_INCLUDE_CUBE);
+ options.addOption(OPTION_INCLUDE_CLIENT);
options.addOption(OPTION_INCLUDE_YARN_LOGS);
kylinConfig = KylinConfig.getInstanceFromEnv();
@@ -76,7 +80,9 @@ public class JobDiagnosisInfoCLI extends AbstractInfoExtractor {
String jobId = optionsHelper.getOptionValue(OPTION_JOB_ID);
boolean includeCube = optionsHelper.hasOption(OPTION_INCLUDE_CUBE) ? Boolean.valueOf(optionsHelper.getOptionValue(OPTION_INCLUDE_CUBE)) : true;
boolean includeYarnLogs = optionsHelper.hasOption(OPTION_INCLUDE_YARN_LOGS) ? Boolean.valueOf(optionsHelper.getOptionValue(OPTION_INCLUDE_YARN_LOGS)) : true;
+ boolean includeClient = optionsHelper.hasOption(OPTION_INCLUDE_CLIENT) ? Boolean.valueOf(optionsHelper.getOptionValue(OPTION_INCLUDE_CLIENT)) : true;
+ // dump job output
ExecutablePO executablePO = executableDao.getJob(jobId);
addRequired(ExecutableDao.pathOfJob(jobId));
addRequired(ExecutableDao.pathOfJobOutput(jobId));
@@ -87,9 +93,9 @@ public class JobDiagnosisInfoCLI extends AbstractInfoExtractor {
yarnLogsResources.add(task.getUuid());
}
}
-
extractResources(exportDir);
+ // dump cube metadata
if (includeCube) {
String cubeName = executablePO.getParams().get("cubeName");
if (!StringUtils.isEmpty(cubeName)) {
@@ -103,6 +109,7 @@ public class JobDiagnosisInfoCLI extends AbstractInfoExtractor {
}
}
+ // dump yarn logs
if (includeYarnLogs) {
logger.info("Start to related yarn job logs: " + jobId);
File yarnLogDir = new File(exportDir, "yarn");
@@ -112,6 +119,12 @@ public class JobDiagnosisInfoCLI extends AbstractInfoExtractor {
}
}
+ if (includeClient) {
+ String[] clientArgs = { "-destDir", new File(exportDir, "client").getAbsolutePath(), "-compress", "false", "-quiet", "false" };
+ ClientEnvExtractor clientEnvExtractor = new ClientEnvExtractor();
+ clientEnvExtractor.execute(clientArgs);
+ }
+
// export kylin logs
String[] logsArgs = { "-destDir", new File(exportDir, "logs").getAbsolutePath(), "-compress", "false", "-quiet", "false" };
KylinLogExtractor logExtractor = new KylinLogExtractor();
http://git-wip-us.apache.org/repos/asf/kylin/blob/79d1c6d5/tool/src/main/java/org/apache/kylin/tool/KylinLogExtractor.java
----------------------------------------------------------------------
diff --git a/tool/src/main/java/org/apache/kylin/tool/KylinLogExtractor.java b/tool/src/main/java/org/apache/kylin/tool/KylinLogExtractor.java
index 18a915d..5351c92 100644
--- a/tool/src/main/java/org/apache/kylin/tool/KylinLogExtractor.java
+++ b/tool/src/main/java/org/apache/kylin/tool/KylinLogExtractor.java
@@ -43,7 +43,7 @@ public class KylinLogExtractor extends AbstractInfoExtractor {
public KylinLogExtractor() {
super();
- packagePrefix = "logs";
+ packageType = "logs";
options.addOption(OPTION_LOG_PERIOD);
}
http://git-wip-us.apache.org/repos/asf/kylin/blob/79d1c6d5/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
index 982e388..24a7a37 100644
--- a/tool/src/main/java/org/apache/kylin/tool/ToolUtil.java
+++ b/tool/src/main/java/org/apache/kylin/tool/ToolUtil.java
@@ -52,4 +52,5 @@ public class ToolUtil {
return "MetaStore UUID: " + desc.getValue(HBaseConnection.HTABLE_UUID_TAG);
}
}
+
}