2017-03-11 39 views
0

当前我正在使用Sequence File来压缩我们现有的HDFS数据。HDFS(序列文件)中的单个大文件或多个小文件?

现在我有两个选择来存储这些Sequence File作为

  • 单个大容量文件,这意味着所有的记录到这个文件。
  • 多的小文件,每个文件的大小完全一致的HDFS块大小(128MB)

我们知道,存储块的HDFS文件,每个文件块进入一个映射。所以我认为当对这个序列文件进行MR处理时没有什么不同。

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

我comfusing关于这两个选项,因为我看到太多的文章建议

  • 让你的HDFS文件的大小的块大小尽可能可以匹配。
  • 尽可能将小文件合并为一个大文件。

任何人都可以指出正确的方法吗?哪个更好?这两种选择有什么优势/劣势?谢谢!

回答

1

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

Hadoop选择64MB的原因是因为Google选择了64MB。 Google选择64MB的原因是由于Goldilocks的说法。

  1. 具有更小的块大小会导致搜索开销增加到 增加。
  2. 块大小适中使地图任务 运行得足够快,以至于调度它们的成本与运行它们的成本差不多。
  3. 具有明显更大的块 大小开始减少可用的可用读取并行度,并且最终可能使得难以调度本地任务的任务。

因此,我认为点2 & 3已经回答了你,现在你必须根据你的需求来存储文件作为一个单一的大文件或128MB的小块(雅决定您是否可以增加块大小如果你愿意的话)。

+0

感谢您的回答。这取决于具体的要求。两者都是推荐的。 – Michael

相关问题