为隔离Hadoop操作权限,避免使用root账户,需创建专用用户和用户组:
# 创建hadoop用户组
sudo groupadd hadoop
# 创建hadoop用户(-r表示系统用户,-g指定所属组)
sudo useradd -r -g hadoop hadoop
# 设置hadoop用户密码(可选)
sudo passwd hadoop
说明:后续Hadoop相关操作均使用hadoop用户执行,提升安全性。
将Hadoop安装目录(如/opt/hadoop)及关键文件的所有权赋予hadoop用户,确保其有足够权限执行操作:
# 创建Hadoop安装目录(若未安装)
sudo mkdir -p /opt/hadoop
# 设置目录所有者及权限(755:所有者可读写执行,其他用户可读执行)
sudo chown -R hadoop:hadoop /opt/hadoop
sudo chmod -R 755 /opt/hadoop
注意:若Hadoop通过包管理器(如apt)安装,默认路径可能为/usr/local/hadoop,需调整命令中的路径。
为方便Hadoop用户执行管理员操作(如启动集群、修改系统配置),需将其加入sudo组:
# 将hadoop用户添加到sudo组
sudo usermod -aG sudo hadoop
验证:切换至hadoop用户,执行sudo ls /root,若无需密码即可列出内容,则配置成功。
Hadoop集群节点间需通过SSH无密码通信(如NameNode与DataNode),步骤如下:
# 切换至hadoop用户
su - hadoop
# 生成RSA密钥对(无密码)
ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
# 将公钥复制到本地authorized_keys(实现本地免密)
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
# 设置authorized_keys权限(600:仅所有者可读写)
chmod 600 ~/.ssh/authorized_keys
验证:执行ssh localhost,若无需输入密码即可登录,则配置成功。
为hadoop用户设置Hadoop相关环境变量,确保命令全局可用:
# 编辑hadoop用户的bash配置文件
su - hadoop
vim ~/.bashrc
在文件末尾添加以下内容(根据实际安装路径调整):
export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64 # 替换为你的JDK路径
export HADOOP_HOME=/opt/hadoop
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
保存后执行source ~/.bashrc使配置生效。
通过修改Hadoop配置文件,启用HDFS权限检查及ACL(访问控制列表)功能:
# 编辑core-site.xml
vim $HADOOP_HOME/etc/hadoop/core-site.xml
添加以下内容:
<property>
<name>hadoop.security.authentication</name>
<value>simple</value> <!-- 简单认证(生产环境建议用kerberos) -->
</property>
<property>
<name>dfs.permissions.enabled</name>
<value>true</value> <!-- 开启HDFS权限检查 -->
</property>
<property>
<name>dfs.namenode.acls.enabled</name>
<value>true</value> <!-- 开启Namenode ACL -->
</property>
<property>
<name>dfs.datanode.acls.enabled</name>
<value>true</value> <!-- 开启Datanode ACL -->
</property>
# 编辑hdfs-site.xml
vim $HADOOP_HOME/etc/hadoop/hdfs-site.xml
添加以下内容:
<property>
<name>dfs.permissions.superusergroup</name>
<value>hadoop</value> <!-- 指定超级用户组(hadoop组用户拥有超级权限) -->
</property>
重启HDFS使配置生效:
stop-dfs.sh && start-dfs.sh
通过hdfs dfs命令设置文件/目录权限及所有权:
# 查看HDFS根目录权限
hdfs dfs -ls /
# 创建目录并设置权限(755:所有者可读写执行,组和其他用户可读执行)
hdfs dfs -mkdir -p /user/hadoop/data
hdfs dfs -chmod 755 /user/hadoop/data
# 修改目录所有者(将data目录所有者设为hadoop用户,组设为hadoop组)
hdfs dfs -chown hadoop:hadoop /user/hadoop/data
# 设置文件权限(644:所有者可读写,其他用户可读)
hdfs dfs -chmod 644 /user/hadoop/data/test.txt
说明:HDFS权限模型与Linux类似,采用UGO(用户、组、其他)模式,权限值对应:r=4、w=2、x=1。
若需为特定用户或组设置额外权限,可使用ACL(访问控制列表):
# 为用户hadoop1添加目录读写执行权限
hdfs dfs -setfacl -m user:hadoop1:rwx /user/hadoop/data
# 为组analytics添加目录读权限
hdfs dfs -setfacl -m group:analytics:r /user/hadoop/data
# 删除用户hadoop1的所有权限
hdfs dfs -setfacl -x user:hadoop1 /user/hadoop/data
# 查看目录ACL信息
hdfs dfs -getfacl /user/hadoop/data
说明:ACL适用于需要更灵活权限的场景(如允许特定用户访问某目录),但需确保dfs.namenode.acls.enabled已开启。
777),应根据实际需求分配最小必要权限;hdfs dfs -ls和hdfs dfs -getfacl检查权限设置,防止未授权访问。