我有一个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
5条答案
按热度按时间d4so4syb1#
如果你使用HADOOP_USER_NAME env变量,你可以告诉HDFS使用哪个用户名。注意,这只在你的集群没有使用安全特性(例如Kerberos)时有效。例如:
8fq7wneg2#
这可能对任何人都不重要,但我正在使用一个小黑客。
我将HADOOP_USER_NAME导出到.bash_profile中,以便每次登录时都设置用户。
只需将以下代码行添加到.bash_profile中:
zvms9eto3#
默认情况下,Hadoop中的身份验证和授权是关闭的。根据Hadoop - The Definitive Guide(顺便说一句,不错的书-推荐购买)
Hadoop在HDFS中用于权限的用户身份是通过在客户端系统上运行whoami命令来确定的。
因此,你可以创建一个新的
whoami
命令,它返回所需的用户名,并将其放在PATH中,这样创建的whoami会在Linux自带的whoami被找到之前被找到。这是一个黑客,一旦身份验证和授权已打开,就不会工作。
7d7tgy0s4#
Shell/命令方式:
设置
HADOOP_USER_NAME
变量,并执行hdfs命令Python道
ryhaxcpt5#
还有一个类似的帖子,可以为您提供一个通过ssh使用流的解决方案:
有关详细信息,请参阅putting a remote file into hadoop without copying it to local disk