问题背景
是在登录 hdfs 的WEB 页面时, 显示的文件夹user 的所有者是hdfs, 那么 root算什么??
首先明确 hdfs (文件系统) 与Linux的文件系统是平级的。 因此在这两个不同的文件系统,用户的定义也不同
如标题:在 HDFS 中 用户 hdfs 是superuser (超级用户)
对应的, 在linux 中, 用户 root 是superuser(超级用户)
然而,在安装hadoop时, 这些hdfs 的用户是同步到Linux中, 很可惜,不能像普通用户那, 登录。
下图为Linux centos 7.5 中查看用户组 hadoop里的用户, 有 hdfs,mapred等。
[root@h1 cloudera-scm-server]# head -50 /etc/group | grep hadoop
hadoop:x:993:hdfs,mapred,yarn
下图为 当操作文件夹 (根目录)/user时,使用yarn 用户,权限不够,因为 hdfs 是他的拥有者 且是superuser. yarn和hdfs 在同一组,但权限不同。
[root@h1 cloudera-scm-server]# su - yarn -s /bin/bash -c "hadoop fs -mkdir /user/root"
mkdir: Permission denied: user=yarn, access=WRITE, inode="/user":hdfs:supergroup:drwxrwxr-x
[root@h1 cloudera-scm-server]# su - hdfs -s /bin/bash -c "hadoop fs -mkdir /user/root"
[root@h1 cloudera-scm-server]#
前面说了, hdfs的用户 同步到linux中,但不等登录。因此上图就是操作方法。
可以修改hdfs 文件系统的某个文件夹的owner 为root, 然后再在linux 的root用户操作就不会那么复杂了。
如下
[root@h1 cloudera-scm-server]# sudo -u hdfs hadoop fs -chown root /user/root
[root@h1 cloudera-scm-server]#
[root@h1 cloudera-scm-server]# hadoop fs -mkdir /user/root/one
[root@h1 cloudera-scm-server]#
结果
下图的结果证明了,
第一:上一步的修改owner成功,现在root 可以修改这个文件夹了,
第二,命令单独是 hadoop fs 操作是,hdfs 识别的是当前linux 登录用户作为访问者, 所以创建的文件夹“one” 的所有者就是 root
参考链接如下,有更加详细的截图说明