hadoop fs -put 命令
Posted
技术标签:
【中文标题】hadoop fs -put 命令【英文标题】:hadoop fs -put command 【发布时间】:2013-08-31 08:26:37 【问题描述】:我使用 Cloudera CDH 存储库在 CentOS 上构建了一个单节点 Hadoop 环境。当我想将本地文件复制到 HDFS 时,我使用了命令:
sudo -u hdfs hadoop fs -put /root/MyHadoop/file1.txt /
但是,结果让我很沮丧:
put: '/root/MyHadoop/file1.txt': No such file or directory
我确定这个文件确实存在。
请帮帮我,谢谢!
【问题讨论】:
【参考方案1】:作为用户hdfs
,您是否有权访问/root/
(在您的本地硬盘中)?通常你不会。
您必须先将file1.txt
复制到本地hdfs
用户具有读取权限的位置,然后再尝试将其复制到HDFS。
试试:
cp /root/MyHadoop/file1.txt /tmp
chown hdfs:hdfs /tmp/file1.txt
# older versions of Hadoop
sudo -u hdfs hadoop fs -put /tmp/file1.txt /
# newer versions of Hadoop
sudo -u hdfs hdfs dfs -put /tmp/file1.txt /
--- 编辑:
看看the cleaner roman-nikitchenko's answer bellow。
【讨论】:
谢谢,但我试图将这个文件移动到另一个地方,输入以下命令:sudo -u hdfs hadoop fs -put /home/skfeng/Downloads/hadoop-book-master/test- data/ch1/file1.txt / 它仍然不起作用并且具有相同的结果: put: `/home/skfeng/Downloads/hadoop-book-master/test-data/ch1/file1.txt': 否这样的文件或目录 用户hdfs
是否有权访问用户skfeng
的家?
是的!我明白了!用户 hdfs 无法访问其他用户的主页,我为 hdfs 创建了一个新目录,它可以正常工作!非常感谢!:)【参考方案2】:
我有同样的情况,这是我的解决方案:
HADOOP_USER_NAME=hdfs hdfs fs -put /root/MyHadoop/file1.txt /
优点:
-
你不需要
sudo
。
您根本不需要真正合适的本地用户“hdfs”。
您无需复制任何内容或更改权限,因为之前的要点。
【讨论】:
我喜欢这个解决方案,但我总是忘记环境变量名称是什么:P +1 谢谢,我必须使用 DFS 而不是 FS,像这样:HADOOP_USER_NAME=PUT_YOUR_USER_HERE hdfs dfs -put /source/xxx/yyy /destination/zzz【参考方案3】:尝试通过 usig 在 HDFS 中创建一个目录:$ hadoop fs -mkdir your_dir
然后放进去$ hadoop fs -put /root/MyHadoop/file1.txt your_dir
【讨论】:
【参考方案4】:这里是一个在python脚本中直接将df写入hdfs文件系统的命令:
df.write.save('path', format='parquet', mode='append')
模式可以附加 |覆盖
如果你想使用 shell 放入 hdfs 使用这个命令: hdfs dfs -put /local_file_path_location /hadoop_file_path_location
然后您可以检查 localhost:50070 UI 进行验证
【讨论】:
以上是关于hadoop fs -put 命令的主要内容,如果未能解决你的问题,请参考以下文章