如何将文件从 HDFS 复制到本地文件系统

Posted

技术标签:

【中文标题】如何将文件从 HDFS 复制到本地文件系统【英文标题】:How to copy file from HDFS to the local file system 【发布时间】:2013-07-24 03:45:50 【问题描述】:

。文件下没有文件的物理位置,甚至没有目录。我怎样才能将它们移动到我的本地进行进一步验证。我通过 winscp 进行了尝试。

【问题讨论】:

【参考方案1】:
    bin/hadoop fs -get /hdfs/source/path /localfs/destination/path bin/hadoop fs -copyToLocal /hdfs/source/path /localfs/destination/path 将您的网络浏览器指向HDFS WEBUI(namenode_machine:50070),浏览到您要复制的文件,向下滚动页面并点击下载文件

【讨论】:

完美的tariq,我明白了,文件下没有文件的物理位置,甚至没有目录。 bin/hadoop dfs -ls /use/hadoop/ myfolder 我可以查看文件,从我得到的信息为 要检查文件,您可以将其从 HDFS 复制到本地文件系统,所以我可以将它们从 winscp 移动 我需要再次提及 tariq,非常感谢您贡献时间和知识。多谢 。你确实支持了很多,这给了像我这样的新人很大的信心。 我明白了。如果您想查看文件的内容或在 webui 上打开文件,您实际上可以使用 hdfs cat 命令。这将使您免于将文件下载到本地 fs。不客气。如果您对问题的答案 100% 满意,您可以对它们进行标记,以便其他人可以从中受益。不仅限于此,而是总体而言。 只是添加到我的 lat 评论中,如果它是二进制文件,cat 不会显示实际内容。要查看二进制文件的内容,您可以使用:bin/hadoop fs -text /path/to/file 这似乎是一个错误(已修复)。查看答案。【参考方案2】:

在 Hadoop 2.0 中,

hdfs dfs -copyToLocal <hdfs_input_file_path> <output_path>

在哪里,

hdfs_input_file_path可能从http://&lt;&lt;name_node_ip&gt;&gt;:50070/explorer.html获得

output_path是文件的本地路径,文件要复制到的位置。

您也可以使用get 代替copyToLocal

【讨论】:

【参考方案3】:

为了将文件从 HDFS 复制到本地文件系统,可以运行以下命令:

hadoop dfs -copyToLocal &lt;input&gt; &lt;output&gt;

&lt;input&gt;:要复制的HDFS目录路径(如/mydata) &lt;output&gt;:目标目录路径(如~/Documents)

更新:Hadoop 3 中已弃用 Hadoop

使用hdfs dfs -copyToLocal &lt;input&gt; &lt;output&gt;

【讨论】:

这似乎对我不起作用。它总是说 文件未找到。我正在使用具有 cent os 6.4 的 cloudera 的 VM 实例 @SutharMonil 您确定该文件确实存在吗?你可以通过hadoop fs -ls浏览那里吗?【参考方案4】:

您可以通过这两种方式完成。

1.hadoop fs -get <HDFS file path> <Local system directory path>
2.hadoop fs -copyToLocal <HDFS file path> <Local system directory path>

例如:

我的文件位于 /sourcedata/mydata.txt 我想将文件复制到此路径中的本地文件系统 /user/ravi/mydata

hadoop fs -get /sourcedata/mydata.txt /user/ravi/mydata/

【讨论】:

【参考方案5】:

如果您的源“文件”被拆分为位于同一目录树中的多个文件(可能是 map-reduce 的结果),您可以将其复制到本地文件:

hadoop fs -getmerge /hdfs/source/dir_root/ local/destination

【讨论】:

这应该被接受。这是大多数人正在寻找的,而不是拆分文件。 老实说,这将是最好的答案。通常所有 HDFS 文件/表在这些目录中都像 0000_0、0001_0 一样分开。 -getmerge 将合并所有这些并放入本地目录中的 1 个文件中。感谢@Eponymous【参考方案6】:

这在我的 Ubuntu 虚拟机实例上对我有用。

hdfs dfs -copyToLocal [hadoop 目录] [本地目录]

【讨论】:

【参考方案7】:

1.- 记住您为文件指定的名称,而不是使用 hdfs dfs -put。请改用“获取”。见下文。

$hdfs dfs -get /output-fileFolderName-In-hdfs

【讨论】:

【参考方案8】:

如果您使用的是 docker,则必须执行以下步骤:

    将文件从 hdfs 复制到 namenode (hadoop fs -get output/part-r-00000 /out_text)。 “/out_text”将存储在namenode上。

    通过(docker cp namenode:/out_text output.txt)将文件从namenode复制到本地磁盘

    output.txt 将在您当前的工作目录中

【讨论】:

【参考方案9】:
bin/hadoop fs -put /localfs/destination/path /hdfs/source/path 

【讨论】:

hdfs dfs -put 是将文件从本地 FS 推送到 HDFS 的命令。 hdfs dfs -get 是正确的选择

以上是关于如何将文件从 HDFS 复制到本地文件系统的主要内容,如果未能解决你的问题,请参考以下文章

将数据从hdfs加载到本地系统的有效方法?

使用文件系统将数据从scala中的本地复制到远程hdfs位置时,hadoop权限被拒绝

用于将目录从 hdfs 复制到本地的 Shell 脚本

Pyspark - 将文件从本地(边缘节点)复制到 HDFS 位置时出错

将文件从HDFS复制到本地

如何将文件从 S3 复制到 Amazon EMR HDFS?