Skip to content

Commit 20d26ad

Browse files
authored
HIVE-28473:INSERT OVERWRITE LOCAL DIRECTORY writes staging files to wrong hdfs directory (apache#5407)(yu liang, reviewed by Butao Zhang)
1 parent f44e1be commit 20d26ad

File tree

2 files changed

+13
-4
lines changed

2 files changed

+13
-4
lines changed

ql/src/java/org/apache/hadoop/hive/ql/exec/MoveTask.java

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -438,9 +438,11 @@ public int execute() {
438438
}
439439
}
440440
else {
441-
FileSystem targetFs = targetPath.getFileSystem(conf);
442-
if (!targetFs.exists(targetPath.getParent())){
443-
targetFs.mkdirs(targetPath.getParent());
441+
if (lfd.getIsDfsDir()) {
442+
FileSystem targetFs = targetPath.getFileSystem(conf);
443+
if (!targetFs.exists(targetPath.getParent())) {
444+
targetFs.mkdirs(targetPath.getParent());
445+
}
444446
}
445447
moveFile(sourcePath, targetPath, lfd.getIsDfsDir());
446448
}

ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzer.java

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8468,6 +8468,7 @@ private FileSinkDesc createFileSinkDesc(String dest, TableDesc table_desc,
84688468
RowSchema fsRS, boolean canBeMerged, Table dest_tab, boolean isMmCtas,
84698469
Integer dest_type, QB qb, boolean isDirectInsert, AcidUtils.Operation acidOperation, String moveTaskId) throws SemanticException {
84708470
boolean isInsertOverwrite = false;
8471+
boolean isLocal = false;
84718472
Context.Operation writeOperation = getWriteOperation(dest);
84728473
switch (dest_type) {
84738474
case QBMetaData.DEST_PARTITION:
@@ -8492,6 +8493,7 @@ private FileSinkDesc createFileSinkDesc(String dest, TableDesc table_desc,
84928493

84938494
break;
84948495
case QBMetaData.DEST_LOCAL_FILE:
8496+
isLocal = true;
84958497
case QBMetaData.DEST_DFS_FILE:
84968498
//CTAS path or insert into file/directory
84978499
break;
@@ -8545,7 +8547,12 @@ private FileSinkDesc createFileSinkDesc(String dest, TableDesc table_desc,
85458547
fileSinkDesc.setStatsAggPrefix(fileSinkDesc.getDirName().toString());
85468548
if (!destTableIsMaterialization &&
85478549
HiveConf.getVar(conf, HIVE_STATS_DBCLASS).equalsIgnoreCase(StatDB.fs.name())) {
8548-
String statsTmpLoc = ctx.getTempDirForInterimJobPath(dest_path).toString();
8550+
String statsTmpLoc;
8551+
if (isLocal){
8552+
statsTmpLoc = ctx.getMRTmpPath().toString();
8553+
} else {
8554+
statsTmpLoc = ctx.getTempDirForInterimJobPath(dest_path).toString();
8555+
}
85498556
fileSinkDesc.setStatsTmpDir(statsTmpLoc);
85508557
LOG.debug("Set stats collection dir : " + statsTmpLoc);
85518558
}

0 commit comments

Comments
 (0)