如何指定用户名时,把文件从远程机器上的HDFS?

ukxgm1gy  于 2022-12-09  发布在  HDFS
关注(0)|答案(5)|浏览(339)

我有一个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
d4so4syb

d4so4syb1#

如果你使用HADOOP_USER_NAME env变量,你可以告诉HDFS使用哪个用户名。注意,这只在你的集群没有使用安全特性(例如Kerberos)时有效。例如:

HADOOP_USER_NAME=hdfs hadoop dfs -put ...
8fq7wneg

8fq7wneg2#

这可能对任何人都不重要,但我正在使用一个小黑客。
我将HADOOP_USER_NAME导出到.bash_profile中,以便每次登录时都设置用户。
只需将以下代码行添加到.bash_profile中:

export HADOOP_USER_NAME=<your hdfs user>
zvms9eto

zvms9eto3#

默认情况下,Hadoop中的身份验证和授权是关闭的。根据Hadoop - The Definitive Guide(顺便说一句,不错的书-推荐购买)
Hadoop在HDFS中用于权限的用户身份是通过在客户端系统上运行whoami命令来确定的。
因此,你可以创建一个新的whoami命令,它返回所需的用户名,并将其放在PATH中,这样创建的whoami会在Linux自带的whoami被找到之前被找到。
这是一个黑客,一旦身份验证和授权已打开,就不会工作。

7d7tgy0s

7d7tgy0s4#

Shell/命令方式:

设置HADOOP_USER_NAME变量,并执行hdfs命令

export HADOOP_USER_NAME=manjunath
  hdfs dfs -put <source>  <destination>

Python道

import os 
  os.environ["HADOOP_USER_NAME"] = "manjunath"
ryhaxcpt

ryhaxcpt5#

还有一个类似的帖子,可以为您提供一个通过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

相关问题