2013-02-09 172 views
0

我学习的Hadoop,并想尝试伪分布式运行HDFS root或者非root用户start-all.sh

当我尝试使用start-all.sh启动Hadoop守护进程,我应该使用非root用户,如foo-user或使用root用户。

使用root没有问题,但是,我有点担心它。

使用非root用户,富用户,它抱怨没有权限的文件

/var/run/hadoop/hadoop-foo-user-namenode.pid: permission denied 
/var/run/hadoop/hadoop-foo-user-tasktracker-foohost.pid: permission denied 

它试图在目录/var/run/hadoop

我创建这两个文件尝试vim /var/run/hadoop/testfile,并无法保存。所以事实证明,富用户没有权限写在/var/run/hadoop

我检查/var/run/hadoop

drwxrwxr-x root hadoop 4096 Feb 8 23:42 hadoop 

foo的用户是组Hadoop的许可,所以应该有写权限/var/run/hadoop。事实上,其他几家ID文件被创建有,像... jobtracker.pid

所以我应该用根start-all.sh或有一些错误的许可(我真搞不清楚)?

回答

0

组以及用户需要hadoop。在这里,您有:

drwxrwxr-x root hadoop 4096 Feb 8 23:42 hadoop 

所以更改根成的Hadoop(curently我没有访问任何Linux机器,所以我不能说确切的命令),然后让自己确信的Hadoop用户能够创建filies和/var/run/hadoop内的目录。我强烈建议以非root用户身份运行它。

2

它不建议开始的Hadoop为根,下面是雅虎的Hadoop教程引用:

谁拥有Hadoop的情况下,将需要已经阅读并 到这些目录的写访问的用户。所有 用户都无需访问这些目录。根据需要使用chmod 设置权限。在大规模环境中,建议您在每个节点上创建一个名为“hadoop”的用户,以便拥有和运行Hadoop任务的特定目的 。对于单个人的机器, 以您自己的用户名运行Hadoop是完全可以接受的。建议不要使用 作为root运行Hadoop。

即使foo-user是组hadoop在Linux文件系统,你还需要确保 即foo-user也是HDFS组成员(默认情况下该组被称为supergroup),你会看到什么该组是当你做hadoop fs -ls path_to_your_data