diff --git ql/src/java/org/apache/hadoop/hive/ql/metadata/Hive.java ql/src/java/org/apache/hadoop/hive/ql/metadata/Hive.java index 298451d..6122577 100644 --- ql/src/java/org/apache/hadoop/hive/ql/metadata/Hive.java +++ ql/src/java/org/apache/hadoop/hive/ql/metadata/Hive.java @@ -2394,9 +2394,24 @@ public static boolean renameFile(HiveConf conf, Path srcf, Path destf, } } } - if (!isSrcLocal) { - // For NOT local src file, rename the file - success = fs.rename(srcf, destf); + if (!isSrcLocal) { + String[] srcfSplits = srcf.getName().split(":"); + String[] destfSplits = destf.getName().split(":"); + boolean srcdestSameFS = srcfSplits[0].equals(destfSplits[0]); + + // If the source FS is same as the destination FS, rename the file + if (srcdestSameFS) { + // For NOT local src file, rename the file + success = fs.rename(srcf, destf); + } else { + // copy srcf to the Local File + Path localFile = new Path(HiveConf.getVar(conf, HiveConf.ConfVars.LOCALSCRATCHDIR), "_move_task.db"); + srcf.getFileSystem(conf).copyToLocalFile(srcf, localFile); + // copy local File to the destination + destf.getFileSystem(conf).copyFromLocalFile(localFile, destf); + localFile.getFileSystem(conf).delete(localFile); + success = true; + } } else { // For local src file, copy to hdfs fs.copyFromLocalFile(srcf, destf);