我有一个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
感谢
答案 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