HDFS:Exact dfs.block.size 的含义

HDFS:Exact meaning of dfs.block.size

在我们的集群中,dfs.block.size 配置为 128M,但我看到不少文件的大小为 68.8M,这是一个奇怪的大小。我对这个配置选项究竟如何影响文件在 HDFS 上的外观感到困惑。

但情况与我的不太相符,这让我的困惑仍然存在。 希望任何人都可以给我一些见解。非常感谢。

文件可以小于块,在这种情况下它不会占据文件系统中的整个块大小。阅读这个答案:

如果您使用具有动态分区加载的 Hive,小文件通常由 reducer 生成,每个 reducer 写入许多分区。

insert overwrite table mytable partition(event_date)
select col1, col2, event_date 
 from some_table;

例如,如果您 运行ning 上面的命令并且最后一步总共有 200 个 reducer 和 20 个不同的 event_date 分区,那么每个 reducer 将在每个分区中创建文件。它将产生 200x20=4000 个文件。

为什么会这样?因为数据在 reducer 之间随机分布,每个 reducer 接收所有分区数据并在每个分区中创建文件。

如果加上distribute by partition key

insert overwrite table mytable partition(event_date)
select col1, col2, event_date 
 from some_table
distribute by event_date;

然后前面的mapper步骤会根据distribution by对数据进行分组,reducers会接收整个分区文件,并在每个分区文件夹中创建单个文件。

您可以向分发方式添加其他内容以创建更多文件(以及 运行 更多 reducer 以获得更好的并行性)。阅读这些相关答案:, ,