压缩';hadoop hdfs-get';

压缩';hadoop hdfs-get';,hadoop,compression,hdfs,Hadoop,Compression,Hdfs,我正试图从Hadoop HDFS中检索一个总容量为几GB的文本文件目录。我可以用它来做这件事 hadoop hdfs -get /path/to/directory/* . 但是我到Hadoop集群的链接大约是1MB/s,所以这需要相当长的时间。像大多数文本文件一样,这些文件压缩得非常好,所以我希望下载时对它们进行压缩。hadoop hdfs-get命令是否会在传输过程中自动压缩(http和许多其他协议可以实现的方式) 如果不是,使用压缩获取文件的最直接的方法是什么?如果重要的话,集群正在运行

我正试图从Hadoop HDFS中检索一个总容量为几GB的文本文件目录。我可以用它来做这件事

hadoop hdfs -get /path/to/directory/* .
但是我到Hadoop集群的链接大约是1MB/s,所以这需要相当长的时间。像大多数文本文件一样,这些文件压缩得非常好,所以我希望下载时对它们进行压缩。hadoop hdfs-get命令是否会在传输过程中自动压缩(http和许多其他协议可以实现的方式)

如果不是,使用压缩获取文件的最直接的方法是什么?如果重要的话,集群正在运行CDH 4.5.0,我对集群没有任何管理员权限

我发现了,但这是关于压缩文件以保存在HDFS中,似乎应该有一种方法来压缩传输中的字节,而无需创建、获取并删除压缩副本。从我对Hadoop的典型用法的理解来看,获取和放置非常大的文本文件似乎应该是一个典型的用例,并且文本文件的压缩效果是公认的


我也会接受一个答案,表明这是一个有记录的缺失功能,它被有意地排除在Hadoop之外,或者预计将在将来的某个版本中添加。

由于带宽较低,压缩必须在本地计算机上获取文件之前进行。您需要在集群上配置LZO或任何其他压缩编解码器的情况下运行MapReduce作业。这样,您将有一个压缩输出,然后可以下载。因为该作业将在集群中运行,并且使数据局部性生效会更快


看看Hadoop HAR,它的功能与上面提到的完全相同。它运行一个MR并创建一个压缩的Hadoop归档。您可以使用-getToLocal命令下载相同的文件,并使用WINRAR打开它。有关更多信息,请查看

我相信假设大多数人已经在HDFS中使用了文件级压缩,因此应用传输级压缩不会给您带来任何好处

您还必须小心不要使用某些类型的压缩,因为这样您就无法轻松地拆分文件以进行输入以映射减少作业。您需要使用Snappy或LZO,因为它们是“可拆分”的输入文件,而Gzip不是

我敢肯定,如果您愿意为Hadoop提供一个补丁,他们会愿意接受在
-get
中支持压缩的更改(也可能是
-put
),假设它是可选的

-get
的实现可在中找到。您可以看到它用于在
FSDataOutputStream
上进行复制。此时需要在压缩中分层,但目前尚未完成


但是,在HDFS中提供透明压缩可能会更好,与提供透明压缩的方式类似。

我只是惊讶于
hadoop HDFS-get
hadoop HDFS-put
命令或一些等效命令中没有内置一定量的压缩。难道很多人不需要上传/下载GB或TB范围内的文件吗?MapR发行版内置了压缩功能,但我认为目前其他发行版或核心hadoop都没有这种功能。关于MapR的更多详细信息看起来其他人已经提出了透明压缩:但这张票证似乎没有得到太多的活动。对票证采取行动的最简单方法是提供补丁。我无法添加透明压缩。但是我应该能够为
-get
-put
添加可选的压缩,所以我添加了一个标签