如何将文件从 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://<<name_node_ip>>:50070/explorer.html
获得
output_path
是文件的本地路径,文件要复制到的位置。
您也可以使用get
代替copyToLocal
。
【讨论】:
【参考方案3】:为了将文件从 HDFS 复制到本地文件系统,可以运行以下命令:
hadoop dfs -copyToLocal <input> <output>
<input>
:要复制的HDFS目录路径(如/mydata)
<output>
:目标目录路径(如~/Documents)
更新:Hadoop 3 中已弃用 Hadoop
使用hdfs dfs -copyToLocal <input> <output>
【讨论】:
这似乎对我不起作用。它总是说 文件未找到。我正在使用具有 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 复制到本地文件系统的主要内容,如果未能解决你的问题,请参考以下文章
使用文件系统将数据从scala中的本地复制到远程hdfs位置时,hadoop权限被拒绝