其他用户没有读权限
其他用户访问我的数据,发现出现 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加入上面两行