如何在Hadoop中解压文件?

15

我尝试解压缩一个存储在Hadoop文件系统中的zip文件,并将其存储回Hadoop文件系统。我尝试了以下命令,但它们都没有起作用。

hadoop fs -cat /tmp/test.zip|gzip -d|hadoop fs -put - /tmp/
hadoop fs -cat /tmp/test.zip|gzip -d|hadoop fs -put - /tmp
hadoop fs -cat /tmp/test.zip|gzip -d|hadoop put - /tmp/
hadoop fs -cat /tmp/test.zip|gzip -d|hadoop put - /tmp

当我运行这些命令时,终端会出现像 gzip: stdin has more than one entry--rest ignoredcat: Unable to write to output stream.Error: Could not find or load main class put 这样的错误。有人能帮忙吗?

编辑1:我没有访问UI的权限,只允许使用命令行。我的hadoop机器上安装了解压缩/压缩工具。我正在使用 Hadoop 2.4.0 版本。


1
据我所知,唯一的原始方法是获取本地机器上的文件,解压缩并将其发送回群集。 - merours
我没有那个自由 :| - Abhishek
你考虑过这个解决方案吗? - merours
顺便提一下,你尝试过用“-text”替换“-cat”吗? - merours
@fxm 没有一个有效。-text 给出了 gzip: stdin has more than one entry--rest ignored 的错误 :| - Abhishek
gzip命令手册中写道:“只有在zip文件使用'deflation'方法压缩且只有一个成员时,才能使用gzip解压缩zip文件。”通常情况下,您不能使用gzip -d或gunzip来解压缩zip文件。这些命令仅适用于gzip/tar-gzip文件。这就是为什么会出现“gzip:stdin has more than one entry--rest ignored”错误的原因。 - Tagar
4个回答

8
为了解压缩gzipped(或bzipped)文件,我使用以下命令:
hdfs dfs -cat /data/<data.gz> | gzip -d | hdfs dfs -put - /data/ 

如果文件存在于您的本地驱动器上,则
zcat <infile> | hdfs dfs -put - /data/

2

我大多数时候都使用hdfs fuse挂载来实现这个功能

所以你可以直接这样做

$ cd /hdfs_mount/somewhere/
$ unzip file_in_hdfs.zip

http://www.cloudera.com/content/www/en-us/documentation/archive/cdh/4-x/4-7-1/CDH4-Installation-Guide/cdh4ig_topic_28.html

编辑于2016年1月30日:如果您使用hdfs ACLs:在某些情况下,fuse挂载不遵守hdfs ACLs,因此您将能够执行基本unix访问权限允许的文件操作。请参见https://issues.apache.org/jira/browse/HDFS-6255,最近我要求重新打开的底部评论。


我用它来处理数百GB大小的文件。就性能而言,必须与您可能拥有的其他选项进行测试。这只是更方便-只需运行gunzip即可。 - Tagar
只是好奇,这不是类似于复制到本地然后再复制回来吗? - Abhishek
你的意思是 hadoop fs -get; unzip; hadoop fs -put 吗?我不明白它怎么相似,因为你可能需要巨大的本地磁盘才能做到这一点。此外,这需要三个步骤,而我上面建议使用 hdfs fuse mount 的答案只需要一个简单的步骤。 - Tagar
是的,我指的是获取/放置的事情。谢谢你澄清了这一点。让我试一试,然后再回来告诉你 :) - Abhishek
这是否值得成为“如何在Hadoop中解压文件”的答案?看起来没有其他选项。 - Tagar

0
要通过管道将数据传输到Hadoop,您需要使用hdfs命令。
cat mydatafile | hdfs dfs -put - /MY/HADOOP/FILE/PATH/FILENAME.EXTENSION

-1
  1. gzip使用-c从stdin读取数据
  2. hadoop fs -put不支持从stdin读取数据

    我尝试了很多方法,但都没有帮助。我找不到hadoop的zip输入支持。所以我别无选择,只能将hadoop文件下载到本地文件系统,解压缩并再次上传到hdfs。


当我运行 hadoop fs -unzip <filepath> 命令时,它显示 -unzip: Unknown command 未找到。 - Abhishek
"hadoop fs -put 不支持从标准输入读取数据" 这是不正确的。请查看其他答案。 - der_grund

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接