我正在使用HDFS -接收器-连接器来使用Kafka的数据进入HDFS。
Kafka连接器每10分钟写一次数据,有时写入文件的大小非常小,从2MB到100 2MB不等。因此,编写的文件实际上浪费了我的HDFS存储空间,因为每个块大小都是256 my。
这个目录是按日期创建的;所以我想通过每天的批处理将许多小文件合并到一个大文件中是很棒的。(我预计HDFS将自动将一个大文件分割成块大小。)
我知道有很多答案说我们可以使用spark的coalesce(1)或repartition(1),但是如果我读取整个目录并使用这些函数,我担心OOM错误;如果我读取每个文件,可能会超过90 be ~100 be。
HDFS是否允许90~100 be?我不需要担心吗?有人能告诉我是否有合并小型HDFS文件的最佳实践吗?谢谢!
发布于 2022-03-22 10:59:21
因此,编写的文件实际上浪费了我的HDFS存储空间,因为每个块大小都是256 my。
HDFS不“填写”块中未使用的部分。因此,2MB文件只使用磁盘上的2MB (如果您使用3x复制,则为6MB )。HDFS上的小文件主要关注的是,数十亿个小文件可能导致问题。
如果我读取整个目录并使用这些函数,我担心OOM错误。
Spark可能是一个内存中的处理框架,但是如果数据不适合内存,它仍然可以工作。在这种情况下,处理会溢出到磁盘上,并且会稍微慢一些。
是否允许90~100 in的HDFS?
这是绝对好的--毕竟这是一个大数据。正如您注意到的,实际文件将在后台被分割成较小的块(但除非使用hadoop fsck,否则不会看到这一点)。
https://stackoverflow.com/questions/71570484
复制相似问题