大量小文件Hadoop

时间:2015-04-23 14:02:42

标签: hadoop

测量某些机器的参数并通过Web服务上传到HDFS。参数值保存在每个测量的文件中,其中测量值平均为1000个值。

问题是 - 有大量文件。只有特定数量的文件用于MapReduce作业(例如,上个月的测量)。因此,我无法将它们全部合并到一个大的序列文件中,因为在不同的时间需要不同的文件。

据我所知,拥有大量小文件是不好的,因为NameNode包含HDFS上所有文件的路径(并将其保存在内存中),另一方面,每个小文件都会产生一个Mapper创建

我该如何避免这个问题?

2 个答案:

答案 0 :(得分:2)

一个较晚的答案:您可以使用SeaweedFS https://github.com/chrislusf/seaweedfs(我正在为此工作)。它对大量小文件进行了特殊的优化。

HDFS实际上具有良好的支持,可以将文件存储委派给其他文件系统。只需添加一个SeaweedFS hadoop jar。参见https://github.com/chrislusf/seaweedfs/wiki/Hadoop-Compatible-File-System

答案 1 :(得分:0)

您可以将所需文件连接到一个临时文件中,该文件在分析后删除。我认为你可以在脚本中轻松创建它。

无论如何,制作数字:这样一个大文件也会被分割成几个大小为块大小的{Private Sub form_main_Load(sender As Object, e As EventArgs) Handles MyBase.Load button_main_pimam.Enabled = False button_main_pimpm.Enabled = False button_main_eim.Enabled = False button_main_achmanager.Enabled = False button_main_mobiliti.Enabled = False button_main_checkfree.Enabled = False button_main_rcm.Enabled = False button_main_mis.Enabled = False button_main_colson.Enabled = False If My.User.IsInRole("domain.local\Fiserv Processing - Electronic Banking") Then button_main_achmanager.Enabled = True button_main_pimam.Enabled = True button_main_pimpm.Enabled = True button_main_eim.Enabled = True button_main_colson.Enabled = True button_main_colson.Enabled = True ElseIf My.User.IsInRole("domain.local\Fiserv Processing - Operations") Then button_main_achmanager.Enabled = True button_main_mobiliti.Enabled = True button_main_checkfree.Enabled = True button_main_rcm.Enabled = True button_main_colson.Enabled = True ElseIf My.User.IsInRole("domain.local\Fiserv Processing - Loan Operations") Then button_main_pimam.Enabled = True button_main_pimpm.Enabled = True button_main_eim.Enabled = True button_main_achmanager.Enabled = True button_main_mobiliti.Enabled = True button_main_checkfree.Enabled = True button_main_rcm.Enabled = True button_main_mis.Enabled = True ElseIf My.User.IsInRole("domain.local\Fiserv Processing - MIS") Then button_main_pimam.Enabled = True button_main_pimpm.Enabled = True button_main_eim.Enabled = True button_main_achmanager.Enabled = True button_main_mobiliti.Enabled = True button_main_checkfree.Enabled = True button_main_rcm.Enabled = True button_main_mis.Enabled = True button_main_colson.Enabled = True End If End Sub 参数a dfs.blocksize),并且这些文件中的每一个都将被分配到一个映射器。我的意思是,根据块大小和平均“小文件”大小,可能增益不是很大。