Hadoop attempting to operate on hdfs namenode as root ERROR: but there is no HDFS_NAMENODE_USER defi

Hadoop集群配置错误:如何为HDFS和YARN指定用户权限
本文指导读者解决启动Hadoop时遇到的错误,重点在于如何在start-dfs.sh和start-yarn.sh文件中添加HDFS_NAMENODE_USER、HADOOP_SECURE_DN_USER等环境变量,以确保作为非root用户运行。通过编辑sbin文件夹下的相关脚本并指定合适的用户,避免了root权限操作限制。
问题描述
[root@localhost sbin]# start-dfs.sh 
Starting namenodes on [localhost.localdomain]
ERROR: Attempting to operate on hdfs namenode as root
ERROR: but there is no HDFS_NAMENODE_USER defined. Aborting operation.
Starting datanodes
ERROR: Attempting to operate on hdfs datanode as root
ERROR: but there is no HDFS_DATANODE_USER defined. Aborting operation.
[root@localhost sbin]# vim start-dfs.sh
分析原因

考虑是未指定 HDFS_NAMENODE_USER,指定一下就好啦

解决方法

在Hadoop安装目录下找到sbin文件夹

在里面修改四个文件

对于start-dfs.sh和stop-dfs.sh文件,添加下列参数:

#!/usr/bin/env bash
HDFS_DATANODE_USER=root
HADOOP_SECURE_DN_USER=hdfs
HDFS_NAMENODE_USER=root
HDFS_SECONDARYNAMENODE_USER=root

对于start-yarn.sh和stop-yarn.sh文件,添加下列参数:

#!/usr/bin/env bash
YARN_RESOURCEMANAGER_USER=root
HADOOP_SECURE_DN_USER=yarn
YARN_NODEMANAGER_USER=root

需要注意的是尽量放到.sh文件内容的上方,因为如果放到末尾,可能不注意放到了exit后面,是失效的

重新启动即可,
在这里插入图片描述

在操作 HDFS JournalNode 时,如果以 root 用户身份执行启动或停止命令,系统会检查是否定义了 `HDFS_JOURNALNODE_USER` 环境变量,用于指定运行 JournalNode 进程的操作系统用户。如果未定义该变量,则会报错并中止操作,提示信息为: ``` ERROR: Attempting to operate on hdfs journalnode as root ERROR: but there is no HDFS_JOURNALNODE_USER defined. Aborting operation. ``` 此行为是 Hadoop 的安全机制之一,目的是防止以 root 用户身份直接运行关键服务进程,从而避免潜在的安全风险和权限问题[^1]。 ### 解决方案 要解决此问题,可以在启动或停止脚本中显式定义 `HDFS_JOURNALNODE_USER` 变量,并将其设置为一个非 root 用户(如 `hdfs`),或者在某些测试环境中临时设置为 `root`(不推荐用于生产环境)。 #### 方法一:修改 `start-dfs.sh` 和 `stop-dfs.sh` 文件 在 Hadoop 安装目录的 `sbin` 子目录下找到 `start-dfs.sh` 和 `stop-dfs.sh` 文件,并在文件开头的 `#!/usr/bin/env bash` 行之后添加以下环境变量定义: ```bash HDFS_JOURNALNODE_USER=root ``` 如果使用非 root 用户(如 `hdfs`),则应设置为: ```bash HDFS_JOURNALNODE_USER=hdfs ``` 确保变量定义放置在脚本的顶部,否则可能不会生效[^5]。 #### 方法二:在命令行中临时设置变量 如果不想修改脚本文件,也可以在执行命令前临时设置该变量,例如: ```bash export HDFS_JOURNALNODE_USER=root ./start-dfs.sh ``` 或者: ```bash HDFS_JOURNALNODE_USER=root ./start-dfs.sh ``` #### 方法三:配置系统环境变量 也可以将 `HDFS_JOURNALNODE_USER` 添加到系统的环境变量配置中,例如在 `/etc/profile` 或用户主目录下的 `.bashrc` 文件中添加: ```bash export HDFS_JOURNALNODE_USER=root ``` 然后执行 `source /etc/profile` 或 `source ~/.bashrc` 使配置生效。 ### 注意事项 - **安全建议**:在生产环境中,应避免使用 `root` 用户运行 Hadoop 服务,建议创建专用用户(如 `hdfs`)并分配适当权限。 - **一致性**:确保所有节点上的配置一致,避免因环境变量不一致导致的集群启动失败。 - **其他类似变量**:类似地,YARN 的 ResourceManager 需要定义 `YARN_RESOURCEMANAGER_USER`,ZKFC 需要定义 `HDFS_ZKFC_USER` 等[^3]。 ---
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值