30

我是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 服务。
如何解决相同的问题?

4

5 回答 5

42

只做它要求你做的事:

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"
于 2018-01-09T14:31:29.290 回答
12

这个问题的根本原因,

  1. hadoop 为不同的用户安装,你为不同的用户启动纱线服务。或者
  2. 在 hadoop 配置的 hadoop-env.sh 中指定 HDFS_NAMENODE_USER 和 HDFS_DATANODE_USER 用户是别的东西。

因此,我们需要纠正并使其在每个地方都保持一致。所以这个问题的一个简单解决方案是编辑你的hadoop-env.sh文件并添加你想要启动纱线服务的用户名。所以继续并$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 服务并检查它是否正常工作。

于 2018-11-04T11:43:39.557 回答
3

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

这将在您的/etc/profile.d.

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

请参考UNIX Shell 指南

hadoop 无法与其他用户访问 ssh 服务

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

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

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

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

于 2018-01-06T22:45:33.433 回答
2

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 
于 2018-04-25T07:54:48.653 回答
0
  1. 检查您的 pdsh 默认 rcmd rsh

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

-- DSH 特定的选项 -- 单独的 stderr/stdout 是 cmd 前面的路径 none cmd 后面的 none 命令:none 完整的程序路径名 /usr/bin/pdsh 远程程序路径 /usr/bin/pdsh

-- 通用选项 -- 本地用户名 enock 本地 uid 1000 远程用户名 enock Rcmd type rsh one ^C will kill pdsh 否 连接超时(秒) 10 命令超时(秒) 0 扇出 32 显示主机名标签 是 调试 否

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

  1. 修改 pdsh 默认 rcmd。添加 pdsh 到 bashrc nano ~/.bashrc -- 在末尾添加这一行 export PDSH_RCMD_TYPE=ssh -- 更新源 ~/.bashrc

那应该可以解决您的问题

C.sbin/start-dfs.sh

于 2020-09-26T13:30:20.410 回答