如果我将 hdfs blocksize 设置为 1 GB 怎么办?

How if I set hdfs blocksize to 1 GB?

我想问一下。如果我将 hdfs 块大小设置为 1 GB,我将上传大小接近 1 GB 的文件。处理 mapreduce 会变得更快吗?我认为随着块大小的增加,容器对资源管理器(映射任务)的请求将少于默认值。因此,它会减少初始化容器的延迟,也会减少网络延迟。

那么,大家怎么看呢?

谢谢

这会影响很多事情。最明显的是,如果块大小较大,文件将包含较少的块。这可能使客户端可以 read/write 更多数据而无需与 Namenode 交互,并且它还减少了 Namenode 的元数据大小,减少了 Namenode 负载(这对于超大文件系统来说可能是一个重要的考虑因素)。

块越少,文件可能存储在总共更少的节点上;这会降低并行访问的总吞吐量,并使 MapReduce 调度程序更难调度数据本地任务。

当使用这样的文件作为 MapReduce 的输入时(并且不将最大拆分大小限制为小于块大小),它将减少任务的数量,从而减少开销。但是拥有更少、更长的任务也意味着您可能无法获得最大的并行性(如果任务数量少于您的集群可以同时 运行 ),增加掉队的机会,并且如果任务失败,则需要重做更多的工作.增加每个任务处理的数据量也会导致额外的 read/write 操作(例如,如果 map 任务从只有一个溢出变为有多个溢出,因此最后需要合并)。

通常,这取决于输入数据。如果您想最大化非常大的输入文件的吞吐量,最好使用非常大的块(128MB 甚至 256MB)。对于较小的文件,使用较小的块大小更好。请注意,通过在写入文件时更改 dfs.block.size 参数,您可以在同一文件系统上拥有不同块大小的文件,例如使用命令行工具上传时:"hdfs dfs -put localpath dfspath -D dfs.block.size=xxxxxxx"

来源:http://channel9.msdn.com/Forums/TechOff/Impact-of-changing-block-size-in-Hadoop-HDFS

有用link阅读:

Change block size of dfs file

上面是right.You不能仅仅通过调整blocksize来判断Hadoop系统的优劣

但根据我在hadoop中使用不同块大小的测试,256M是一个不错的选择。