2013-11-25 50 views
1

我非常感谢您的帮助。Hadoop:针对多个用户的伪分布式模式

我已经使用root用户凭证以伪分布模式设置Hadoop。我想为多个用户提供访问权限(让我们说hadoop1,hadoop2等)能够在此群集上提交和运行MapReduce作业。我们如何完成这项工作?

我到目前为止做了什么?

> - Setup Hadoop to run in Pseudo-distributed mode 
> - Used "root" user credentials to set this up. 
> - Added users hadoop1 and hadoop2 to a group called "hadoop". 
> - Added root also to be part of the group "hadoop". 
> - Created a folder called hdfstmp and set this as the path for hadoop.tmp.dir. 
> - Started the cluster using bin/start-all.sh 
> - Ran MapReduce jobs using hadoop1 and hadoop2 users. 

我得到了下面的错误:

Exception in thread "main" java.io.IOException: Permission denied 
     at java.io.UnixFileSystem.createFileExclusively(Native Method) 
     at java.io.File.createNewFile(File.java:1006) 
     at java.io.File.createTempFile(File.java:1989) 
     at org.apache.hadoop.util.RunJar.main(RunJar.java:119) 
  • 为了克服这个错误,我给组 “的Hadoop” rwx权限到文件夹hdfstmp。这个文件夹的权限看起来像drwxrwxr-x。
  • 使用hadoop1和hadoop2用户登录提交MapReduce作业。这项工作运行良好,没有任何错误。

但是,如果我做了一个stop-all.sh,然后做一个start-all.sh,DataNode(偶尔甚至NameNode)不会启动。当我检查日志时,发现错误如下:

2013-09-21 16:43:54,518 WARN org.apache.hadoop.hdfs.server.datanode.DataNode:dfs.data.dir中的目录无效:不正确的许可/ data/hdfstmp/dfs/data,预计:rwxr-xr-x,而实际:rwxrwxr-x

现在,不更改hdfstmp目录的组所有权,用户不运行。但是,当NameNode重新启动时,我得到如上问题。

我该如何解决这个问题?同样的最佳做法是什么?

此外,有没有办法监测不同用户提交的作业?我假设Web UI应该允许我这样做。请确认。

我很感激您可以就此问题提供的任何帮助。谢谢。

问候

+0

当您修改tmp文件夹权限 - 您是否修改HDFS或本地磁盘上的文件夹? –

+0

克里斯 - 我修改了本地磁盘上的权限。 – user3031097

回答

0

增加专用的Hadoop系统用户

我们将使用专用的Hadoop用户帐户运行的Hadoop。虽然这不是必需的,但推荐使用它,因为它有助于将Hadoop安装与运行在同一台计算机上的其他软件应用程序和用户帐户分开(思考:安全性,权限,备份等)。

#addgroup hadoop 
#adduser --ingroup hadoop hadoop1 
#adduser --ingroup hadoop hadoop2 

这会将用户hduser和组hadoop添加到您的本地计算机。您的Hadoop

更改权限安装目录

chown -R hduser:hadoop hadoop 

最后一点变化的hadoop临时directoy许可

如果你的临时目录是/程序/ Hadoop的/ tmp目录

#mkdir -p /app/hadoop/tmp 
#chown hduser:hadoop /app/hadoop/tmp 

,如果你想加强安全性,chmod来回m 755至750 ...

#chmod 750 /app/hadoop/tmp 
+0

感谢您的回复。问题:如果我的/ app/hadoop/tmp目录拥有755权限,这意味着只有拥有者'hduser'可以在该目录内创建文件,'hadoop'组的成员(在这种情况下为hadoop1和hadoop2)不能创建这个目录内的文件。我的理解是否正确?如果是,那么当用户hadoop1执行MapReduce作业时,中间数据必须写入'/ app/hadoop/tmp'目录,但hadoop1没有WRITE权限。所以,你会得到一个'权限被拒绝'的错误。我的理解是否正确? – user3031097

+0

如果** hadoop1 **和** hadoop2 **都是** hadoop **组的成员,则他们有权读取和写入**/app/hadoop/tmp **中的文件。如果你获得拒绝许可的错误,这意味着他们不是** hadoop **组的成员。 – user2486495

+0

我确信我的组已正确设置,并且hadoop用户是hadoop目录的一部分。我尝试了对hadoop目录和hadoop.tmp.dir目录的755权限,但仍然收到'Permission Denied'错误。我是Linux新手,所以如果我错了,请纠正我:R-X不允许用户/组访问该目录中的文件,对吧? – user3031097

相关问题