【问题标题】:Optimal block size in HDFS - Can large block sizes hurtHDFS 中的最佳块大小 - 大块大小会伤害
【发布时间】:2014-01-22 22:26:13
【问题描述】:

我了解 HDFS 中小文件和小块大小的缺点。我试图了解默认 64/128 MB 块大小背后的基本原理。大块大小(比如 2GB)是否有任何缺点。我读到比这更大的值会导致问题,我还没有深入研究这些问题的细节)。

我看到的块大小过大的问题(请纠正我,可能部分或全部这些问题并不真正存在)-

  1. 当数据节点出现故障时,复制 1 Gig 文件可能会出现问题 - 这需要集群传输整个文件。当我们考虑单个文件时,这似乎是一个问题 - 但如果我们有较小的块大小(例如 128 MB)(我认为这涉及更多开销),我们可能必须传输很多更小的文件(我认为这会带来更多开销)

  2. 可能会给映射器带来麻烦。大块可能最终与每个映射器一起,从而减少了映射器的可能数量。但是,如果我们使用较小的分割尺寸,这应该不是问题吗?

  3. 当我想到这可能是一个问题时,这听起来很愚蠢,但我想无论如何我都会把它扔掉 - 因为 namenode 事先不知道文件的大小,所以它是可能的考虑数据节点不可用,因为它没有足够的磁盘空间来存储新块(考虑到可能是 1-2 Gigs 的大块大小)。但也许它只是通过减少特定块的块大小来巧妙地解决这个问题(这可能是一个糟糕的解决方案)。

块大小可能取决于用例。我基本上想找到问题的答案 - 是否存在大块大小设置可能造成伤害的情况/用例?

感谢任何帮助。提前致谢。

【问题讨论】:

  • 我猜这可能是与客户端之间传输文件的问题。我想大块的失败可能会代价高昂。

标签: hadoop hdfs


【解决方案1】:

我在 hadoop 上对高端集群进行了广泛的性能验证,我们将块大小从 64 兆增加到 2GB。回答这个问题:想象一下经常需要处理小文件的工作负载,比如 10 个 Megs。在这种情况下,您认为哪个块大小会更高效 - 64MEg 还是 1024Meg?

对于大文件的情况,是的,大块大小倾向于更好的性能,因为映射器的开销不可忽略。

【讨论】:

  • 非常感谢您的回复。在您描述的情况下,将其保持在 64M 是有意义的。但这不能通过设置输入拆分大小来实现吗?当我想运行一个 mapreduce 作业将一些 avro 文件索引到 SolR 时,我开始研究这个问题。这些文件可能太大。所以,我最终决定使用文件特定的块大小。我想分享一些信息 - 在我的测试中,我将块大小从 64M 变为 115Gig。 (不是我想用那么大的块大小)115G之后,因为无法获得最小复制1而出错。这个数字应该是特定于集群的
  • 我想知道我们是否可以得到一个具有最大可能块大小的更高效的集群,然后使用输入拆分大小来控制映射器的数量。
  • 是的,对于小文件,将块大小保持在 64Meg 较小,然后为只处理较大文件的作业设置更高的最小拆分大小。你不能走另一条路-即大块大小,然后尝试使用小分割的映射器作业。
  • 我们最终为每个文件使用了自定义块大小。谢谢。
猜你喜欢
  • 1970-01-01
  • 2018-12-26
  • 2016-11-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-02
  • 2019-10-09
  • 2011-08-03
相关资源
最近更新 更多