HDFS中将普通用户增加到超级用户组supergroup以及其应用场景

参考了 https://blog.csdn.net/fenglibing/article/details/82261340

Hadoop平台会集成不同的组件,如hdfs、yarn、hive等,不同用户的操作权限不同,除了hdfs是超级用户以外,其它用户都默认是普通用户权限,但是有些场景之下,我们希望普通用户具有hdfs的超级权限,如我oozie中调试shell任务,其中shell调用sqoop从数据中导入数据到hive中,其后会通过Yarn来执行MapReduce这么一个过程,不过Yarn在执行的时候,会在hdfs的/user/yarn目录创建权限为700的staging文件,然后在清除在staging文件的时候,又使用执行oozie的用户去执行清除,这个时候就删除文件没有权限报错了,即使这个时候换超级用户hdfs去执行也是一样的错误:

遇到这种情况,就只有使用yarn这个用户来执行这个任务了,因为staging为700的权限,并且是动态生成的,因而不能够通过对staging文件做权限调整,但是由于还要操作hive等其它组件,yarn默认的权限又不够,所以这种场景之下就需要将yarn用户加入到超级组supergroup中。

Hadoop本身的用户和组的关系,都是同步Linux系统中的,但是HDFS和Linux的超级用户组又有一点差别,HDFS中的超级用户组是supergroup,但是Linux中默认是没有supergoup这个组,这个时候只需要在Linux中增加supergroup这个组,然后将要在HDFS中加入到supergroup中的用户加到这个组中,再同步HDFS用户和组即可。

操作步骤如下:

1、在Linux执行如下命令增加supergroup

groupadd supergroup

2、如将用户yarn增加到supergroup中,再执行:

usermod -a -G supergroup yarn

3、同步系统的权限信息到HDFS:

su - hdfs -s /bin/bash -c "hdfs dfsadmin -refreshUserToGroupsMappings"

4、验证

  1. 将/user/hdfs目录的权限由700,修改为770

su - hdfs -s /bin/bash -c "hadoop fs -chmod 770 /user/hdfs"

  1. 通过加到supergroup组中的yarn用户去列这个目录:

su - yarn -s /bin/bash -c "hadoop fs -ls /user/hdfs"

可成功列出目录即表示操作成功。

**

上面的文章作者把问题描述的太复杂。无外乎是hdfs文件存储有自己的一套独立于操作系统的用户权限,即使我们用root用户在hdfs文件系统中也不好使。那么问题来了,如何给系统操作用户赋权,能顺利操作hdfs文件存储?

**
第一,需要在操作系统层面建立和hdfs文件系统相同的用户组。
第二,需要把相应用户加入这个组。

好了,说做就做。
hdfs文件的用户是hadoop,组是supergroup。我们在操作系统建立hadoop用户,并属于supergroup组。有条件的话就直接使用hadoop用户,若是多用户操作,就把这些用户加入supergroup组即可。

#新用户添加并加入组
[root@IP05 hadoop]# useradd -m -G supergroup -g hadoop alvin
[root@IP05 hadoop]# passwd alvin
Changing password for user alvin.
New password: 
Retype new password: 
passwd: all authentication tokens updated successfully.
#已有用户增加组
[root@IP05 hadoop]# usermod -a -G supergroup kevin

猜你喜欢

转载自blog.csdn.net/nickyu888/article/details/96476544
今日推荐