前面创建的集群都是用root用户创建的,但是企业中是不会用root进行操作,这里将对root搭建的应用切换到普通用户管理。
实操:切换root用户搭建的HDFS,用god(自己新建的普通用户)来管理。
1.停止之前的集群
$ stop-dfs.sh
2.在每个节点机器添加普通用户
$ useradd god
$ passwd god
3.将资源和用户绑定
# hdfs集群目录
$ chown -R god /opt/bigdata/hadoop# 文件存储目录
$ chown -R god /var/bigdata/hadoop
4.切换到god用户去做免密登陆
# 拿到用户目录下的.ssh目录
$ ssh localhost$ cd /home/god/.ssh# 在node01
$ ssh-keygen -t dsa -P '' -f ./id_dsa
$ ssh-copy_id -i id_dsa node01
$ ssh-copy_id -i id_dsa node02
$ ssh-copy_id -i id_dsa node03
$ ssh-copy_id -i id_dsa node04# 在node02
$ ssh-keygen -t dsa -P '' -f ./id_dsa
$ ssh-copy_id -i id_dsa node01
$ ssh-copy_id -i id_dsa node02
5.修改hdfs-site.xml中的免密配置
在node01:
<property>
<name>dfs.ha.fencing.ssh.private-key-files</name>
<value>/home/god/.ssh/id_dsa</value>
</property>
将原来的 /root/.ssh/id_dsa 改为 /home/god/.ssh/id_dsa然后分发给其他三台机器
$ scp hdfs-site.xml node02:`pwd` $ scp hdfs-site.xml node03:`pwd` $ scp hdfs-site.xml node04:`pwd`
6.启动hdfs
$ start-dfs.sh
注意:
hdfs的用户和组 依赖于操作系统的用户和组
例如: 在node01 上 :
# god用户创建目录/temp $ hdfs dfs -mkdir /temp# 更改temp为god所属的xxoo组 $ hdfs dfs -chown god:xxoo /temp# 修改temp权限 $ hdfs dfs -chmod 770 /temp# 然后再node04创建good用户 属于xxoo组,去操作temp $ useradd good $ passwd good $ groupadd xxoo $ usermod -a -G xxoo good $ id good $ su good $ hdfs dfs -mkdir /temp/abc # 此时会提示创建失败 没有权限# 解决方法: # 需要在node01上创建同样的用户和组,然后刷新hdfs用户和组 $ su root $ useradd good $ passwd good $ groupadd xxoo $ usermod -a -G xxoo good $ su god # 注意 此处需要切换到god用户刷新hdfs用户和组,因为此时hdfs已经属于god而不属于root $ hdfs dfsadmin -refreshToGroupsMappings# 此时 在node04上就可以用good用户在/temp目录下操作了 因为god和good同属于xxoo组