【发布时间】:2013-10-18 10:57:27
【问题描述】:
我有一个由许多小文件(平均每个 30-40 MB)组成的数据集。我想通过 MapReduce 对它们进行分析,但是对于每个作业,映射器都会再次读取文件,这会对 I/O 性能(开销等)造成沉重的负担。
我想知道是否可以使用一次映射器,为不同的减速器发出各种不同的输出?当我环顾四周时,我发现多个减速器是不可能的,但唯一可能的事情是作业链接。但是,我想并行运行这些作业,而不是顺序运行,因为它们都将使用相同的数据集作为输入并运行不同的分析。所以,总而言之,我想要的东西如下:
Reducer = Analytics1 /Mapper - Reducer = Analytics2
\ Reducer = Analytics3 ...
这可能吗?或者您对解决方法有什么建议吗?请给我一些想法。重新读取这些小文件会给我的分析带来巨大的开销和性能下降。
提前致谢!
编辑:我忘了提到我正在使用 Hadoop v2.1.0-beta 和 YARN。
【问题讨论】:
-
你可以让你的 reducer(s) 在同一个 pass/job 中完成所有的 Analytics (1-3)。
-
但是每个 reducer 可能采用不同的输入(
对)。因此,仅在一个 reducer 中运行所有分析对我来说不起作用。 Mapper 应该为不同的 reducer(分析)发出不同的 对。此外,对于不同的对,我希望能够从减速器之前发生的 Shuffle&Sort 机制中受益。
标签: performance hadoop io mapreduce reduce