HDFS块大小混乱

时间:2016-07-26 12:41:13

标签: hadoop

由于HDFS的默认块大小为64MB。如果我们说的话 例如200MB数据。根据HDFS的块大小,它将分为4块64Mb,64MB,64MB和8MB。  我的问题是,为什么数据不能分成相同的4块50MB,以便以64MB的块大小保存它们中的每一块。

2 个答案:

答案 0 :(得分:0)

dfs.block.size - 因为它配置为在hadoop配置中默认存储64 MB。您可以通过在hdfs-site.xml中更改/添加TB属性将其更改为50 MB,但HDFS是用于BIG数据处理的存储。由于

,默认块大小设置得更高(64MB / 128MB)
  • 考虑在Namenode中存储这些文件/块的元数据,在Namenode中增加元数据的更小文件。

    • 例如,存储1GB文件 - Namenode必须存储16个64 MB的块的元数据,而不是21个50 MB的块
  • 处理文件时的网络开销,而hadoop在更大的文件中表现更好:

    • 例如,(此计算中使用的传输速率为1 MB / s,开销为10%)
      • 3个64 MB的块,1个8 MB的块 - 218秒通过网络传输
      • 4个50 MB的块 - 220秒

    这个200 MB的例子在大数据世界中非常小,其中{{1}}数据被并行处理。

另请注意: 当最后一个块存储8MB时(在您的示例中)。此块将仅占用8MB存储空间,并且不会使用完整的64 MB作为块大小。

答案 1 :(得分:0)

Hadoop运行大量数据。它不喜欢小文件。拥有小块意味着更多的映射器被启动并浪费资源,NameNode也承受着巨大的压力,因为它必须保持对集群中每个块的地址的引用。它会增加通过网络访问数据的时间,并会带来显着的性能提升。

Apache团队引入64Mb作为最佳的最小建议块大小,这样它可以给你的namenode带来合理的压力,同时允许你在MapReduce作业中并行处理数据。

在某些Hadoop发行版中,如Cloudera,默认使用128Mb块。