diff --git a/ql/src/java/org/apache/hadoop/hive/ql/util/ResourceDownloader.java b/ql/src/java/org/apache/hadoop/hive/ql/util/ResourceDownloader.java index faf86fb566..7585a4fc78 100644 --- a/ql/src/java/org/apache/hadoop/hive/ql/util/ResourceDownloader.java +++ b/ql/src/java/org/apache/hadoop/hive/ql/util/ResourceDownloader.java @@ -22,7 +22,12 @@ import java.io.IOException; import java.net.URI; import java.net.URISyntaxException; +import java.nio.file.Files; +import java.nio.file.Paths; +import java.nio.file.attribute.PosixFilePermission; +import java.nio.file.attribute.PosixFilePermissions; import java.util.List; +import java.util.Set; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.FileSystem; @@ -39,6 +44,7 @@ private final DependencyResolver dependencyResolver; private final Configuration conf; private final File resourceDir; + private final static Set perms = PosixFilePermissions.fromString("rwxr-xr-x"); public ResourceDownloader(Configuration conf, String resourceDirPath) { this.dependencyResolver = new DependencyResolver(); @@ -103,7 +109,11 @@ private String downloadResource(URI srcUri, String subDir, boolean convertToUnix FileSystem fs = FileSystem.get(srcUri, conf); fs.copyToLocalFile(new Path(srcUri.toString()), new Path(dest)); // add "execute" permission to downloaded resource file (needed when loading dll file) - FileUtil.chmod(dest, "ugo+rx", true); + if (System.getProperty("os.name").startsWith("Linux")){ + Files.setPosixFilePermissions(Paths.get(dest), perms); + } else { + FileUtil.chmod(dest, "ugo+rx", true); + } return dest; }