2020/12/16 sunhaiqi@bonc.com.cn
HDFS常用操作指令及管理命令(权限、节点上下线、balancer、disk balancer)
一、HDFS权限
1.1、HDFS权限简介
Hdfs的权限管理分为2大部分:
- 第一部分类似于Linux的基本权限管理,也就是粗粒度将管理对象分为user、group和other三类去进行权限的管理。
- 第二部分是ACL方式的权限管理,也是更加细粒度的权限管理,可以精确控制到某个user与某个group具有的对应权限上。
1.2、HDFS基本权限管理
1.2.1、初始目录权限
当我们创建文件或者目录的时候可以指定权限,没有指定的话就会使用默认的权限。
- 文件默认权限:666
- 目录默认权限:777
1.2.2、修改默认权限配置umask
作用:客户端自己主宰文件或者目录的初始创建权限
添加core-site.xml
设置用户组默认权限
<property>
<name>fs.permissions.umask-mode</name>
<value>022</value>
</property>
实际计算方式为:应用客户端配置的umask其实就是拿用户设置的权限减去上述umask权限,就得到文件或目录的最终权限了。如创建目录,默认777权限,然后减去umask权限022就等于755,即默认情况下owner拥有读写和可执行权限,owner所在group拥有读和可执行权限,other拥有读和可执行的权限
创建文件和目录时使用的umask,默认值为八进制022,每位数字对应了拥有者,组和其他用户。该值既可以使用八进制数字,如022,也可以使用符号,如u=rwx,g=r-x,o=r-x(对应022)
1.3、HDFSACL权限管理
解决问题:假设,我们有一个HDFS目录/user/tao/xt-data,它目前的权限为drwxrwxr-x tao supergroup。我希望让另一个用户Hbase(不属于任何group)对该目录有rwx的权限,这可以使用ACL权限解决
1.3.1、开启HDFS ACL
添加hdfs-site.xml
文件的两个配置项为true
:
<property>
<name>dfs.permissions.enabled</name>
<value>true</value>
</property>
<property>
<name>dfs.namenode.acls.enabled</name>
<value>true</value>
</property>
1.3.2、HDFS ACLshell命令
- 获取目录和文件的ACL信息
hdfs dfs -getfacl [-R] path
- 设置目录和文件的ACL信息
hdfs dfs -setfacl [-R] [-b|-k -m|-x <acl_spec> <path>]|[--set <acl_spec> <path>]
-R: 遍历路径里的所有文件。
-m: 添加新的权限来使用此ACL。不影响现有权限。
-b: 撤销除了基本用户和组权限以外的所有权限。
-k: 撤销默认的ACL设置。
-x: 只撤销指定的ACL。
<acl_spec>: 逗号分隔的ACL权限列表。
--set: 使用该选项指定的路径完全取代现有的ACL。之前的ACL将不再适用。
hdfs dfs -setfacl -R -m user:testUser:rw- /test/acl
- 显示文件和目录的访问控制列表(ACL),如果目录具有默认的AClL,