如何在远程计算机上将文件放入HDFS时指定用户名

时间:2012-07-07 00:05:16

标签: hadoop username hdfs

我有一个Hadoop集群设置,并在一个通用的默认用户名“user1”下工作。我想将文件放入远程机器中的hadoop,而远程机器不是hadoop集群的一部分。我在远程计算机上配置hadoop文件的方式是

hadoop dfs -put file1 ...
从远程计算机调用

,它将file1放在Hadoop集群上。

唯一的问题是我在远程计算机上以“user2”身份登录,并且没有给出我期望的结果。实际上,上述代码只能在远程机器上执行:

hadoop dfs -put file1 /user/user2/testFolder

然而,我真正想要的是能够将文件存储为:

hadoop dfs -put file1 /user/user1/testFolder

如果我尝试运行最后一个代码,hadoop会因访问权限而抛出错误。无论如何我可以在hadoop dfs命令中指定用户名吗?

我正在寻找类似的东西:

hadoop dfs -username user1 file1 /user/user1/testFolder

感谢

4 个答案:

答案 0 :(得分:79)

如果您使用HADOOP_USER_NAME env变量,您可以告诉HDFS要使用哪个用户名。请注意,这仅适用于您的群集未使用安全功能(例如Kerberos)的情况。例如:

HADOOP_USER_NAME=hdfs hadoop dfs -put ...

答案 1 :(得分:14)

这对任何人都没有关系,但我正在使用一个小黑客。

我正在导出.bash_profile中的HADOOP_USER_NAME,以便每次登录时都会设置用户。

只需将以下代码行添加到.bash_profile:

export HADOOP_USER_NAME=<your hdfs user>

答案 2 :(得分:11)

默认情况下,Hadoop中的身份验证和授权已关闭。根据{{​​3}}(顺便说一句,好书 - 建议买它)

  

Hadoop用于HDFS权限的用户身份由运行决定   客户端系统上的whoami命令。同样,组名来自   运行组的输出。

因此,您可以创建一个新的whoami命令,该命令返回所需的用户名并将其适当地放入PATH中,以便在找到Linux附带的实际whoami之前找到创建的whoami。同样,您也可以使用groups命令。

这是一个黑客攻击,一旦打开身份验证和授权,它就无法运行。

答案 3 :(得分:0)

还有另外一篇与此类似的帖子可以通过ssh为你提供流媒体工作:

cat file.txt | ssh user1@clusternode "hadoop fs -put - /path/in/hdfs/file.txt"

有关详细信息,请参阅putting a remote file into hadoop without copying it to local disk