为什么hadoop不能拆分大文本文件,然后使用gzip压缩拆分?

onl*_*one 7 compression gzip hadoop hdfs

我最近一直在研究hadoop和HDFS.将文件加载到HDFS时,它通常会将文件拆分为64MB块,并在群集周围分发这些块.除非gzip文件无法执行此操作,因为无法拆分gzip文件.我完全理解为什么会这样(我不需要任何人解释为什么gzip文件不能拆分).但是为什么HDFS不能将纯文本文件作为输入并像普通文件一样拆分,然后分别使用gzip压缩每个拆分?访问任何拆分时,它只是在运行中解压缩.

在我的方案中,每个拆分都是完全独立压缩的.拆分之间没有依赖关系,因此您不需要整个原始文件来解压缩任何一个拆分.这是该补丁采用的方法:https://issues.apache.org/jira/browse/HADOOP-7076,请注意,这不是我想要的.

这似乎很基本......我错过了什么?为什么不能这样做?或者如果可以做到,为什么hadoop开发人员不会忽视这条路线?考虑到我发现有多少人想要在HDFS中分割gzip文件,这似乎很奇怪.

Nie*_*jes 9

简单的原因是"关注点分离"的设计原则.

如果你按照你的建议做,那么HDFS必须知道文件的实际位和字节是什么意思.还必须使HDFS能够对其进行推理(即提取,解压缩等).一般来说,您不希望在软件中出现这种混合责任.

因此,理解比特含义的"唯一"部分是必须能够读取它的应用程序:通常使用Hadoop的MapReduce部分编写.

正如HADOOP-7076的Javadoc所述(我写了那个东西;)):

永远记住有其他方法:

HTH