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 命令的主要内容,如果未能解决你的问题,请参考以下文章

hadoop中命令经常含有-fs,-dfs,fs和dfs有啥区别?作用是啥?

hadoop fs 命令

Hadoop命令 hadoop fs

Hadoop基础hadoop fs 命令

Hadoop fs必需要记住的常用命令

hadoop fs(HDFS文件系统命令)