You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@kylin.apache.org by sh...@apache.org on 2018/08/14 09:48:41 UTC

[kylin] branch master updated: KYLIN-3317, replace UUID.randomUUID with new UUID(ThreadLocalRandom.current().nextLong(), ThreadLocalRandom.current().nextLong()).

This is an automated email from the ASF dual-hosted git repository.

shaofengshi pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/kylin.git


The following commit(s) were added to refs/heads/master by this push:
     new 6483798  KYLIN-3317, replace UUID.randomUUID with new UUID(ThreadLocalRandom.current().nextLong(), ThreadLocalRandom.current().nextLong()).
6483798 is described below

commit 648379867850f4dba6187efe6fd22e2b57d5580e
Author: tttMelody <24...@qq.com>
AuthorDate: Mon Aug 13 15:01:40 2018 +0800

    KYLIN-3317, replace UUID.randomUUID with new UUID(ThreadLocalRandom.current().nextLong(), ThreadLocalRandom.current().nextLong()).
---
 .../java/org/apache/kylin/common/QueryContext.java |  4 +--
 .../kylin/common/persistence/ResourceStore.java    |  4 +--
 .../common/persistence/RootPersistentEntity.java   |  4 +--
 .../org/apache/kylin/common/util/RandomUtil.java   | 28 +++++++++++++++++++
 .../apache/kylin/common/util/RandomUtilTest.java   | 32 ++++++++++++++++++++++
 .../java/org/apache/kylin/cube/CubeManager.java    |  6 ++--
 .../org/apache/kylin/cube/CubeInstanceTest.java    |  6 ++--
 .../dict/global/SegmentAppendTrieDictBuilder.java  |  4 +--
 .../kylin/dict/AppendTrieDictionaryTest.java       |  7 +++--
 .../kylin/dict/TrieDictionaryForestBenchmark.java  | 12 ++++----
 .../lookup/cache/RocksDBLookupTableCacheTest.java  | 10 +++----
 .../kylin/job/execution/AbstractExecutable.java    |  4 +--
 .../kylin/metadata/TableMetadataManager.java       |  6 ++--
 .../badquery/BadQueryHistoryManagerTest.java       |  8 +++---
 .../kylin/engine/mr/SortedColumnReaderTest.java    |  3 +-
 .../mr/steps/FactDistinctColumnsReducerTest.java   |  4 +--
 .../engine/mr/steps/SelfDefineSortableKeyTest.java |  3 +-
 .../kylin/job/BaseTestDistributedScheduler.java    |  6 ++--
 .../kylin/provision/BuildCubeWithStream.java       |  6 ++--
 .../java/org/apache/kylin/provision/MockKafka.java |  6 ++--
 .../kylin/rest/controller/CubeController.java      |  4 +--
 .../rest/controller/ExternalFilterController.java  |  4 +--
 .../kylin/rest/controller/ModelController.java     |  4 +--
 .../kylin/rest/controller/StreamingController.java |  6 ++--
 .../apache/kylin/rest/service/TableService.java    | 14 +++++-----
 .../kylin/rest/service/BadQueryDetectorTest.java   |  4 +--
 .../kylin/rest/service/CacheServiceTest.java       |  4 +--
 .../kylin/rest/service/KylinQueryTimeoutTest.java  |  4 +--
 .../kylin/source/hive/HiveMetadataExplorer.java    |  5 ++--
 .../org/apache/kylin/source/jdbc/JdbcExplorer.java |  5 ++--
 .../apache/kylin/source/hive/HiveMRInputTest.java  |  4 +--
 .../source/kafka/util/KafkaSampleProducer.java     |  4 +--
 .../kylin/storage/hbase/HBaseResourceStore.java    |  4 +--
 .../storage/hbase/lookup/HBaseLookupMRSteps.java   |  4 +--
 .../storage/hbase/steps/HFileOutputFormat3.java    |  8 +++---
 .../tool/metrics/systemcube/KylinTableCreator.java |  4 +--
 36 files changed, 155 insertions(+), 90 deletions(-)

diff --git a/core-common/src/main/java/org/apache/kylin/common/QueryContext.java b/core-common/src/main/java/org/apache/kylin/common/QueryContext.java
index 66b9871..ef288c7 100644
--- a/core-common/src/main/java/org/apache/kylin/common/QueryContext.java
+++ b/core-common/src/main/java/org/apache/kylin/common/QueryContext.java
@@ -22,11 +22,11 @@ import java.io.Serializable;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
-import java.util.UUID;
 import java.util.concurrent.atomic.AtomicBoolean;
 import java.util.concurrent.atomic.AtomicLong;
 
 import org.apache.kylin.common.exceptions.KylinTimeoutException;
+import org.apache.kylin.common.util.RandomUtil;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -67,7 +67,7 @@ public class QueryContext {
     }
 
     QueryContext(long startMills) {
-        queryId = UUID.randomUUID().toString();
+        queryId = RandomUtil.randomUUID().toString();
         queryStartMillis = startMills;
     }
 
diff --git a/core-common/src/main/java/org/apache/kylin/common/persistence/ResourceStore.java b/core-common/src/main/java/org/apache/kylin/common/persistence/ResourceStore.java
index a71db45..36bb595 100644
--- a/core-common/src/main/java/org/apache/kylin/common/persistence/ResourceStore.java
+++ b/core-common/src/main/java/org/apache/kylin/common/persistence/ResourceStore.java
@@ -32,7 +32,6 @@ import java.util.Collections;
 import java.util.LinkedHashMap;
 import java.util.List;
 import java.util.NavigableSet;
-import java.util.UUID;
 import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.ConcurrentMap;
 
@@ -42,6 +41,7 @@ import org.apache.kylin.common.KylinConfig;
 import org.apache.kylin.common.StorageURL;
 import org.apache.kylin.common.util.ClassUtil;
 import org.apache.kylin.common.util.OptionsHelper;
+import org.apache.kylin.common.util.RandomUtil;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -147,7 +147,7 @@ abstract public class ResourceStore {
     abstract protected NavigableSet<String> listResourcesImpl(String folderPath, boolean recursive) throws IOException;
 
     protected String createMetaStoreUUID() throws IOException {
-        return UUID.randomUUID().toString();
+        return RandomUtil.randomUUID().toString();
     }
 
     public String getMetaStoreUUID() throws IOException {
diff --git a/core-common/src/main/java/org/apache/kylin/common/persistence/RootPersistentEntity.java b/core-common/src/main/java/org/apache/kylin/common/persistence/RootPersistentEntity.java
index 39c2995..a4877f2 100644
--- a/core-common/src/main/java/org/apache/kylin/common/persistence/RootPersistentEntity.java
+++ b/core-common/src/main/java/org/apache/kylin/common/persistence/RootPersistentEntity.java
@@ -21,10 +21,10 @@ package org.apache.kylin.common.persistence;
 import java.io.Serializable;
 import java.text.DateFormat;
 import java.text.SimpleDateFormat;
-import java.util.UUID;
 
 import org.apache.commons.lang.time.FastDateFormat;
 import org.apache.kylin.common.KylinVersion;
+import org.apache.kylin.common.util.RandomUtil;
 
 import com.fasterxml.jackson.annotation.JsonAutoDetect;
 import com.fasterxml.jackson.annotation.JsonAutoDetect.Visibility;
@@ -99,7 +99,7 @@ abstract public class RootPersistentEntity implements AclEntity, Serializable {
     }
 
     public void updateRandomUuid() {
-        setUuid(UUID.randomUUID().toString());
+        setUuid(RandomUtil.randomUUID().toString());
     }
     
     public boolean isCachedAndShared() {
diff --git a/core-common/src/main/java/org/apache/kylin/common/util/RandomUtil.java b/core-common/src/main/java/org/apache/kylin/common/util/RandomUtil.java
new file mode 100644
index 0000000..00be8dd
--- /dev/null
+++ b/core-common/src/main/java/org/apache/kylin/common/util/RandomUtil.java
@@ -0,0 +1,28 @@
+/*
+ * 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.common.util;
+
+import java.util.UUID;
+import java.util.concurrent.ThreadLocalRandom;
+
+public class RandomUtil {
+    public static UUID randomUUID() {
+        return new UUID(ThreadLocalRandom.current().nextLong(), ThreadLocalRandom.current().nextLong());
+    }
+}
diff --git a/core-common/src/test/java/org/apache/kylin/common/util/RandomUtilTest.java b/core-common/src/test/java/org/apache/kylin/common/util/RandomUtilTest.java
new file mode 100644
index 0000000..c98fa83
--- /dev/null
+++ b/core-common/src/test/java/org/apache/kylin/common/util/RandomUtilTest.java
@@ -0,0 +1,32 @@
+/*
+ * 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.common.util;
+
+import java.util.UUID;
+
+import org.junit.Assert;
+import org.junit.Test;
+
+public class RandomUtilTest {
+    @Test
+    public void testRandomUUID() {
+        Assert.assertEquals(RandomUtil.randomUUID().toString().length(), UUID.randomUUID().toString().length());
+        Assert.assertNotEquals(RandomUtil.randomUUID().toString(), RandomUtil.randomUUID().toString());
+    }
+}
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 bde2f8f..6c177a0 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
@@ -28,11 +28,9 @@ import java.util.List;
 import java.util.Map;
 import java.util.Random;
 import java.util.Set;
-import java.util.UUID;
 import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.ConcurrentMap;
 
-import com.google.common.collect.Maps;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.kylin.common.KylinConfig;
 import org.apache.kylin.common.persistence.JsonSerializer;
@@ -43,6 +41,7 @@ import org.apache.kylin.common.util.AutoReadWriteLock;
 import org.apache.kylin.common.util.AutoReadWriteLock.AutoLock;
 import org.apache.kylin.common.util.Dictionary;
 import org.apache.kylin.common.util.Pair;
+import org.apache.kylin.common.util.RandomUtil;
 import org.apache.kylin.cube.cuboid.Cuboid;
 import org.apache.kylin.cube.model.CubeDesc;
 import org.apache.kylin.cube.model.SnapshotTableDesc;
@@ -82,6 +81,7 @@ import org.slf4j.LoggerFactory;
 import com.google.common.annotations.VisibleForTesting;
 import com.google.common.base.Preconditions;
 import com.google.common.collect.Lists;
+import com.google.common.collect.Maps;
 import com.google.common.collect.Sets;
 
 /**
@@ -836,7 +836,7 @@ public class CubeManager implements IRealizationProvider {
             DataModelDesc modelDesc = cube.getModel();
 
             CubeSegment segment = new CubeSegment();
-            segment.setUuid(UUID.randomUUID().toString());
+            segment.setUuid(RandomUtil.randomUUID().toString());
             segment.setName(CubeSegment.makeSegmentName(tsRange, segRange, modelDesc));
             segment.setCreateTimeUTC(System.currentTimeMillis());
             segment.setCubeInstance(cube);
diff --git a/core-cube/src/test/java/org/apache/kylin/cube/CubeInstanceTest.java b/core-cube/src/test/java/org/apache/kylin/cube/CubeInstanceTest.java
index dd3b12b..4e89658 100644
--- a/core-cube/src/test/java/org/apache/kylin/cube/CubeInstanceTest.java
+++ b/core-cube/src/test/java/org/apache/kylin/cube/CubeInstanceTest.java
@@ -24,9 +24,9 @@ import java.io.InputStream;
 import java.util.Collections;
 import java.util.List;
 import java.util.Map;
-import java.util.UUID;
 
 import org.apache.kylin.common.persistence.JsonSerializer;
+import org.apache.kylin.common.util.RandomUtil;
 import org.apache.kylin.cube.cuboid.TreeCuboidScheduler;
 import org.apache.kylin.metadata.model.SegmentStatusEnum;
 import org.junit.Assert;
@@ -66,8 +66,8 @@ public class CubeInstanceTest {
         CubeInstance newCubeInstance = CubeInstance.getCopyOf(cubeInstance);
 
         CubeSegment mockSeg = new CubeSegment();
-        mockSeg.setUuid(UUID.randomUUID().toString());
-        mockSeg.setStorageLocationIdentifier(UUID.randomUUID().toString());
+        mockSeg.setUuid(RandomUtil.randomUUID().toString());
+        mockSeg.setStorageLocationIdentifier(RandomUtil.randomUUID().toString());
         mockSeg.setStatus(SegmentStatusEnum.READY);
         newCubeInstance.getSegments().add(mockSeg);
 
diff --git a/core-dictionary/src/main/java/org/apache/kylin/dict/global/SegmentAppendTrieDictBuilder.java b/core-dictionary/src/main/java/org/apache/kylin/dict/global/SegmentAppendTrieDictBuilder.java
index cfc1f98..05dd5d2 100644
--- a/core-dictionary/src/main/java/org/apache/kylin/dict/global/SegmentAppendTrieDictBuilder.java
+++ b/core-dictionary/src/main/java/org/apache/kylin/dict/global/SegmentAppendTrieDictBuilder.java
@@ -19,10 +19,10 @@
 package org.apache.kylin.dict.global;
 
 import java.io.IOException;
-import java.util.UUID;
 
 import org.apache.kylin.common.KylinConfig;
 import org.apache.kylin.common.util.Dictionary;
+import org.apache.kylin.common.util.RandomUtil;
 import org.apache.kylin.dict.DictionaryInfo;
 import org.apache.kylin.dict.IDictionaryBuilder;
 
@@ -50,7 +50,7 @@ public class SegmentAppendTrieDictBuilder implements IDictionaryBuilder {
 
         //use UUID to make each segment dict in different HDFS dir and support concurrent build
         //use timestamp to make the segment dict easily to delete
-        String baseDir = hdfsDir + "resources/SegmentDict" + dictInfo.getResourceDir() + "/" + UUID.randomUUID().toString() + "_" + System.currentTimeMillis()+ "/";
+        String baseDir = hdfsDir + "resources/SegmentDict" + dictInfo.getResourceDir() + "/" + RandomUtil.randomUUID().toString() + "_" + System.currentTimeMillis()+ "/";
 
         this.builder = new AppendTrieDictionaryBuilder(baseDir, maxEntriesPerSlice, false);
         this.baseId = baseId;
diff --git a/core-dictionary/src/test/java/org/apache/kylin/dict/AppendTrieDictionaryTest.java b/core-dictionary/src/test/java/org/apache/kylin/dict/AppendTrieDictionaryTest.java
index 36ca66e..ea61c61 100644
--- a/core-dictionary/src/test/java/org/apache/kylin/dict/AppendTrieDictionaryTest.java
+++ b/core-dictionary/src/test/java/org/apache/kylin/dict/AppendTrieDictionaryTest.java
@@ -43,14 +43,13 @@ import java.util.List;
 import java.util.Map;
 import java.util.Random;
 import java.util.TreeMap;
-import java.util.UUID;
 
-import com.google.common.collect.Lists;
 import org.apache.hadoop.fs.FileSystem;
 import org.apache.hadoop.fs.Path;
 import org.apache.kylin.common.KylinConfig;
 import org.apache.kylin.common.util.HadoopUtil;
 import org.apache.kylin.common.util.LocalFileMetadataTestCase;
+import org.apache.kylin.common.util.RandomUtil;
 import org.apache.kylin.dict.global.AppendDictSliceKey;
 import org.apache.kylin.dict.global.AppendTrieDictionaryBuilder;
 import org.apache.kylin.dict.global.GlobalDictHDFSStore;
@@ -60,8 +59,10 @@ import org.junit.Before;
 import org.junit.Ignore;
 import org.junit.Test;
 
+import com.google.common.collect.Lists;
+
 public class AppendTrieDictionaryTest extends LocalFileMetadataTestCase {
-    private static final String RESOURCE_DIR = "/dict/append_dict_test/" + UUID.randomUUID();
+    private static final String RESOURCE_DIR = "/dict/append_dict_test/" + RandomUtil.randomUUID();
     private static String BASE_DIR;
     private static String LOCAL_BASE_DIR;
 
diff --git a/core-dictionary/src/test/java/org/apache/kylin/dict/TrieDictionaryForestBenchmark.java b/core-dictionary/src/test/java/org/apache/kylin/dict/TrieDictionaryForestBenchmark.java
index adc1074..9620f44 100644
--- a/core-dictionary/src/test/java/org/apache/kylin/dict/TrieDictionaryForestBenchmark.java
+++ b/core-dictionary/src/test/java/org/apache/kylin/dict/TrieDictionaryForestBenchmark.java
@@ -18,16 +18,16 @@
 
 package org.apache.kylin.dict;
 
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Random;
+
 import org.apache.kylin.common.util.Dictionary;
+import org.apache.kylin.common.util.RandomUtil;
 import org.junit.Before;
 import org.junit.Ignore;
 import org.junit.Test;
 
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.Random;
-import java.util.UUID;
-
 /**
  * Created by xiefan on 16-12-28.
  */
@@ -166,7 +166,7 @@ public class TrieDictionaryForestBenchmark {
     private ArrayList<String> genStringDataSet(int totalSize) {
         ArrayList<String> data = new ArrayList<>();
         for (int i = 0; i < totalSize; i++) {
-            data.add(UUID.randomUUID().toString());
+            data.add(RandomUtil.randomUUID().toString());
         }
         Collections.sort(data);
         return data;
diff --git a/core-dictionary/src/test/java/org/apache/kylin/dict/lookup/cache/RocksDBLookupTableCacheTest.java b/core-dictionary/src/test/java/org/apache/kylin/dict/lookup/cache/RocksDBLookupTableCacheTest.java
index fb78591..747fe23 100644
--- a/core-dictionary/src/test/java/org/apache/kylin/dict/lookup/cache/RocksDBLookupTableCacheTest.java
+++ b/core-dictionary/src/test/java/org/apache/kylin/dict/lookup/cache/RocksDBLookupTableCacheTest.java
@@ -28,12 +28,12 @@ import java.io.File;
 import java.io.IOException;
 import java.util.Iterator;
 import java.util.Random;
-import java.util.UUID;
 
 import org.apache.commons.io.FileUtils;
 import org.apache.kylin.common.KylinConfig;
 import org.apache.kylin.common.util.Array;
 import org.apache.kylin.common.util.LocalFileMetadataTestCase;
+import org.apache.kylin.common.util.RandomUtil;
 import org.apache.kylin.dict.lookup.ExtTableSnapshotInfo;
 import org.apache.kylin.dict.lookup.ExtTableSnapshotInfoManager;
 import org.apache.kylin.dict.lookup.IExtLookupProvider;
@@ -81,7 +81,7 @@ public class RocksDBLookupTableCacheTest extends LocalFileMetadataTestCase {
 
     @Test
     public void testBuildTableCache() throws Exception {
-        String snapshotID = UUID.randomUUID().toString();
+        String snapshotID = RandomUtil.randomUUID().toString();
         ExtTableSnapshotInfo snapshotInfo = buildSnapshotCache(snapshotID, 100000);
         assertEquals(CacheState.AVAILABLE, RocksDBLookupTableCache.getInstance(kylinConfig).getCacheState(snapshotInfo));
     }
@@ -107,7 +107,7 @@ public class RocksDBLookupTableCacheTest extends LocalFileMetadataTestCase {
 
     @Test
     public void testRestoreCacheFromFiles() throws Exception {
-        String snapshotID = UUID.randomUUID().toString();
+        String snapshotID = RandomUtil.randomUUID().toString();
         String snapshotCacheBasePath = RocksDBLookupTableCache.getCacheBasePath(kylinConfig) + File.separator
                 + TABLE_COUNTRY + File.separator + snapshotID;
         String dbPath = snapshotCacheBasePath + File.separator + "db";
@@ -137,14 +137,14 @@ public class RocksDBLookupTableCacheTest extends LocalFileMetadataTestCase {
         int snapshotNum = 10;
         int snapshotRowCnt = 100000;
         for (int i = 0; i < snapshotNum; i++) {
-            buildSnapshotCache(UUID.randomUUID().toString(), snapshotRowCnt);
+            buildSnapshotCache(RandomUtil.randomUUID().toString(), snapshotRowCnt);
         }
         assertTrue(RocksDBLookupTableCache.getInstance(kylinConfig).getTotalCacheSize() < 0.006 * 1024 * 1024 * 1024);
     }
 
     @Test
     public void testCheckCacheState() throws Exception {
-        ExtTableSnapshotInfo snapshotInfo = buildSnapshotCache(UUID.randomUUID().toString(), 1000);
+        ExtTableSnapshotInfo snapshotInfo = buildSnapshotCache(RandomUtil.randomUUID().toString(), 1000);
         RocksDBLookupTableCache cache = RocksDBLookupTableCache.getInstance(kylinConfig);
         ILookupTable cachedLookupTable = cache.getCachedLookupTable(tableDesc, snapshotInfo, false);
         assertNotNull(cachedLookupTable);
diff --git a/core-job/src/main/java/org/apache/kylin/job/execution/AbstractExecutable.java b/core-job/src/main/java/org/apache/kylin/job/execution/AbstractExecutable.java
index 1a534e1..7fc9eaf 100644
--- a/core-job/src/main/java/org/apache/kylin/job/execution/AbstractExecutable.java
+++ b/core-job/src/main/java/org/apache/kylin/job/execution/AbstractExecutable.java
@@ -23,7 +23,6 @@ import java.io.StringWriter;
 import java.util.Collections;
 import java.util.List;
 import java.util.Map;
-import java.util.UUID;
 import java.util.regex.Matcher;
 
 import org.apache.commons.lang.StringUtils;
@@ -31,6 +30,7 @@ import org.apache.commons.lang3.ArrayUtils;
 import org.apache.kylin.common.KylinConfig;
 import org.apache.kylin.common.util.MailService;
 import org.apache.kylin.common.util.Pair;
+import org.apache.kylin.common.util.RandomUtil;
 import org.apache.kylin.common.util.StringUtil;
 import org.apache.kylin.job.exception.ExecuteException;
 import org.apache.kylin.job.exception.PersistentException;
@@ -65,7 +65,7 @@ public abstract class AbstractExecutable implements Executable, Idempotent {
     private Map<String, String> params = Maps.newHashMap();
 
     public AbstractExecutable() {
-        setId(UUID.randomUUID().toString());
+        setId(RandomUtil.randomUUID().toString());
     }
 
     protected void initConfig(KylinConfig config) {
diff --git a/core-metadata/src/main/java/org/apache/kylin/metadata/TableMetadataManager.java b/core-metadata/src/main/java/org/apache/kylin/metadata/TableMetadataManager.java
index 116e210..f3959fa 100644
--- a/core-metadata/src/main/java/org/apache/kylin/metadata/TableMetadataManager.java
+++ b/core-metadata/src/main/java/org/apache/kylin/metadata/TableMetadataManager.java
@@ -25,7 +25,6 @@ import java.util.LinkedHashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
-import java.util.UUID;
 
 import org.apache.kylin.common.KylinConfig;
 import org.apache.kylin.common.persistence.JsonSerializer;
@@ -36,6 +35,7 @@ import org.apache.kylin.common.util.AutoReadWriteLock;
 import org.apache.kylin.common.util.AutoReadWriteLock.AutoLock;
 import org.apache.kylin.common.util.JsonUtil;
 import org.apache.kylin.common.util.Pair;
+import org.apache.kylin.common.util.RandomUtil;
 import org.apache.kylin.metadata.cachesync.Broadcaster;
 import org.apache.kylin.metadata.cachesync.Broadcaster.Event;
 import org.apache.kylin.metadata.cachesync.CachedCrudAssist;
@@ -353,7 +353,7 @@ public class TableMetadataManager {
             if (null == result) {
                 result = new TableExtDesc();
                 result.setIdentity(t.getIdentity());
-                result.setUuid(UUID.randomUUID().toString());
+                result.setUuid(RandomUtil.randomUUID().toString());
                 result.setLastModified(0);
                 result.init(t.getProject());
                 srcExtMap.putLocal(mapKey(t.getIdentity(), t.getProject()), result);
@@ -426,7 +426,7 @@ public class TableMetadataManager {
         String tableIdentity = TableDesc.parseResourcePath(resourceName).getFirst();
         TableExtDesc result = new TableExtDesc();
         result.setIdentity(tableIdentity);
-        result.setUuid(UUID.randomUUID().toString());
+        result.setUuid(RandomUtil.randomUUID().toString());
         result.setLastModified(0);
         result.setCardinality(cardinality);
         return result;
diff --git a/core-metadata/src/test/java/org/apache/kylin/metadata/badquery/BadQueryHistoryManagerTest.java b/core-metadata/src/test/java/org/apache/kylin/metadata/badquery/BadQueryHistoryManagerTest.java
index 5001cd2..436eb10 100644
--- a/core-metadata/src/test/java/org/apache/kylin/metadata/badquery/BadQueryHistoryManagerTest.java
+++ b/core-metadata/src/test/java/org/apache/kylin/metadata/badquery/BadQueryHistoryManagerTest.java
@@ -23,11 +23,11 @@ import static org.junit.Assert.assertTrue;
 
 import java.io.IOException;
 import java.util.NavigableSet;
-import java.util.UUID;
 
 import org.apache.kylin.common.KylinConfig;
 import org.apache.kylin.common.util.JsonUtil;
 import org.apache.kylin.common.util.LocalFileMetadataTestCase;
+import org.apache.kylin.common.util.RandomUtil;
 import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
@@ -67,7 +67,7 @@ public class BadQueryHistoryManagerTest extends LocalFileMetadataTestCase {
         KylinConfig kylinConfig = getTestConfig();
         BadQueryHistoryManager manager = BadQueryHistoryManager.getInstance(kylinConfig);
         BadQueryEntry entry = new BadQueryEntry("sql", "adj", 1459362239992L, 100, "server", "t-0", "user",
-                UUID.randomUUID().toString());
+                RandomUtil.randomUUID().toString());
         BadQueryHistory history = manager.upsertEntryToProject(entry, "default");
         NavigableSet<BadQueryEntry> entries = history.getEntries();
         assertEquals(4, entries.size());
@@ -84,7 +84,7 @@ public class BadQueryHistoryManagerTest extends LocalFileMetadataTestCase {
 
         for (int i = 0; i < kylinConfig.getBadQueryHistoryNum(); i++) {
             BadQueryEntry tmp = new BadQueryEntry("sql", "adj", 1459362239993L + i, 100 + i, "server", "t-0", "user",
-                    UUID.randomUUID().toString());
+                    RandomUtil.randomUUID().toString());
             history = manager.upsertEntryToProject(tmp, "default");
         }
         assertEquals(kylinConfig.getBadQueryHistoryNum(), history.getEntries().size());
@@ -95,7 +95,7 @@ public class BadQueryHistoryManagerTest extends LocalFileMetadataTestCase {
         KylinConfig kylinConfig = getTestConfig();
         BadQueryHistoryManager manager = BadQueryHistoryManager.getInstance(kylinConfig);
 
-        String queryId = UUID.randomUUID().toString();
+        String queryId = RandomUtil.randomUUID().toString();
         manager.upsertEntryToProject(
                 new BadQueryEntry("sql", "adj", 1459362239000L, 100, "server", "t-0", "user", queryId),
                 "default");
diff --git a/engine-mr/src/test/java/org/apache/kylin/engine/mr/SortedColumnReaderTest.java b/engine-mr/src/test/java/org/apache/kylin/engine/mr/SortedColumnReaderTest.java
index 346a3ef..29e2f65 100644
--- a/engine-mr/src/test/java/org/apache/kylin/engine/mr/SortedColumnReaderTest.java
+++ b/engine-mr/src/test/java/org/apache/kylin/engine/mr/SortedColumnReaderTest.java
@@ -32,6 +32,7 @@ import java.util.Random;
 import java.util.UUID;
 
 import org.apache.kylin.common.util.LocalFileMetadataTestCase;
+import org.apache.kylin.common.util.RandomUtil;
 import org.apache.kylin.dict.ByteComparator;
 import org.apache.kylin.dict.BytesConverter;
 import org.apache.kylin.dict.IDictionaryValueEnumerator;
@@ -84,7 +85,7 @@ public class SortedColumnReaderTest extends LocalFileMetadataTestCase {
         ArrayList<String> data = new ArrayList<>();
         int num = 10000;
         for (int i = 0; i < num; i++) {
-            UUID uuid = UUID.randomUUID();
+            UUID uuid = RandomUtil.randomUUID();
             data.add(uuid.toString());
         }
         Collections.sort(data, new ByteComparator<String>(new StringBytesConverter()));
diff --git a/engine-mr/src/test/java/org/apache/kylin/engine/mr/steps/FactDistinctColumnsReducerTest.java b/engine-mr/src/test/java/org/apache/kylin/engine/mr/steps/FactDistinctColumnsReducerTest.java
index c971cef..d13da3c 100644
--- a/engine-mr/src/test/java/org/apache/kylin/engine/mr/steps/FactDistinctColumnsReducerTest.java
+++ b/engine-mr/src/test/java/org/apache/kylin/engine/mr/steps/FactDistinctColumnsReducerTest.java
@@ -21,12 +21,12 @@ package org.apache.kylin.engine.mr.steps;
 import java.io.File;
 import java.io.IOException;
 import java.util.Map;
-import java.util.UUID;
 
 import org.apache.hadoop.conf.Configuration;
 import org.apache.hadoop.fs.FileSystem;
 import org.apache.hadoop.fs.Path;
 import org.apache.kylin.common.util.HadoopUtil;
+import org.apache.kylin.common.util.RandomUtil;
 import org.apache.kylin.engine.mr.common.CubeStatsWriter;
 import org.apache.kylin.measure.hllc.HLLCounter;
 import org.junit.Test;
@@ -42,7 +42,7 @@ public class FactDistinctColumnsReducerTest {
 
         final Configuration conf = HadoopUtil.getCurrentConfiguration();
         File tmp = File.createTempFile("cuboidstatistics", "");
-        final Path outputPath = new Path(tmp.getParent().toString() + File.separator + UUID.randomUUID().toString());
+        final Path outputPath = new Path(tmp.getParent().toString() + File.separator + RandomUtil.randomUUID().toString());
         if (!FileSystem.getLocal(conf).exists(outputPath)) {
             //            FileSystem.getLocal(conf).create(outputPath);
         }
diff --git a/engine-mr/src/test/java/org/apache/kylin/engine/mr/steps/SelfDefineSortableKeyTest.java b/engine-mr/src/test/java/org/apache/kylin/engine/mr/steps/SelfDefineSortableKeyTest.java
index 551998f..f505a7a 100644
--- a/engine-mr/src/test/java/org/apache/kylin/engine/mr/steps/SelfDefineSortableKeyTest.java
+++ b/engine-mr/src/test/java/org/apache/kylin/engine/mr/steps/SelfDefineSortableKeyTest.java
@@ -32,6 +32,7 @@ import java.util.UUID;
 import org.apache.hadoop.io.Text;
 import org.apache.kylin.common.util.ByteArray;
 import org.apache.kylin.common.util.Bytes;
+import org.apache.kylin.common.util.RandomUtil;
 import org.junit.Test;
 
 /**
@@ -114,7 +115,7 @@ public class SelfDefineSortableKeyTest {
         int count = 10;
         ArrayList<String> strList = new ArrayList<>();
         for (int i = 0; i < count; i++) {
-            UUID uuid = UUID.randomUUID();
+            UUID uuid = RandomUtil.randomUUID();
             strList.add(uuid.toString());
         }
         strList.add("hello");
diff --git a/kylin-it/src/test/java/org/apache/kylin/job/BaseTestDistributedScheduler.java b/kylin-it/src/test/java/org/apache/kylin/job/BaseTestDistributedScheduler.java
index ec6faf2..be54dce 100644
--- a/kylin-it/src/test/java/org/apache/kylin/job/BaseTestDistributedScheduler.java
+++ b/kylin-it/src/test/java/org/apache/kylin/job/BaseTestDistributedScheduler.java
@@ -20,7 +20,6 @@ package org.apache.kylin.job;
 
 import java.io.File;
 import java.nio.charset.Charset;
-import java.util.UUID;
 
 import org.apache.commons.io.FileUtils;
 import org.apache.commons.lang3.StringUtils;
@@ -31,6 +30,7 @@ import org.apache.curator.framework.imps.CuratorFrameworkState;
 import org.apache.curator.retry.ExponentialBackoffRetry;
 import org.apache.kylin.common.KylinConfig;
 import org.apache.kylin.common.util.HBaseMetadataTestCase;
+import org.apache.kylin.common.util.RandomUtil;
 import org.apache.kylin.job.engine.JobEngineConfig;
 import org.apache.kylin.job.execution.AbstractExecutable;
 import org.apache.kylin.job.execution.ExecutableManager;
@@ -57,8 +57,8 @@ public class BaseTestDistributedScheduler extends HBaseMetadataTestCase {
     static File localMetaDir;
     static String backup;
 
-    static final String jobId1 = "job1" + UUID.randomUUID();
-    static final String jobId2 = "job2" + UUID.randomUUID();
+    static final String jobId1 = "job1" + RandomUtil.randomUUID();
+    static final String jobId2 = "job2" + RandomUtil.randomUUID();
     static final String serverName1 = "serverName1";
     static final String serverName2 = "serverName2";
     static final String confDstPath1 = "target/kylin_metadata_dist_lock_test1/kylin.properties";
diff --git a/kylin-it/src/test/java/org/apache/kylin/provision/BuildCubeWithStream.java b/kylin-it/src/test/java/org/apache/kylin/provision/BuildCubeWithStream.java
index 216ccc1..97a9c9c 100644
--- a/kylin-it/src/test/java/org/apache/kylin/provision/BuildCubeWithStream.java
+++ b/kylin-it/src/test/java/org/apache/kylin/provision/BuildCubeWithStream.java
@@ -27,7 +27,6 @@ import java.text.SimpleDateFormat;
 import java.util.List;
 import java.util.Random;
 import java.util.TimeZone;
-import java.util.UUID;
 import java.util.concurrent.Callable;
 import java.util.concurrent.ExecutorService;
 import java.util.concurrent.Executors;
@@ -44,6 +43,7 @@ import org.apache.kafka.common.requests.MetadataResponse;
 import org.apache.kylin.common.KylinConfig;
 import org.apache.kylin.common.util.ClassUtil;
 import org.apache.kylin.common.util.HBaseMetadataTestCase;
+import org.apache.kylin.common.util.RandomUtil;
 import org.apache.kylin.cube.CubeInstance;
 import org.apache.kylin.cube.CubeManager;
 import org.apache.kylin.cube.CubeSegment;
@@ -90,7 +90,7 @@ public class BuildCubeWithStream {
     private KafkaConfig kafkaConfig;
     private MockKafka kafkaServer;
     private ZkConnection zkConnection;
-    private final String kafkaZkPath = "/kylin/streaming/" + UUID.randomUUID().toString();
+    private final String kafkaZkPath = "/kylin/streaming/" + RandomUtil.randomUUID().toString();
 
     protected static boolean fastBuildMode = false;
     private volatile boolean generateData = true;
@@ -125,7 +125,7 @@ public class BuildCubeWithStream {
         final StreamingConfig streamingConfig = streamingManager.getStreamingConfig(factTable);
         kafkaConfig = KafkaConfigManager.getInstance(kylinConfig).getKafkaConfig(streamingConfig.getName());
 
-        String topicName = UUID.randomUUID().toString();
+        String topicName = RandomUtil.randomUUID().toString();
         String localIp = NetworkUtils.getLocalIp();
         BrokerConfig brokerConfig = kafkaConfig.getKafkaClusterConfigs().get(0).getBrokerConfigs().get(0);
         brokerConfig.setHost(localIp);
diff --git a/kylin-it/src/test/java/org/apache/kylin/provision/MockKafka.java b/kylin-it/src/test/java/org/apache/kylin/provision/MockKafka.java
index fce422a..db2b948 100644
--- a/kylin-it/src/test/java/org/apache/kylin/provision/MockKafka.java
+++ b/kylin-it/src/test/java/org/apache/kylin/provision/MockKafka.java
@@ -22,13 +22,13 @@ import java.util.Iterator;
 import java.util.List;
 import java.util.Properties;
 import java.util.Random;
-import java.util.UUID;
 
 import org.I0Itec.zkclient.ZkClient;
 import org.I0Itec.zkclient.ZkConnection;
 import org.I0Itec.zkclient.exception.ZkMarshallingError;
 import org.I0Itec.zkclient.serialize.ZkSerializer;
 import org.apache.kafka.common.requests.MetadataResponse;
+import org.apache.kylin.common.util.RandomUtil;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -59,7 +59,7 @@ public class MockKafka {
     private ZkConnection zkConnection;
 
     public MockKafka(ZkConnection zkServerConnection) {
-        this(zkServerConnection, System.getProperty("java.io.tmpdir") + "/" + UUID.randomUUID().toString(), "9092", "1");
+        this(zkServerConnection, System.getProperty("java.io.tmpdir") + "/" + RandomUtil.randomUUID().toString(), "9092", "1");
         start();
     }
 
@@ -69,7 +69,7 @@ public class MockKafka {
     }
 
     public MockKafka(ZkConnection zkServerConnection, int port, int brokerId) {
-        this(zkServerConnection, System.getProperty("java.io.tmpdir") + "/" + UUID.randomUUID().toString(), String.valueOf(port), String.valueOf(brokerId));
+        this(zkServerConnection, System.getProperty("java.io.tmpdir") + "/" + RandomUtil.randomUUID().toString(), String.valueOf(port), String.valueOf(brokerId));
         //start();
     }
 
diff --git a/server-base/src/main/java/org/apache/kylin/rest/controller/CubeController.java b/server-base/src/main/java/org/apache/kylin/rest/controller/CubeController.java
index f610d5c..3f30ab9 100644
--- a/server-base/src/main/java/org/apache/kylin/rest/controller/CubeController.java
+++ b/server-base/src/main/java/org/apache/kylin/rest/controller/CubeController.java
@@ -26,12 +26,12 @@ import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
-import java.util.UUID;
 
 import javax.servlet.http.HttpServletResponse;
 
 import org.apache.commons.lang.StringUtils;
 import org.apache.kylin.common.util.JsonUtil;
+import org.apache.kylin.common.util.RandomUtil;
 import org.apache.kylin.cube.CubeInstance;
 import org.apache.kylin.cube.CubeManager;
 import org.apache.kylin.cube.CubeSegment;
@@ -590,7 +590,7 @@ public class CubeController extends BasicController {
         }
 
         try {
-            desc.setUuid(UUID.randomUUID().toString());
+            desc.setUuid(RandomUtil.randomUUID().toString());
             String projectName = (null == cubeRequest.getProject()) ? ProjectInstance.DEFAULT_PROJECT_NAME
                     : cubeRequest.getProject();
             ProjectInstance project = cubeService.getProjectManager().getProject(projectName);
diff --git a/server-base/src/main/java/org/apache/kylin/rest/controller/ExternalFilterController.java b/server-base/src/main/java/org/apache/kylin/rest/controller/ExternalFilterController.java
index 4ae7656..c6a5500 100644
--- a/server-base/src/main/java/org/apache/kylin/rest/controller/ExternalFilterController.java
+++ b/server-base/src/main/java/org/apache/kylin/rest/controller/ExternalFilterController.java
@@ -22,9 +22,9 @@ import java.io.IOException;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
-import java.util.UUID;
 
 import org.apache.kylin.common.util.JsonUtil;
+import org.apache.kylin.common.util.RandomUtil;
 import org.apache.kylin.metadata.model.ExternalFilterDesc;
 import org.apache.kylin.rest.request.ExternalFilterRequest;
 import org.apache.kylin.rest.service.ExtFilterService;
@@ -60,7 +60,7 @@ public class ExternalFilterController extends BasicController {
         Map<String, String> result = new HashMap();
         String filterProject = request.getProject();
         ExternalFilterDesc desc = JsonUtil.readValue(request.getExtFilter(), ExternalFilterDesc.class);
-        desc.setUuid(UUID.randomUUID().toString());
+        desc.setUuid(RandomUtil.randomUUID().toString());
         extFilterService.saveExternalFilter(desc);
         extFilterService.syncExtFilterToProject(new String[] { desc.getName() }, filterProject);
         result.put("success", "true");
diff --git a/server-base/src/main/java/org/apache/kylin/rest/controller/ModelController.java b/server-base/src/main/java/org/apache/kylin/rest/controller/ModelController.java
index 41c7889..a27e148 100644
--- a/server-base/src/main/java/org/apache/kylin/rest/controller/ModelController.java
+++ b/server-base/src/main/java/org/apache/kylin/rest/controller/ModelController.java
@@ -21,11 +21,11 @@ package org.apache.kylin.rest.controller;
 import java.io.IOException;
 import java.util.Iterator;
 import java.util.List;
-import java.util.UUID;
 
 import org.apache.commons.lang.StringUtils;
 import org.apache.kylin.common.KylinConfig;
 import org.apache.kylin.common.util.JsonUtil;
+import org.apache.kylin.common.util.RandomUtil;
 import org.apache.kylin.metadata.model.DataModelDesc;
 import org.apache.kylin.metadata.model.DataModelManager;
 import org.apache.kylin.metadata.project.ProjectInstance;
@@ -119,7 +119,7 @@ public class ModelController extends BasicController {
         }
 
         try {
-            modelDesc.setUuid(UUID.randomUUID().toString());
+            modelDesc.setUuid(RandomUtil.randomUUID().toString());
             String projectName = (null == modelRequest.getProject()) ? ProjectInstance.DEFAULT_PROJECT_NAME
                     : modelRequest.getProject();
 
diff --git a/server-base/src/main/java/org/apache/kylin/rest/controller/StreamingController.java b/server-base/src/main/java/org/apache/kylin/rest/controller/StreamingController.java
index ccd489d..64c14bc 100644
--- a/server-base/src/main/java/org/apache/kylin/rest/controller/StreamingController.java
+++ b/server-base/src/main/java/org/apache/kylin/rest/controller/StreamingController.java
@@ -20,11 +20,11 @@ package org.apache.kylin.rest.controller;
 
 import java.io.IOException;
 import java.util.List;
-import java.util.UUID;
 
 import org.apache.commons.lang.StringUtils;
 import org.apache.kylin.common.util.HadoopUtil;
 import org.apache.kylin.common.util.JsonUtil;
+import org.apache.kylin.common.util.RandomUtil;
 import org.apache.kylin.metadata.model.TableDesc;
 import org.apache.kylin.metadata.streaming.StreamingConfig;
 import org.apache.kylin.rest.exception.BadRequestException;
@@ -144,7 +144,7 @@ public class StreamingController extends BasicController {
                 throw new BadRequestException("StremingConfig name should not be empty.");
             }
             try {
-                streamingConfig.setUuid(UUID.randomUUID().toString());
+                streamingConfig.setUuid(RandomUtil.randomUUID().toString());
                 streamingService.createStreamingConfig(streamingConfig, project);
                 saveStreamingSuccess = true;
             } catch (IOException e) {
@@ -152,7 +152,7 @@ public class StreamingController extends BasicController {
                 throw new InternalErrorException("Failed to save StreamingConfig: " + e.getLocalizedMessage());
             }
             try {
-                kafkaConfig.setUuid(UUID.randomUUID().toString());
+                kafkaConfig.setUuid(RandomUtil.randomUUID().toString());
                 kafkaConfigService.createKafkaConfig(kafkaConfig, project);
                 saveKafkaSuccess = true;
             } catch (IOException e) {
diff --git a/server-base/src/main/java/org/apache/kylin/rest/service/TableService.java b/server-base/src/main/java/org/apache/kylin/rest/service/TableService.java
index 3c661f2..d8d802d 100644
--- a/server-base/src/main/java/org/apache/kylin/rest/service/TableService.java
+++ b/server-base/src/main/java/org/apache/kylin/rest/service/TableService.java
@@ -28,15 +28,14 @@ import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
-import java.util.UUID;
 
-import com.google.common.collect.Maps;
 import org.apache.commons.lang.StringUtils;
 import org.apache.kylin.common.KylinConfig;
 import org.apache.kylin.common.util.HadoopUtil;
 import org.apache.kylin.common.util.Pair;
-import org.apache.kylin.cube.CubeManager;
+import org.apache.kylin.common.util.RandomUtil;
 import org.apache.kylin.cube.CubeInstance;
+import org.apache.kylin.cube.CubeManager;
 import org.apache.kylin.cube.CubeSegment;
 import org.apache.kylin.dict.lookup.ExtTableSnapshotInfo;
 import org.apache.kylin.dict.lookup.ExtTableSnapshotInfoManager;
@@ -58,8 +57,8 @@ import org.apache.kylin.rest.exception.BadRequestException;
 import org.apache.kylin.rest.msg.Message;
 import org.apache.kylin.rest.msg.MsgPicker;
 import org.apache.kylin.rest.response.TableDescResponse;
-import org.apache.kylin.rest.util.AclEvaluate;
 import org.apache.kylin.rest.response.TableSnapshotResponse;
+import org.apache.kylin.rest.util.AclEvaluate;
 import org.apache.kylin.source.IReadableTable;
 import org.apache.kylin.source.IReadableTable.TableSignature;
 import org.apache.kylin.source.ISource;
@@ -77,6 +76,7 @@ import org.springframework.stereotype.Component;
 import com.google.common.base.Preconditions;
 import com.google.common.collect.LinkedHashMultimap;
 import com.google.common.collect.Lists;
+import com.google.common.collect.Maps;
 import com.google.common.collect.SetMultimap;
 import com.google.common.collect.Sets;
 
@@ -148,7 +148,7 @@ public class TableService extends BasicService {
 
             TableDesc origTable = metaMgr.getTableDesc(tableDesc.getIdentity(), project);
             if (origTable == null || origTable.getProject() == null) {
-                tableDesc.setUuid(UUID.randomUUID().toString());
+                tableDesc.setUuid(RandomUtil.randomUUID().toString());
                 tableDesc.setLastModified(0);
             } else {
                 tableDesc.setUuid(origTable.getUuid());
@@ -158,7 +158,7 @@ public class TableService extends BasicService {
 
             TableExtDesc origExt = metaMgr.getTableExt(tableDesc.getIdentity(), project);
             if (origExt == null || origExt.getProject() == null) {
-                extDesc.setUuid(UUID.randomUUID().toString());
+                extDesc.setUuid(RandomUtil.randomUUID().toString());
                 extDesc.setLastModified(0);
             } else {
                 extDesc.setUuid(origExt.getUuid());
@@ -305,7 +305,7 @@ public class TableService extends BasicService {
      */
     public void addStreamingTable(TableDesc desc, String project) throws IOException {
         aclEvaluate.checkProjectAdminPermission(project);
-        desc.setUuid(UUID.randomUUID().toString());
+        desc.setUuid(RandomUtil.randomUUID().toString());
         getTableManager().saveSourceTable(desc, project);
         addTableToProject(new String[] { desc.getIdentity() }, project);
     }
diff --git a/server/src/test/java/org/apache/kylin/rest/service/BadQueryDetectorTest.java b/server/src/test/java/org/apache/kylin/rest/service/BadQueryDetectorTest.java
index 61e52b7..ce1bedc 100644
--- a/server/src/test/java/org/apache/kylin/rest/service/BadQueryDetectorTest.java
+++ b/server/src/test/java/org/apache/kylin/rest/service/BadQueryDetectorTest.java
@@ -22,9 +22,9 @@ import static org.junit.Assert.assertArrayEquals;
 import static org.junit.Assert.assertEquals;
 
 import java.util.ArrayList;
-import java.util.UUID;
 
 import org.apache.kylin.common.util.LocalFileMetadataTestCase;
+import org.apache.kylin.common.util.RandomUtil;
 import org.apache.kylin.metadata.badquery.BadQueryEntry;
 import org.apache.kylin.rest.request.SQLRequest;
 import org.junit.After;
@@ -66,7 +66,7 @@ public class BadQueryDetectorTest extends LocalFileMetadataTestCase {
 
             SQLRequest sqlRequest = new SQLRequest();
             sqlRequest.setSql(mockSql);
-            badQueryDetector.queryStart(Thread.currentThread(), sqlRequest, "user", UUID.randomUUID().toString());
+            badQueryDetector.queryStart(Thread.currentThread(), sqlRequest, "user", RandomUtil.randomUUID().toString());
 
             // make sure bad query check happens twice
             Thread.sleep((alertRunningSec * 2 + 1) * 1000);
diff --git a/server/src/test/java/org/apache/kylin/rest/service/CacheServiceTest.java b/server/src/test/java/org/apache/kylin/rest/service/CacheServiceTest.java
index b128f1e..06f5f9c 100644
--- a/server/src/test/java/org/apache/kylin/rest/service/CacheServiceTest.java
+++ b/server/src/test/java/org/apache/kylin/rest/service/CacheServiceTest.java
@@ -24,12 +24,12 @@ import static org.junit.Assert.assertTrue;
 
 import java.util.Arrays;
 import java.util.Set;
-import java.util.UUID;
 import java.util.concurrent.atomic.AtomicLong;
 
 import org.apache.kylin.common.KylinConfig;
 import org.apache.kylin.common.util.CheckUtil;
 import org.apache.kylin.common.util.LocalFileMetadataTestCase;
+import org.apache.kylin.common.util.RandomUtil;
 import org.apache.kylin.cube.CubeDescManager;
 import org.apache.kylin.cube.CubeInstance;
 import org.apache.kylin.cube.CubeManager;
@@ -295,7 +295,7 @@ public class CacheServiceTest extends LocalFileMetadataTestCase {
         TableDesc tableDesc = new TableDesc();
         tableDesc.setDatabase("TEST_DB");
         tableDesc.setName("TEST_TABLE");
-        tableDesc.setUuid(UUID.randomUUID().toString());
+        tableDesc.setUuid(RandomUtil.randomUUID().toString());
         tableDesc.setLastModified(0);
         return tableDesc;
     }
diff --git a/server/src/test/java/org/apache/kylin/rest/service/KylinQueryTimeoutTest.java b/server/src/test/java/org/apache/kylin/rest/service/KylinQueryTimeoutTest.java
index 38b3270..f2cf276 100644
--- a/server/src/test/java/org/apache/kylin/rest/service/KylinQueryTimeoutTest.java
+++ b/server/src/test/java/org/apache/kylin/rest/service/KylinQueryTimeoutTest.java
@@ -19,11 +19,11 @@
 package org.apache.kylin.rest.service;
 
 import java.sql.SQLException;
-import java.util.UUID;
 
 import org.apache.kylin.common.KylinConfig;
 import org.apache.kylin.common.exceptions.KylinTimeoutException;
 import org.apache.kylin.common.util.LocalFileMetadataTestCase;
+import org.apache.kylin.common.util.RandomUtil;
 import org.apache.kylin.metadata.realization.IRealization;
 import org.apache.kylin.metadata.realization.SQLDigest;
 import org.apache.kylin.metadata.tuple.ITupleIterator;
@@ -71,7 +71,7 @@ public class KylinQueryTimeoutTest extends LocalFileMetadataTestCase {
         SQLRequest request = new SQLRequest();
         request.setProject("default");
         request.setSql("select count(*) from STREAMING_TABLE");
-        detector.queryStart(Thread.currentThread(), request, "ADMIN", UUID.randomUUID().toString());
+        detector.queryStart(Thread.currentThread(), request, "ADMIN", RandomUtil.randomUUID().toString());
         try {
             QueryACLTestUtil.mockQuery("default", "select * from STREAMING_TABLE");
         } finally{
diff --git a/source-hive/src/main/java/org/apache/kylin/source/hive/HiveMetadataExplorer.java b/source-hive/src/main/java/org/apache/kylin/source/hive/HiveMetadataExplorer.java
index 9d4cc53..42df327 100644
--- a/source-hive/src/main/java/org/apache/kylin/source/hive/HiveMetadataExplorer.java
+++ b/source-hive/src/main/java/org/apache/kylin/source/hive/HiveMetadataExplorer.java
@@ -26,6 +26,7 @@ import java.util.UUID;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.kylin.common.KylinConfig;
 import org.apache.kylin.common.util.Pair;
+import org.apache.kylin.common.util.RandomUtil;
 import org.apache.kylin.metadata.TableMetadataManager;
 import org.apache.kylin.metadata.model.ColumnDesc;
 import org.apache.kylin.metadata.model.TableDesc;
@@ -70,7 +71,7 @@ public class HiveMetadataExplorer implements ISourceMetadataExplorer, ISampleDat
             tableDesc = new TableDesc();
             tableDesc.setDatabase(database.toUpperCase());
             tableDesc.setName(tableName.toUpperCase());
-            tableDesc.setUuid(UUID.randomUUID().toString());
+            tableDesc.setUuid(RandomUtil.randomUUID().toString());
             tableDesc.setLastModified(0);
         } else {
             tableDesc = new TableDesc(tableDesc);
@@ -91,7 +92,7 @@ public class HiveMetadataExplorer implements ISourceMetadataExplorer, ISampleDat
 
         TableExtDesc tableExtDesc = new TableExtDesc();
         tableExtDesc.setIdentity(tableDesc.getIdentity());
-        tableExtDesc.setUuid(UUID.randomUUID().toString());
+        tableExtDesc.setUuid(RandomUtil.randomUUID().toString());
         tableExtDesc.setLastModified(0);
         tableExtDesc.init(prj);
 
diff --git a/source-hive/src/main/java/org/apache/kylin/source/jdbc/JdbcExplorer.java b/source-hive/src/main/java/org/apache/kylin/source/jdbc/JdbcExplorer.java
index d858cd4..bba2008 100644
--- a/source-hive/src/main/java/org/apache/kylin/source/jdbc/JdbcExplorer.java
+++ b/source-hive/src/main/java/org/apache/kylin/source/jdbc/JdbcExplorer.java
@@ -31,6 +31,7 @@ import org.apache.commons.lang3.StringUtils;
 import org.apache.kylin.common.KylinConfig;
 import org.apache.kylin.common.util.DBUtils;
 import org.apache.kylin.common.util.Pair;
+import org.apache.kylin.common.util.RandomUtil;
 import org.apache.kylin.metadata.datatype.DataType;
 import org.apache.kylin.metadata.model.ColumnDesc;
 import org.apache.kylin.metadata.model.ISourceAware;
@@ -79,7 +80,7 @@ public class JdbcExplorer implements ISourceMetadataExplorer, ISampleDataDeploye
         TableDesc tableDesc = new TableDesc();
         tableDesc.setDatabase(database.toUpperCase());
         tableDesc.setName(table.toUpperCase());
-        tableDesc.setUuid(UUID.randomUUID().toString());
+        tableDesc.setUuid(RandomUtil.randomUUID().toString());
         tableDesc.setLastModified(0);
         tableDesc.setSourceType(ISourceAware.ID_JDBC);
 
@@ -106,7 +107,7 @@ public class JdbcExplorer implements ISourceMetadataExplorer, ISampleDataDeploye
 
         TableExtDesc tableExtDesc = new TableExtDesc();
         tableExtDesc.setIdentity(tableDesc.getIdentity());
-        tableExtDesc.setUuid(UUID.randomUUID().toString());
+        tableExtDesc.setUuid(RandomUtil.randomUUID().toString());
         tableExtDesc.setLastModified(0);
         tableExtDesc.init(prj);
 
diff --git a/source-hive/src/test/java/org/apache/kylin/source/hive/HiveMRInputTest.java b/source-hive/src/test/java/org/apache/kylin/source/hive/HiveMRInputTest.java
index 34c946a..384c2b8 100644
--- a/source-hive/src/test/java/org/apache/kylin/source/hive/HiveMRInputTest.java
+++ b/source-hive/src/test/java/org/apache/kylin/source/hive/HiveMRInputTest.java
@@ -22,13 +22,13 @@ import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.when;
 
 import java.io.IOException;
-import java.util.UUID;
 
 import org.apache.hadoop.conf.Configuration;
 import org.apache.hadoop.fs.FileSystem;
 import org.apache.hadoop.fs.Path;
 import org.apache.kylin.common.KylinConfig;
 import org.apache.kylin.common.KylinConfig.SetAndUnsetThreadLocalConfig;
+import org.apache.kylin.common.util.RandomUtil;
 import org.apache.kylin.job.execution.DefaultChainedExecutable;
 import org.junit.Assert;
 import org.junit.Test;
@@ -44,7 +44,7 @@ public class HiveMRInputTest {
             when(kylinConfig.getHiveTableDirCreateFirst()).thenReturn(true);
             when(kylinConfig.getHdfsWorkingDirectory()).thenReturn("/tmp/kylin/");
             DefaultChainedExecutable defaultChainedExecutable = mock(DefaultChainedExecutable.class);
-            defaultChainedExecutable.setId(UUID.randomUUID().toString());
+            defaultChainedExecutable.setId(RandomUtil.randomUUID().toString());
 
             String jobWorkingDir = HiveInputBase.getJobWorkingDir(defaultChainedExecutable, KylinConfig.getInstanceFromEnv().getHdfsWorkingDirectory());
             jobWorkDirPath = new Path(jobWorkingDir);
diff --git a/source-kafka/src/main/java/org/apache/kylin/source/kafka/util/KafkaSampleProducer.java b/source-kafka/src/main/java/org/apache/kylin/source/kafka/util/KafkaSampleProducer.java
index 7c8deef..973f020 100644
--- a/source-kafka/src/main/java/org/apache/kylin/source/kafka/util/KafkaSampleProducer.java
+++ b/source-kafka/src/main/java/org/apache/kylin/source/kafka/util/KafkaSampleProducer.java
@@ -26,7 +26,6 @@ import java.util.List;
 import java.util.Map;
 import java.util.Properties;
 import java.util.Random;
-import java.util.UUID;
 
 import org.apache.commons.cli.Option;
 import org.apache.commons.cli.OptionBuilder;
@@ -36,6 +35,7 @@ import org.apache.kafka.clients.producer.Producer;
 import org.apache.kafka.clients.producer.ProducerRecord;
 import org.apache.kylin.common.util.JsonUtil;
 import org.apache.kylin.common.util.OptionsHelper;
+import org.apache.kylin.common.util.RandomUtil;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -126,7 +126,7 @@ public class KafkaSampleProducer {
             record.put("amount", rnd.nextDouble() * 100);
             //add embedded record
             Map<String, Object> user = new HashMap();
-            user.put("id", UUID.randomUUID().toString());
+            user.put("id", RandomUtil.randomUUID().toString());
             user.put("gender", genders.get(rnd.nextInt(2)));
             user.put("age", rnd.nextInt(20) + 10);
             user.put("first_name", "unknown");
diff --git a/storage-hbase/src/main/java/org/apache/kylin/storage/hbase/HBaseResourceStore.java b/storage-hbase/src/main/java/org/apache/kylin/storage/hbase/HBaseResourceStore.java
index 23df556..fda3e07 100644
--- a/storage-hbase/src/main/java/org/apache/kylin/storage/hbase/HBaseResourceStore.java
+++ b/storage-hbase/src/main/java/org/apache/kylin/storage/hbase/HBaseResourceStore.java
@@ -27,7 +27,6 @@ import java.util.List;
 import java.util.Map;
 import java.util.NavigableSet;
 import java.util.TreeSet;
-import java.util.UUID;
 
 import org.apache.commons.io.IOUtils;
 import org.apache.hadoop.fs.FSDataOutputStream;
@@ -58,6 +57,7 @@ import org.apache.kylin.common.persistence.WriteConflictException;
 import org.apache.kylin.common.util.Bytes;
 import org.apache.kylin.common.util.BytesUtil;
 import org.apache.kylin.common.util.HadoopUtil;
+import org.apache.kylin.common.util.RandomUtil;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -149,7 +149,7 @@ public class HBaseResourceStore extends ResourceStore {
             String uuid = desc.getValue(HBaseConnection.HTABLE_UUID_TAG);
             if (uuid != null)
                 return uuid;
-            return UUID.randomUUID().toString();
+            return RandomUtil.randomUUID().toString();
         } catch (Exception e) {
             return null;
         }
diff --git a/storage-hbase/src/main/java/org/apache/kylin/storage/hbase/lookup/HBaseLookupMRSteps.java b/storage-hbase/src/main/java/org/apache/kylin/storage/hbase/lookup/HBaseLookupMRSteps.java
index 1c91be2..fb5bab5 100644
--- a/storage-hbase/src/main/java/org/apache/kylin/storage/hbase/lookup/HBaseLookupMRSteps.java
+++ b/storage-hbase/src/main/java/org/apache/kylin/storage/hbase/lookup/HBaseLookupMRSteps.java
@@ -21,9 +21,9 @@ package org.apache.kylin.storage.hbase.lookup;
 import java.io.IOException;
 import java.util.List;
 import java.util.Set;
-import java.util.UUID;
 
 import org.apache.kylin.common.KylinConfig;
+import org.apache.kylin.common.util.RandomUtil;
 import org.apache.kylin.cube.CubeInstance;
 import org.apache.kylin.cube.model.CubeDesc;
 import org.apache.kylin.cube.model.DimensionDesc;
@@ -105,7 +105,7 @@ public class HBaseLookupMRSteps {
     }
 
     private String genLookupSnapshotID() {
-        return UUID.randomUUID().toString();
+        return RandomUtil.randomUUID().toString();
     }
 
     private void addLookupTableConvertToHFilesStep(DefaultChainedExecutable jobFlow, String tableName, String snapshotID) {
diff --git a/storage-hbase/src/main/java/org/apache/kylin/storage/hbase/steps/HFileOutputFormat3.java b/storage-hbase/src/main/java/org/apache/kylin/storage/hbase/steps/HFileOutputFormat3.java
index f3f226c..e58a00e 100644
--- a/storage-hbase/src/main/java/org/apache/kylin/storage/hbase/steps/HFileOutputFormat3.java
+++ b/storage-hbase/src/main/java/org/apache/kylin/storage/hbase/steps/HFileOutputFormat3.java
@@ -27,12 +27,9 @@ import java.util.List;
 import java.util.Map;
 import java.util.TreeMap;
 import java.util.TreeSet;
-import java.util.UUID;
 
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
-import org.apache.hadoop.hbase.classification.InterfaceAudience;
-import org.apache.hadoop.hbase.classification.InterfaceStability;
 import org.apache.hadoop.conf.Configuration;
 import org.apache.hadoop.fs.FileSystem;
 import org.apache.hadoop.fs.Path;
@@ -43,6 +40,8 @@ import org.apache.hadoop.hbase.HConstants;
 import org.apache.hadoop.hbase.HTableDescriptor;
 import org.apache.hadoop.hbase.KeyValue;
 import org.apache.hadoop.hbase.KeyValueUtil;
+import org.apache.hadoop.hbase.classification.InterfaceAudience;
+import org.apache.hadoop.hbase.classification.InterfaceStability;
 import org.apache.hadoop.hbase.client.HTable;
 import org.apache.hadoop.hbase.client.Put;
 import org.apache.hadoop.hbase.client.RegionLocator;
@@ -78,6 +77,7 @@ import org.apache.hadoop.mapreduce.TaskAttemptContext;
 import org.apache.hadoop.mapreduce.lib.output.FileOutputCommitter;
 import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;
 import org.apache.hadoop.mapreduce.lib.partition.TotalOrderPartitioner;
+import org.apache.kylin.common.util.RandomUtil;
 
 import com.google.common.annotations.VisibleForTesting;
 
@@ -576,7 +576,7 @@ public class HFileOutputFormat3
         Configuration conf = job.getConfiguration();
         // create the partitions file
         FileSystem fs = FileSystem.get(conf);
-        Path partitionsPath = new Path(conf.get("hbase.fs.tmp.dir"), "partitions_" + UUID.randomUUID());
+        Path partitionsPath = new Path(conf.get("hbase.fs.tmp.dir"), "partitions_" + RandomUtil.randomUUID());
         fs.makeQualified(partitionsPath);
         writePartitions(conf, partitionsPath, splitPoints);
         fs.deleteOnExit(partitionsPath);
diff --git a/tool/src/main/java/org/apache/kylin/tool/metrics/systemcube/KylinTableCreator.java b/tool/src/main/java/org/apache/kylin/tool/metrics/systemcube/KylinTableCreator.java
index a2a0616..108c210 100644
--- a/tool/src/main/java/org/apache/kylin/tool/metrics/systemcube/KylinTableCreator.java
+++ b/tool/src/main/java/org/apache/kylin/tool/metrics/systemcube/KylinTableCreator.java
@@ -21,10 +21,10 @@ package org.apache.kylin.tool.metrics.systemcube;
 import java.io.ByteArrayOutputStream;
 import java.io.DataOutputStream;
 import java.util.List;
-import java.util.UUID;
 
 import org.apache.kylin.common.KylinConfig;
 import org.apache.kylin.common.util.Pair;
+import org.apache.kylin.common.util.RandomUtil;
 import org.apache.kylin.metadata.TableMetadataManager;
 import org.apache.kylin.metadata.model.ColumnDesc;
 import org.apache.kylin.metadata.model.TableDesc;
@@ -91,7 +91,7 @@ public class KylinTableCreator {
 
         Pair<String, String> tableNameSplits = ActiveReservoirReporter
                 .getTableNameSplits(sinkTool.getTableNameForMetrics(subject));
-        kylinTable.setUuid(UUID.randomUUID().toString());
+        kylinTable.setUuid(RandomUtil.randomUUID().toString());
         kylinTable.setDatabase(tableNameSplits.getFirst());
         kylinTable.setName(tableNameSplits.getSecond());
         kylinTable.setTableType(null);