diff --git service/src/java/org/apache/hive/service/cli/CLIService.java service/src/java/org/apache/hive/service/cli/CLIService.java index 1a7f338..efb884b 100644 --- service/src/java/org/apache/hive/service/cli/CLIService.java +++ service/src/java/org/apache/hive/service/cli/CLIService.java @@ -26,6 +26,9 @@ import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +import org.apache.hadoop.fs.FileSystem; +import org.apache.hadoop.fs.Path; +import org.apache.hadoop.fs.permission.FsPermission; import org.apache.hadoop.hive.conf.HiveConf; import org.apache.hadoop.hive.metastore.HiveMetaStoreClient; import org.apache.hadoop.hive.metastore.IMetaStoreClient; @@ -77,8 +80,12 @@ public synchronized void init(HiveConf hiveConf) { public synchronized void start() { super.start(); - // Initialize and test a connection to the metastore try { + // make sure that the base scratch directories exists and writable + setupScratchDir(hiveConf.getVar(HiveConf.ConfVars.SCRATCHDIR), false); + setupScratchDir(hiveConf.getVar(HiveConf.ConfVars.LOCALSCRATCHDIR), true); + + // Initialize and test a connection to the metastore metastoreClient = new HiveMetaStoreClient(hiveConf); metastoreClient.getDatabases("default"); } catch (Exception e) { @@ -341,4 +348,20 @@ public synchronized String getDelegationTokenFromMetaStore(String owner) } } } + + // create the give Path if doesn't exists and make it writable + private void setupScratchDir(String dirPath, boolean isLocal) throws IOException { + Path scratchDir = new Path(dirPath); + FileSystem fs; + if (isLocal) { + fs = FileSystem.getLocal(hiveConf); + } else { + fs = scratchDir.getFileSystem(hiveConf); + } + if (!fs.exists(scratchDir)) { + fs.mkdirs(scratchDir); + FsPermission fsPermission = new FsPermission((short)0777); + fs.setPermission(scratchDir, fsPermission); + } + } } diff --git service/src/java/org/apache/hive/service/cli/session/HiveSessionImplwithUGI.java service/src/java/org/apache/hive/service/cli/session/HiveSessionImplwithUGI.java index ae7bb6b..708f4e4 100644 --- service/src/java/org/apache/hive/service/cli/session/HiveSessionImplwithUGI.java +++ service/src/java/org/apache/hive/service/cli/session/HiveSessionImplwithUGI.java @@ -18,11 +18,9 @@ package org.apache.hive.service.cli.session; -import java.io.File; import java.io.IOException; import java.util.Map; -import org.apache.hadoop.hive.conf.HiveConf; import org.apache.hadoop.hive.ql.metadata.Hive; import org.apache.hadoop.hive.ql.metadata.HiveException; import org.apache.hadoop.hive.shims.ShimLoader; @@ -46,7 +44,6 @@ public HiveSessionImplwithUGI(String username, String password, Map