hdfs:exact meaning dfs.block.size的

iyr7buue  于 2021-05-31  发布在  Hadoop
关注(0)|答案(1)|浏览(331)

在我们的集群中,dfs.block.size被配置为128m,但是我看到了很多68.8m大小的文件,这是一个奇怪的大小。我对这个配置选项究竟如何影响hdfs上的文件的外观感到困惑。
我想确定的第一件事是,理想情况下,文件的大小是否与已经配置的块大小相同?这里我的意思是理想的一对一Map中的文件和块
如果这些文件不是天生的小文件,而是由乔布斯生成的,那么产生这些小文件的可能原因是什么呢?
还有一点需要补充的是,我们正在使用hive动态分区函数,我不确定这是否是问题的根源之一。对于小文件的来源,我已经检查了这个博客,但它的小文件的问题
但情况和我的不太一样,这让我很困惑。希望有人能给我一些启示。非常感谢。

r1wp621o

r1wp621o1#

文件可以小于块,在这种情况下,它不会占用文件系统中的整个块大小。阅读以下答案:https://stackoverflow.com/a/14109147/2700344
如果您使用的是带有动态分区加载的配置单元,那么小文件通常是由每个分区编写多个分区的缩减器生成的。

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

例如,如果您运行上面的命令,并且在最后一步上总共有200个reducer和20个不同的事件日期分区,那么每个reducer将在每个分区中创建文件。它将产生200x20=4000个文件。
为什么会这样?因为数据是随机分布在不同的缩减器之间的,所以每个缩减器接收所有分区的数据并在每个分区中创建文件。
如果你加上 distribute by partition key ```
insert overwrite table mytable partition(event_date)
select col1, col2, event_date
from some_table
distribute by event_date;

然后上一个mapper步骤将根据distributedby对数据进行分组,reducer将接收整个分区文件并在每个分区文件夹中创建单个文件。
您可以向distribute by中添加其他内容以创建更多的文件(并运行更多的reducer以获得更好的并行性)。阅读以下相关答案:https://stackoverflow.com/a/59890609/2700344, https://stackoverflow.com/a/38475807/2700344,指定从配置单元插入生成的最小文件数

相关问题