大量小文件hadoop

5rgfhyps  于 2021-06-03  发布在  Hadoop
关注(0)|答案(2)|浏览(493)

一些机器的参数被测量并通过web服务上传到hdfs。每个测量值的参数值都保存在一个文件中,其中一个测量值平均有1000个值。
问题是-有大量的文件。只有一定数量的文件用于mapreduce作业(例如,上个月的测量)。正因为如此,我无法将它们全部合并到一个大的序列文件中,因为在不同的时间需要不同的文件。
我知道有大量的小文件是不好的,因为namenode包含指向hdfs上所有文件的路径(并将其保存在内存中),另一方面,每个小文件都会导致创建Map器。
我怎样才能避免这个问题?

o3imoua4

o3imoua41#

您可以将所需的文件连接到一个临时文件中,该临时文件在分析后将被删除。我认为你可以很容易地在一个脚本中创建这个。
不管怎样,做个数字:这样一个大的文件也会被分割成几个块,它们的大小就是blocksize( dfs.blocksize 参数a hdfs-defaul.xml ),并且这些片段中的每一个都将被分配给一个Map器。我的意思是,取决于块大小和平均的“小文件”大小,也许增益不是那么大。

9cbw7uwe

9cbw7uwe2#

迟来的答案:你可以用海藻https://github.com/chrislusf/seaweedfs (我正在研究这个)。它对大量的小文件有特殊的优化。
hdfs实际上有很好的支持将文件存储委托给其他文件系统。只需添加一个seaweedfs hadoop jar。看到了吗https://github.com/chrislusf/seaweedfs/wiki/hadoop-compatible-file-system

相关问题