Hadoop:start-dfs.sh权限被拒绝

26
我正在我的笔记本电脑上安装Hadoop。SSH工作正常,但我无法启动Hadoop。
munichong@GrindPad:~$ ssh localhost
Welcome to Ubuntu 12.10 (GNU/Linux 3.5.0-25-generic x86_64)

 * Documentation:  https://help.ubuntu.com/

0 packages can be updated.
0 updates are security updates.

Last login: Mon Mar  4 00:01:36 2013 from localhost

munichong@GrindPad:~$ /usr/sbin/start-dfs.sh
chown: changing ownership of `/var/log/hadoop/root': Operation not permitted
starting namenode, logging to /var/log/hadoop/root/hadoop-munichong-namenode-GrindPad.out
/usr/sbin/hadoop-daemon.sh: line 136: /var/run/hadoop/hadoop-munichong-namenode.pid: Permission denied
usr/sbin/hadoop-daemon.sh: line 135: /var/log/hadoop/root/hadoop-munichong-namenode-GrindPad.out: Permission denied
head: cannot open `/var/log/hadoop/root/hadoop-munichong-namenode-GrindPad.out' for reading: No such file or directory
localhost: chown: changing ownership of `/var/log/hadoop/root': Operation not permitted
localhost: starting datanode, logging to /var/log/hadoop/root/hadoop-munichong-datanode-GrindPad.out
localhost: /usr/sbin/hadoop-daemon.sh: line 135: /var/log/hadoop/root/hadoop-munichong-datanode-GrindPad.out: Permission denied
localhost: /usr/sbin/hadoop-daemon.sh: line 136: /var/run/hadoop/hadoop-munichong-datanode.pid: Permission denied
localhost: head: cannot open `/var/log/hadoop/root/hadoop-munichong-datanode-GrindPad.out' for reading: No such file or directory
localhost: chown: changing ownership of `/var/log/hadoop/root': Operation not permitted
localhost: starting secondarynamenode, logging to /var/log/hadoop/root/hadoop-munichong-secondarynamenode-GrindPad.out
localhost: /usr/sbin/hadoop-daemon.sh: line 136: /var/run/hadoop/hadoop-munichong-secondarynamenode.pid: Permission denied
localhost: /usr/sbin/hadoop-daemon.sh: line 135: /var/log/hadoop/root/hadoop-munichong-secondarynamenode-GrindPad.out: Permission denied
localhost: head: cannot open `/var/log/hadoop/root/hadoop-munichong-secondarynamenode-GrindPad.out' for reading: No such file or directory

munichong@GrindPad:~$ sudo /usr/sbin/start-dfs.sh
[sudo] password for munichong: 
starting namenode, logging to /var/log/hadoop/root/hadoop-root-namenode-GrindPad.out
localhost: Permission denied (publickey,password).
localhost: Permission denied (publickey,password).

我使用了“sudo”。但是权限仍然被拒绝。

有人可以帮助我吗?

提前致谢!


5
  1. 你是否使用同一用户启动所有的Hadoop守护进程?
  2. 机器上是否正确设置了无密码SSH?也就是说,你能否运行ssh localhost而不需要输入密码?
- harpun
11个回答

40

我也曾遇到同样的问题,困扰了几个小时,但最终解决了。 我的hadoop安装和运行使用的是相同的用户进行提取,所以用户权限不是问题。 我的配置如下: 谷歌云上的Ubuntu Linux机器。

hadoop安装在/home/目录下, hadoop数据目录在/var/lib/hadoop, 并且目录访问位为777,所以任何人都可以访问。 我通过ssh连接到远程机器,修改了配置文件并执行了start-dfs.sh,结果出现了"Permission denied (Public key)"。 以下是解决方案:

  1. ssh-keygen

2.它会询问要将密钥复制到哪个文件夹中,请输入/home/hadoop/.ssh/id_rsa

3.它会询问密码短语,请保持为空以简化操作。

4.cat /home/hadoop/.ssh/id_rsa.pub >> .ssh/authorized_keys (将新生成的公共密钥复制到用户家目录下的auth文件中)

  1. ssh localhost

  2. start-dfs.sh (现在应该可以工作了!)


8
我可以在不需要密码提示的情况下运行 ssh localhost。但是我仍然无法运行 start-dfs.sh。 - tom10271
运行此代码时要小心,可能会丢失一些配置。这里的.ssh/authorized keys内容将被覆盖。Jacek的解决方案更好。 - Soren
@Sören,使用>>将内容附加到现有的authorized_keys文件中。它不会覆盖内容。 - amiabl

23
我也遇到了相同的问题,于是尝试连接SSH并得到了"not found"这样的提示,所以我按照以下步骤去ssh位置进行排除故障:

cd ~/.ssh

ssh-keygen -t rsa -p""

cat id_rsa.pub >> authorized_keys

... 然后就可以正常工作了 ...


2
什么时候使用ssh_keygen而不是ssh-keygen?我只安装了后者(带连字符)在我的Ubuntu 16上。ssh-keygen -t rsa -p"" 失败了,因为没有id_rsa文件,并且因为我没有在提示时指定替代文件。 - Philip

5
尝试更改文件夹 /var/log/hadoop/root 的所有权为用户 munichong。在所有系统中,需要通过 hadoop 编辑 LOGS 目录。因此,需要编辑 LOG 文件夹及其内容的权限。
在这种情况下,sudo 无法使用,因为这需要在此脚本完成其工作后继续具有更改文件夹内容的权限,即启动后台中的 HADOOP 服务。

1
您可以通过在 hadoop-env.sh 文件中添加以下行来将日志目录从默认的 /var/log 更改为自定义位置:export HADOOP_LOG_DIR=<您的位置> - Milind Jindal

4

您正在尝试通过ssh连接到自己的机器(本地主机),但缺少允许登录的authorized_keys文件。

这个SSH文件指定了可以用于登录配置了该文件的用户账户的SSH密钥。

按照以下两个步骤正确配置它:

在终端中使用以下命令生成新的密钥:

ssh-keygen

按下回车以保留默认名称id_rsa.pub。

现在注册生成的密钥文件:

cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys

如果你看到 sign_and_send_pubkey: signing failed: agent refused operation 错误信息,那么你需要添加刚刚创建的密钥:ssh-add;附注:要检查所有密钥列表,请使用命令:ssh-add -l - Kirill Karmazin

1
我现在也面临这个问题,在遇到这个问题之前,我使用以下方法。
  1. sudo -s -H

使用此代码登录为root用户。

  1. ssh localhost

使用ssh登录(如果您只想使用单节点模式)。

  1. ./sbin/start-dfs.sh

./sbin/start-yarn.sh

“cd”到您的Hadoop安装路径,然后打印该代码以启动HDFS&MapRedude,然后您将不会再遇到权限问题。

我猜测这个问题的原因:

我使用root用户初始化Hadoop环境,因此几个文件夹是由root用户创建的,因此当我现在像“Jake”这样使用自己的帐户时,我没有权限启动服务(此时系统需要访问日志)。

enter image description here


0

针对权限被拒绝的问题安装R Hadoop,下面的命令可用于启动start-all.sh。

sudo chown -R hadoop /usr/local/hadoop/ 

0
我认为问题在于root用户和用户的ssh连接。 这是我复制的链接https://askubuntu.com/questions/497895/permission-denied-for-rootlocalhost-for-ssh-connection 解决了我的问题。
默认情况下,SSH服务器拒绝root用户基于密码的登录。在/etc/ssh/sshd_config中,
将: PermitRootLogin without-password 改为 PermitRootLogin yes
然后重新启动SSH:sudo service ssh restart
或者,您可以使用SSH密钥。如果您没有,可以使用ssh-keygen创建一个(保持密钥的默认设置,如果愿意可以跳过密码)。然后执行sudo -s(或者您首选的以root身份运行的方法),并将SSH密钥添加到/root/.ssh/authorized_keys:
cat /home/user/.ssh/id_rsa.pub >> /root/.ssh/authorized_keys

0
尝试更改存储hdfs namenode和datanode的位置的权限。
在hdfs-site.xml中提到的位置应具有755的权限,即-rwxr-xr-x,使用hadoop运行的用户。
还要为日志位置设置相同的权限。
希望这可以帮助!

0

不得不这样做,就像上面的每个人一样:

cd ~/.ssh

ssh-keygen -t rsa -p""

cat id_rsa.pub >> authorized_keys

但这就是关键:

chmod 400 ~/.ssh/id_rsa

0

我收到了类似的错误信息,这让我找到了这篇文章。
完整的错误信息如下:

localhost: rcmd: socket: Permission denied

此篇文章所述,对于这种情况,您需要创建文件/etc/pdsh/rcmd_defaul,并将其内容设置为ssh
echo "ssh" > /etc/pdsh/rcmd_default

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接