【问题标题】:How gzip file gets stored in HDFSgzip 文件如何存储在 HDFS 中
【发布时间】:2016-04-29 11:16:03
【问题描述】:

HDFS 存储支持压缩格式来存储压缩文件。我知道 gzip 压缩不支持夹板。现在想象一下,该文件是一个 gzip 压缩文件,其压缩大小为 1 GB。现在我的问题是:

  1. 此文件将如何存储在 HDFS 中(块大小为 64MB)

从这个link了解到,gzip格式使用DEFLATE存储压缩后的数据,而DEFLATE将数据存储为一系列压缩块。

但我无法完全理解它并寻求广泛的解释。

更多来自gzip压缩文件的疑惑:

  1. 这个 1GB gzip 压缩文件有多少块。
  2. 它会在多个数据节点上运行吗?
  3. 复制因子如何应用于此文件(Hadoop 集群复制因子为 3。)
  4. 什么是DEFLATE算法?
  5. 读取 gzip 压缩文件时应用了哪种算法?

我在这里寻找广泛而详细的解释。

【问题讨论】:

  • 文件系统中的文件在磁盘上不必是连续的,无论磁盘是一个物理磁盘,还是分布式文件系统中的多个磁盘。文件系统将文件分成块,并存储在它决定存储它的任何地方。当应用程序请求文件时,文件系统知道到块的映射以及块的位置。它发送一个 I/O 请求来检索它们,然后文件系统将这些块分割回文件中。这种对大事物的划分是重点。分布式系统可以集中资源来完成单个系统无法单独完成的事情。

标签: algorithm hadoop compression hdfs gzip


【解决方案1】:

如果 zip 文件格式不支持拆分,该文件将如何存储在 HDFS(块大小为 64MB)中?

所有 DFS 块将存储在单个 Datanode 中。如果您的块大小为 64 MB 且文件为 1 GB,则具有 16 个 DFS 块(1 GB / 64 MB = 15.625)的Datanode 将存储 1 GB 文件。

这个 1GB 的 gzip 压缩文件会有多少块。

1 GB / 64 MB = 15.625 ~ 16 个 DFS 块

复制因子如何应用于此文件(Hadoop 集群复制因子为 3。)

与任何其他文件相同。如果文件是可拆分的,则无需更改。如果文件不可拆分,则将识别具有所需块数的数据节点。在这种情况下,3 个数据节点具有 16 个可用的 DFS 块。

来自此链接的源代码:http://grepcode.com/file_/repo1.maven.org/maven2/com.ning/metrics.action/0.2.7/org/apache/hadoop/hdfs/server/namenode/ReplicationTargetChooser.java/?v=source

http://grepcode.com/file_/repo1.maven.org/maven2/org.apache.hadoop/hadoop-hdfs/0.22.0/org/apache/hadoop/hdfs/server/namenode/BlockPlacementPolicyDefault.java/?v=source

/** The class is responsible for choosing the desired number of targets
 * for placing block replicas.
 * The replica placement strategy is that if the writer is on a datanode,
 * the 1st replica is placed on the local machine, 
 * otherwise a random datanode. The 2nd replica is placed on a datanode
 * that is on a different rack. The 3rd replica is placed on a datanode
 * which is on the same rack as the first replca.
 */

什么是 DEFLATE 算法?

DELATE 是解压缩 GZIP 格式的压缩文件的算法。

查看这张幻灯片,了解适用于不同 zip 文件变体的其他算法。

查看presentation 了解更多详情。

【讨论】:

  • 感谢您的详细回答。如果 gzip 压缩文件在 HDFS 上的存储过程中被拆分,那么为什么它说 gzip 不支持拆分以及为什么它是通过单个映射器处理的。你也能澄清一下吗
  • Gzip 不可拆分,因此一个映射器将处理 16 个 1 GB 文件块。
  • 因此,我们可以理解 gzip 文件在将数据存储到 HDFS 中时可以通过一系列连续的块进行拆分。但是由于 mapReduce 的某些限制,它不支持并行处理,因此我们可以说 gzip 在 MapReduce 处理期间不可拆分。对吧?
  • 是的。确切地。单个 Mapper 必须处理 gzip 文件的所有块。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-25
  • 1970-01-01
  • 2014-11-12
  • 2017-03-28
  • 2018-03-31
  • 2011-06-30
相关资源
最近更新 更多