我正在学习Hadoop,想尝试伪分布式操作
当我尝试使用start-all.sh
来启动Hadoop守护进程时,我应该使用像foo用户这样的非root用户还是使用root用户。
使用root没有问题,但是,我有点担心它
使用非root用户foo用户,它抱怨没有权限文件
/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
,但无法保存。事实证明,foo用户没有权限在/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
使用root吗?或者权限有问题(我真的很困惑)?
不建议将Hadoop作为根启动,下面引用自雅虎的Hadoop教程:
拥有Hadoop实例的用户需要具有对每个目录的写访问权限。并非所有人都需要用户可以访问这些目录。使用chmod设置权限视情况而定。在大型环境中,建议您在每个节点上创建一个名为"hadoop"的用户,用于明确的目的拥有和运行Hadoop任务。对于单个个体的机器,在您自己的用户名下运行Hadoop是完全可以接受的。它不建议您以root身份运行Hadoop。
即使foo-user
在Linux文件系统的hadoop
组中,您仍然需要确保foo-user
也是HDFS中的组成员(默认情况下,该组称为supergroup
),当您执行hadoop fs -ls path_to_your_data
时,您将看到该组是什么。
组以及用户都需要是hadoop。给你:
drwxrwxr-x root hadoop 4096 Feb 8 23:42 hadoop
因此,将root更改为hadoop(目前我无法访问任何linux机器,因此无法说出确切的命令),然后确保hadoop用户能够在/var/run/hadoop
中创建分支和目录。我强烈建议非root用户运行它。