有没有人发现在 Hadoop 中增加 block 大小时性能会下降?我们正在建立一个集群,我们预计每天需要存储大量数据(100 GB),所以我的想法是我们可以大量增加 block 大小。但是,有人担心它是否会减慢将要运行的 MapReduce 作业的速度。我能看到它发生的唯一方式是,如果 block 的数量少于可以在集群上运行的任务的数量。
有人有关于这个主题的任何其他信息吗?
最佳答案
这里有几点需要考虑:
- 不推荐太小的文件 - 文件系统元数据保存在名称节点内存中 - 文件数量的硬件限制。
- HDFS 上的默认 block 大小为 64MB,但在生产服务器中最常见的情况是 128MB。
- HDFS block 默认情况下很大,与查找时间相比, block 的传输时间更长 - 因此传输时间 由许多 block 组成的大文件在磁盘传输时运行。
- MapReduce 任务一次在一个 block 上运行,因此如果任务太少(少于集群中的节点),您的作业可能会很慢。
- 将 block 大小设置为接近 HDFS 上文件的近似大小并不是一个好主意,因为它会增加错误数据的可能性。假设您有 1 个 1GB 的文件,您的 block 大小也是 1GB。还假设您的云上的复制因子为 3(默认值或至少最常见)。这意味着您将在 3 台机器上将整个文件作为一个 block 。这与在 3 台机器上只复制一些文件 block 不同。
- 如果(输入处理文件的) block 数少于您可以在您的环境中并发运行的任务数——这很好——这意味着您正在以最大并行度处理所有输入数据,并且仍然有空闲资源。
关于Hadoop:增加 block 大小时性能下降?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8249430/