Hadoop streaming 问题记录

其他用户没有读权限

其他用户访问我的数据,发现出现 Permission denied: user=, access=READ_EXECUTE, inode=,drwxr-x--x,
该问题发现其他用户读我的hdfs目录没有读权限

解决方案

权限说明

在Hadoop streaming里面设置对应的读权限,直接设置 fs.permissions.umask-mode
在streaming中加了两行代码

-D dfs.permissions=true \
-D fs.permissions.umask-mode=022 \

umask是权限屏蔽位,这个和posix 很像,有读、写、执行权限,分别对应 - r、w、x,通常目录对应的权限例如:
drwxr-xr-x 除了d代表目录,其他每三位分别对应不同用户的权限,如果没有对应的权限,则用横线“-”代替

d rwx r-x r-x
目录 文件所有者权限 同组用户权限 其他用户权限

可以发现该用户的文件所有者有读写执行权限,同组用户缺少w 写权限,其他用户也是缺少写权限。

d r w x
d代表目录 读权限 写权限 执行权限
无数值 4 2 1

上面的数值是对应的二进制位,所以该drwxr-xr-x代表 4+2+1 = 7, 4+1 =5 , 4+1=5 ,为755权限

此外,如果一个目录设置的有可执行权限 x和读w,那么则子目录才可以设为w,才能被访问

解决策略

hadoop里面有权限机制,有对应的屏蔽位,可以通过fs.permissions.umask-mode 来屏蔽对应的权限,我们可以设置屏蔽位来解决,例如,我想让其他用户可读,那么设为755权限,则只需屏蔽剩下的权限,用满权限 777 减去需要设为的权限755,则为022 ,也就是屏蔽,同组用户和其他用户的写权限

直接在hadoop streaming加入上面两行

你可能感兴趣的:(Hadoop streaming 问题记录)