Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
大量小文件Hadoop_Hadoop - Fatal编程技术网

大量小文件Hadoop

大量小文件Hadoop,hadoop,Hadoop,一些机器的参数通过web服务测量并上传到HDFS。参数值保存在每个测量的文件中,其中一个测量的平均值为1000 问题是-有大量的文件。MapReduce作业只使用一定数量的文件(例如,上个月的测量值)。由于这个原因,我无法将它们全部合并到一个大的序列文件中,因为在不同的时间需要不同的文件 我理解拥有大量小文件是不好的,因为NameNode包含HDFS上所有这些文件的路径(并将其保存在内存中),而另一方面,每个小文件将导致创建映射器 我怎样才能避免这个问题 您可以将所需的文件连接到一个临时文件中,

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

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

我理解拥有大量小文件是不好的,因为NameNode包含HDFS上所有这些文件的路径(并将其保存在内存中),而另一方面,每个小文件将导致创建映射器


我怎样才能避免这个问题

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


不管怎样,记下数字:这样一个大的文件也会被分成若干块,其大小将是blocksize(
dfs.blocksize
参数a
hdfs defaul.xml
),并且这些块中的每一块都将被分配给一个映射器。我的意思是,根据块大小和平均的“小文件”大小,可能增益不是很大。

一个最新的答案:你可以使用海藻(我正在研究这个)。它对大量的小文件进行了特殊的优化


HDFS实际上对将文件存储委托给其他文件系统有很好的支持。只需添加一个SeaweedFS hadoop jar。请参见

好的,增益应该很大,因为文件大小可能为8KB,默认块大小为64MB。因此,我认为您的连接脚本必须非常智能:您必须连接小文件,至少直到达到块大小。感谢您的建议,但我希望避免在每次需要执行作业时连接大量文件。但是,另一方面,我可能每次都需要不同的文件子集。。。(例如,如果作业在八小时后启动,它需要同时添加的文件,而不需要窗口大小为-8h的文件)。是否尝试使用
组合SequenceFileInputFormat
?它应该将小文件合并到一个分割中,并创建较少数量的映射器。文档:老实说,我对Hadoop不是很有经验,但我知道这种方法可能存在一些问题。例如,对HDFS上所有文件的引用仍将保存在NameNode内存中,对吗?使用CombineSequenceFileInputFormat时是否还有其他问题?是的,在HDFS中存储大量小文件是个坏主意。您可以每小时(或每天)将小文件合并为一个序列文件。如果将文件的时间戳用作键,将文件的内容用作值,则在mapper中,您将能够筛选未包含在指定时间范围内的文件。因此,您建议运行MapReduce作业,并仅从mapper发出指定范围内的文件?但我仍然会有很多映射任务的问题,我想这样的事情可以容忍吗?另一方面,我需要将原始文件保留在HDFS上,以便在下次需要时合并它们,这将一直影响NameNode。对此有何评论?如果没有更好的解决办法,我想我得做点类似的事情。您觉得使用HBase或类似的东西来按时间戳进行查询怎么样?同样的问题也会存在吗?您可以尝试HAR(hadoop archive)将小文件打包到单个归档中,这样可以减少NameNode维护太多小文件的开销,并使用CombineFileInputFormat over HAR来限制分派的映射器数量。