HDFS_NAMENODE_USER、HDFS_DATANODE_USER & HDFS_SECONDARYNAMENODE_USER 未定义

HDFS_NAMENODE_USER, HDFS_DATANODE_USER & HDFS_SECONDARYNAMENODE_USER not defined

我是 hadoop 新手。
我正在尝试以伪分布式模式在我的笔记本电脑中安装 hadoop。
我正在 运行 使用 root 用户登录它,但出现以下错误。

root@debdutta-Lenovo-G50-80:~# $HADOOP_PREFIX/sbin/start-dfs.sh
WARNING: HADOOP_PREFIX has been replaced by HADOOP_HOME. Using value of HADOOP_PREFIX.
Starting namenodes on [localhost]
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.
Starting secondary namenodes [debdutta-Lenovo-G50-80]
ERROR: Attempting to operate on hdfs secondarynamenode as root
ERROR: but there is no HDFS_SECONDARYNAMENODE_USER defined. Aborting operation.
WARNING: HADOOP_PREFIX has been replaced by  HADOOP_HOME. Using value of HADOOP_PREFIX.

此外,我必须 运行 root 用户中的 hadoop,因为 hadoop 无法通过其他用户访问 ssh 服务。
如何解决同样的问题?

根据第一个警告 HADOOP_PREFIX,听起来您没有正确定义 HADOOP_HOME

这将在您的 /etc/profile.d 中完成。

hadoop-env.sh 是定义这些变量的其余部分的地方。

请参考UNIX Shell Guide

hadoop is not able to access ssh service with other user

这与Hadoop本身无关。这是基本的 SSH 帐户管理。你需要

  1. 在集群的所有机器上创建 hadoop(和其他,如 yarn)帐户(参见 adduser 命令文档)
  2. 使用 ssh-copy-id hadoop@localhost 复制无密码 SSH 密钥,例如

如果不需要分布式模式,只想在本地使用Hadoop,可以使用Mini Cluster.

文档还建议在继续伪分布式之前进行单节点安装

照它说的做:

export HDFS_NAMENODE_USER="root"
export HDFS_DATANODE_USER="root"
export HDFS_SECONDARYNAMENODE_USER="root"
export YARN_RESOURCEMANAGER_USER="root"
export YARN_NODEMANAGER_USER="root"

Vim ${HADOOP_HOME}sbin/start-dfs.sh & ${HADOOP_HOME}sbin/stop-dfs.sh, 然后加上:

HDFS_DATANODE_USER=root
HADOOP_SECURE_DN_USER=hdfs 
HDFS_NAMENODE_USER=root 
HDFS_SECONDARYNAMENODE_USER=root 

这个问题的根本原因,

  1. 为不同的用户安装hadoop,然后为不同的用户启动纱线服务。 或者
  2. 在 hadoop 配置的 hadoop-env.sh 中指定了 HDFS_NAMENODE_USER 和 HDFS_DATANODE_USER 用户是其他的。

因此我们需要更正并使其在每个地方保持一致。所以这个问题的一个简单的解决方案是编辑你的 hadoop-env.sh 文件并添加你想要启动 yarn 服务的用户名。因此,继续编辑 $HADOOP_HOME/etc/hadoop/hadoop-env.sh,添加以下行

export HDFS_NAMENODE_USER=root
export HDFS_DATANODE_USER=root
export HDFS_SECONDARYNAMENODE_USER=root
export YARN_RESOURCEMANAGER_USER=root
export YARN_NODEMANAGER_USER=root

现在保存并启动 yarn、hdfs 服务并检查它是否工作。

  1. 检查您的 pdsh 默认 rcmd rsh

pdsh -q -w localhost -- 应该得到这样的东西

-- DSH-specific 选项 -- 分开 stderr/stdout 是 cmd none 前面的路径 附加到 cmd none 命令:none 完整的程序路径名 /usr/bin/pdsh 远程程序路径/usr/bin/pdsh

-- 通用选项 -- 本地用户名 enock 本地 uid 1000 远程用户名enock Rcmd 类型 rsh 一个 ^C 将杀死 pdsh 否 连接超时(秒)10 命令超时(秒)0 扇出 32 显示主机名标签 是 调试否

-- 目标节点 -- 本地主机

  1. 修改pdsh默认rcmd。将 pdsh 添加到 bashrc 纳米~/.bashrc -- 在末尾添加这一行 导出 PDSH_RCMD_TYPE=ssh - 更新 来源 ~/.bashrc

这应该可以解决您的问题

C。 sbin/start-dfs.sh