Index: ql/src/java/org/apache/hadoop/hive/ql/optimizer/GenMRFileSink1.java =================================================================== --- ql/src/java/org/apache/hadoop/hive/ql/optimizer/GenMRFileSink1.java (revision 961864) +++ ql/src/java/org/apache/hadoop/hive/ql/optimizer/GenMRFileSink1.java (working copy) @@ -24,6 +24,7 @@ import java.util.List; import java.util.Stack; +import org.apache.hadoop.fs.Path; import org.apache.hadoop.hive.conf.HiveConf; import org.apache.hadoop.hive.ql.Context; import org.apache.hadoop.hive.ql.exec.AbstractMapJoinOperator; @@ -283,9 +284,10 @@ dest = fsOp.getConf().getDirName(); // generate the temporary file + // it must be on the same file system as the current destination ParseContext parseCtx = ctx.getParseCtx(); Context baseCtx = parseCtx.getContext(); - String tmpDir = baseCtx.getMRTmpFileURI(); + String tmpDir = baseCtx.getExternalTmpFileURI((new Path(dest)).toUri()); fsOp.getConf().setDirName(tmpDir); } Index: ql/src/java/org/apache/hadoop/hive/ql/io/RCFileOutputFormat.java =================================================================== --- ql/src/java/org/apache/hadoop/hive/ql/io/RCFileOutputFormat.java (revision 961864) +++ ql/src/java/org/apache/hadoop/hive/ql/io/RCFileOutputFormat.java (working copy) @@ -134,8 +134,9 @@ } RCFileOutputFormat.setColumnNumber(jc, cols.length); - final RCFile.Writer outWriter = Utilities.createRCFileWriter(jc, FileSystem - .get(jc), finalOutPath, isCompressed); + final RCFile.Writer outWriter = Utilities.createRCFileWriter + (jc, finalOutPath.getFileSystem(jc), + finalOutPath, isCompressed); return new org.apache.hadoop.hive.ql.exec.FileSinkOperator.RecordWriter() { public void write(Writable r) throws IOException { Index: ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzer.java =================================================================== --- ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzer.java (revision 961864) +++ ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzer.java (working copy) @@ -803,14 +803,26 @@ String fname = stripQuotes(ast.getChild(0).getText()); if ((!qb.getParseInfo().getIsSubQ()) && (((ASTNode) ast.getChild(0)).getToken().getType() == HiveParser.TOK_TMP_FILE)) { - fname = ctx.getMRTmpFileURI(); - ctx.setResDir(new Path(fname)); if (qb.isCTAS()) { qb.setIsQuery(false); + + // allocate a temporary output dir on the location of the table + String location = conf.getVar(HiveConf.ConfVars.METASTOREWAREHOUSE); + try { + fname = ctx.getExternalTmpFileURI + (FileUtils.makeQualified(new Path(location), conf).toUri()); + + } catch (Exception e) { + throw new SemanticException("Error creating temporary folder on: " + + location, e); + } + } else { qb.setIsQuery(true); + fname = ctx.getMRTmpFileURI(); } + ctx.setResDir(new Path(fname)); } qb.getMetaData().setDestForAlias(name, fname, (ast.getToken().getType() == HiveParser.TOK_DIR));