hdfs(序列文件)中的单个大文件还是多个小文件?

5us2dqdw  于 2021-06-02  发布在  Hadoop
关注(0)|答案(1)|浏览(305)

目前我正在使用 Sequence File 压缩我们现有的hdfs数据。
现在我有两个选择来存储这个 Sequence File 作为
一个大文件,这意味着所有记录都会转到这个文件。
多个小文件,每个文件的大小与hdfs块大小(128mb)完全匹配
众所周知,hdfs文件以块的形式存储,每个块都被一个Map器Map。所以我认为mr处理序列文件时没有什么不同。
我知道选项二的唯一缺点是namenode需要更多的开销来维护这些文件,而选项一只有一个文件。
我对这两种选择感到困惑,因为我看到太多的文章推荐这两种选择
尽可能使hdfs文件的大小与块大小匹配。
尽可能将小文件合并到单个大文件中。
有人能告诉我做这件事的正确方法吗?哪个更好?这两种选择有什么优点/缺点?谢谢!

b4wnujal

b4wnujal1#

quora.com有一个问题(对于旧版本,128mb现在是默认块大小)为什么选择64mb作为默认块大小,虽然问题相对不同,但ted dunning的答案也回答了您的问题。泰德·邓宁写道:
hadoop选择64mb的原因是google选择了64mb。谷歌之所以选择64mb,是因为一个金发姑娘的论点。
具有更小的块大小将导致查找开销增加。
具有适度较小的块大小可以使map任务运行得足够快,使调度它们的成本与运行它们的成本相当。
块大小显著增大会降低可用的读取并行性,并可能最终导致难以在任务的本地调度任务。
因此,我认为第2点和第3点已经为您提供了答案,现在您必须根据您的要求来决定将文件存储为单个大文件或128mb的较小块(如果您愿意,也可以增加块大小)。

相关问题