public
static
boolean
createDirsWithPermission(Configuration conf, Path mkdir,
FsPermission fsPermission)
throws
IOException {
boolean
recursive =
false
;
if
(SessionState.get() !=
null
) {
recursive = SessionState.get().isHiveServerQuery() &&
conf.getBoolean(HiveConf.ConfVars.HIVE_SERVER2_ENABLE_DOAS.varname,
HiveConf.ConfVars.HIVE_SERVER2_ENABLE_DOAS.defaultBoolVal);
fsPermission =
new
FsPermission((
short
)
00777
);
}
return
createDirsWithPermission(conf, mkdir, fsPermission, recursive);
}
.....
public
static
boolean
createDirsWithPermission(Configuration conf, Path mkdirPath,
FsPermission fsPermission,
boolean
recursive)
throws
IOException {
String origUmask =
null
;
LOG.warn(
"Create dirs "
+ mkdirPath +
" with permission "
+ fsPermission +
" recursive "
+
recursive);
if
(recursive) {
origUmask = conf.get(
"fs.permissions.umask-mode"
);
conf.set(
"fs.permissions.umask-mode"
,
"000"
);
}
FileSystem fs = ShimLoader.getHadoopShims().getNonCachedFileSystem(mkdirPath.toUri(), conf);
LOG.warn(
"fs.permissions.umask-mode is "
+ conf.get(
"fs.permissions.umask-mode"
));
boolean
retval =
false
;
try
{
retval = fs.mkdirs(mkdirPath, fsPermission);
resetConfAndCloseFS(conf, recursive, origUmask, fs);
即fs.permissions.umask-mode为
022
,因此导致即使设置了权限为
777
,创建的目录权限最终还是为
755
}
catch
(IOException ioe) {
try
{
resetConfAndCloseFS(conf, recursive, origUmask, fs);
}
catch
(IOException e) {
}
}
return
retval;
}