由于HDFS的默认块大小为64MB。如果我们说的话 例如200MB数据。根据HDFS的块大小,它将分为4块64Mb,64MB,64MB和8MB。 我的问题是,为什么数据不能分成相同的4块50MB,以便以64MB的块大小保存它们中的每一块。
答案 0 :(得分:0)
dfs.block.size
- 因为它配置为在hadoop配置中默认存储64 MB。您可以通过在hdfs-site.xml
中更改/添加TB
属性将其更改为50 MB,但HDFS是用于BIG数据处理的存储。由于
考虑在Namenode中存储这些文件/块的元数据,在Namenode中增加元数据的更小文件。
处理文件时的网络开销,而hadoop在更大的文件中表现更好:
这个200 MB的例子在大数据世界中非常小,其中{{1}}数据被并行处理。
另请注意: 当最后一个块存储8MB时(在您的示例中)。此块将仅占用8MB存储空间,并且不会使用完整的64 MB作为块大小。
答案 1 :(得分:0)
Hadoop运行大量数据。它不喜欢小文件。拥有小块意味着更多的映射器被启动并浪费资源,NameNode也承受着巨大的压力,因为它必须保持对集群中每个块的地址的引用。它会增加通过网络访问数据的时间,并会带来显着的性能提升。
Apache团队引入64Mb作为最佳的最小建议块大小,这样它可以给你的namenode带来合理的压力,同时允许你在MapReduce作业中并行处理数据。在某些Hadoop发行版中,如Cloudera,默认使用128Mb块。