UGO权限介绍
HDFS用户及组
面向Linux操作系统,root是超级用户,其他用户都叫普通用户;面向Linux操作系统中的软件,谁启动管理这个进程,那么这个用户就是这个软件的超级用户。针对HDFS集群来说启动HDFS集群的用户就是HDFS中的超级用户。上个小节案例中由于启动HDFS集群的用户是root,root就是HDFS的超级用户,所以在HDFS中默认创建文件和目录对应的用户都是root。
那么HDFS中除了超级用户还有哪些用户?Linux系统上的用户和用户组信息存储在/etc/passwd和/etc/group文件中,默认情况下,HDFS会通过Group Mapping服务自动获取NameNode服务器上的用户作为可以操作HDFS集群的用户,获取到这些用户后,HDFS还会通过用户组关联服务获取每个用户对应的用户组,用于后期操作HDFS 的用户组权限校验。
如下操作中,在NameNode所在节点创建普通用户,并验证HDFS集群中对应该用户及组信息。
#在node1中创建用户组laowu
[root@node1 ~]# groupadd laowu
#创建用户laowu并指定所属用户组为laowu
[root@node1 ~]# useradd laowu -g laowu
#设置密码为123456
[root@node1 ~]# passwd laowu#在HDFS查询laowu对应的组信息,可以看到用户及组都被同步过来
[root@node1 ~]# hdfs groups laowu
laowu : laowu
UGO权限操作
ACL权限管理
ACL背景
ACL操作
普通用户搭建启动HDFS集群
前面进行HDFS集群搭建过程中使用的是Linux超级用户root,我们也可以使用普通用户进行HDFS搭建,后续课程基于root用户操作HDFS,所以这里建议在使用普通用户搭建和启动HDFS集群之前先拍摄快照,这样方便后续快照回滚。
这里我们使用用户zhangsan作为普通用户进行HDFS HA集群搭建,搭建之前可以将各个节点上之前搭建 HDFS相关的目录删除。
HDFS节点规划
各个节点创建普通用户及免密
HDFS HA集群搭建
#vim $HADOOP_HOME/etc/hadoop/hdfs-site.xml <configuration> <!-- 指定副本的数量 --> <property> <name>dfs.replication</name> <value>3</value> </property> <!-- 解析参数dfs.nameservices值hdfs://mycluster的地址 --> <property> <name>dfs.nameservices</name> <value>mycluster</value> </property> <!-- mycluster由以下三个namenode支撑 --> <property> <name>dfs.ha.namenodes.mycluster</name> <value>nn1,nn2,nn3</value> </property> <property> <!-- dfs.namenode.rpc-address.[nameservice ID].[name node ID] namenode 所在服务器名称和RPC监听端口号 --> <name>dfs.namenode.rpc-address.mycluster.nn1</name> <value>node1:8020</value> </property> <property> <!-- dfs.namenode.rpc-address.[nameservice ID].[name node ID] namenode 所在服务器名称和RPC监听端口号 --> <name>dfs.namenode.rpc-address.mycluster.nn2</name> <value>node2:8020</value> </property> <property> <!-- dfs.namenode.rpc-address.[nameservice ID].[name node ID] namenode 所在服务器名称和RPC监听端口号 --> <name>dfs.namenode.rpc-address.mycluster.nn3</name> <value>node3:8020</value> </property> <property> <!-- dfs.namenode.http-address.[nameservice ID].[name node ID] namenode 监听的HTTP协议端口 --> <name>dfs.namenode.http-address.mycluster.nn1</name> <value>node1:9870</value> </property> <property> <!-- dfs.namenode.http-address.[nameservice ID].[name node ID] namenode 监听的HTTP协议端口 --> <name>dfs.namenode.http-address.mycluster.nn2</name> <value>node2:9870</value> </property> <property> <!-- dfs.namenode.http-address.[nameservice ID].[name node ID] namenode 监听的HTTP协议端口 --> <name>dfs.namenode.http-address.mycluster.nn3</name> <value>node3:9870</value> </property> <!-- namenode高可用代理类 --> <property> <name>dfs.client.failover.proxy.provider.mycluster</name> <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value> </property> <!-- 指定三台journal node服务器的地址 --> <property> <name>dfs.namenode.shared.edits.dir</name> <value>qjournal://node3:8485;node4:8485;node5:8485/mycluster</value> </property> <!-- journalnode 存储数据的地方 --> <property> <name>dfs.journalnode.edits.dir</name> <value>/home/zhangsan/data/journal/node/local/data</value> </property> <!--启动NN故障自动切换 --> <property> <name>dfs.ha.automatic-failover.enabled</name> <value>true</value> </property> <!-- 当active nn出现故障时,ssh到对应的服务器,将namenode进程kill掉 --> <property> <name>dfs.ha.fencing.methods</name> <value>sshfence</value> </property> <property> <name>dfs.ha.fencing.ssh.private-key-files</name> <value>/home/zhangsan/.ssh/id_rsa</value> </property> </configuration>