【问题标题】:Hadoop: Pseudo Distributed mode for multiple usersHadoop:多用户的伪分布式模式
【发布时间】:2013-11-26 21:50:27
【问题描述】:

提前感谢您的帮助。

我已经使用 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 目录的组所有权的情况下,我由不同用户提交的 MR 作业无法运行。但是当 NameNode 重新启动时,我遇到了上述问题。

我该如何克服这个问题?相同的最佳做法是什么?

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

感谢您在此问题上提供的任何帮助。谢谢。

问候

【问题讨论】:

  • 修改tmp文件夹权限的时候-修改HDFS上的文件夹,还是本地磁盘?
  • Chris - 我修改了本地磁盘的权限。

标签: hadoop


【解决方案1】:

添加专用 Hadoop 系统用户

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

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

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

更改 hadoop 安装目录的权限

chown -R hduser:hadoop hadoop

最后更改 hadoop 临时目录权限

如果你的临时目录是 /app/hadoop/tmp

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

如果你想加强安全性,chmod 从 755 到 750...

#chmod 750 /app/hadoop/tmp

【讨论】:

  • 感谢您的回复。问题:如果我的 /app/hadoop/tmp 目录的权限为 755,这意味着只有所有者 'hduser' 可以在该目录中创建文件,并且 'hadoop' 组的成员(在本例中为 hadoop1 和 hadoop2)无法创建该目录下的文件。我的理解正确吗?如果是,那么当用户 hadoop1 执行 MapReduce 作业时,中间数据必须写入 '/app/hadoop/tmp' 目录中,但 hadoop1 没有 WRITE 权限。因此,您将收到“权限被拒绝”错误。我的理解正确吗?
  • 如果 hadoop1hadoop2 都是 hadoop 组的成员,则他们有权读取和写入文件/app/hadoop/tmp。如果你得到一个权限被拒绝的错误,这意味着他们不是 hadoop 组的成员。
  • 我确信我已经正确设置了组,并且 hadoop 用户是 hadoop 目录的一部分。我尝试了对 hadoop 目录和 hadoop.tmp.dir 目录的 755 权限,但它仍然收到“权限被拒绝”错误。我是 Linux 新手,所以如果我错了,请纠正我:R-X 不会授予用户/组在该目录中写入文件的权限,对吧?
  • @user3031097 你解决过这个问题吗?我收到与mkdir: Permission denied: user=dijksterhuis, access=WRITE, inode="/user":hadoop:supergroup:drwxr-xr-x 相同的错误作为输出
猜你喜欢
  • 1970-01-01
  • 2011-02-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-04-04
  • 1970-01-01
相关资源
最近更新 更多