【问题标题】:A single large file or multi small files in HDFS (Sequence File)?HDFS(序列文件)中的单个大文件或多个小文件?
【发布时间】:2017-03-11 13:15:22
【问题描述】:

目前我正在使用Sequence File 来压缩我们现有的 HDFS 数据。

现在我有两个选项可以将此 Sequence File 存储为

  • 单个大文件,这意味着所有记录都转到此文件。
  • 多个小文件,每个文件大小与HDFS块大小(128MB)完全匹配

我们知道,HDFS 文件存储为块,每个块都转到一个映射器。因此,我认为针对该序列文件进行 MR 处理时没有什么不同。

我知道选项二的唯一缺点是 namenode 需要更多开销来维护这些文件,而选项一只有一个文件。

我对这两个选项感到困惑,因为我看到太多推荐的文章

  • 使您的 HDFS 文件的大小尽可能与块大小匹配。
  • 尽可能将小文件合并为一个大文件。

谁能指出正确的方法来做到这一点?哪个更好?这两个选项有什么优点/缺点吗?谢谢!

【问题讨论】:

    标签: hadoop hdfs


    【解决方案1】:

    Quora.com 有一个关于(对于旧版本,因为 128MB 现在是默认块大小)为什么选择 64MB 作为默认块大小的问题,尽管问题相对不同,但 Ted Dunning 的回答也可以回答您的问题。泰德邓宁写道:

    Hadoop 选择 64MB 的原因是因为 Google 选择了 64MB。 Google 选择 64MB 的原因是因为 Goldilocks 的争论。

    1. 拥有更小的块大小会导致查找开销 增加。
    2. 具有适度较小的块大小可以执行映射任务 运行速度足够快,调度它们的成本变得相当 运行它们的成本。
    3. 具有明显更大的块 size 开始减少可用的读取并行度,并且 最终可能会难以安排任务本地的任务。

    所以我认为第 2 点和第 3 点已经为您提供了答案,现在您必须根据您的要求来决定将文件存储为单个大文件还是 128MB 的较小块(是的,如果您也可以增加块大小想要)。

    【讨论】:

    • 感谢您的回答。这取决于指定的要求。两者都推荐。
    猜你喜欢
    • 2020-02-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多