我的问题是:我自己应该关心我的mapper中的多处理(从stdin读取任务然后将它们分配到工作进程,将结果组合在一个主进程中并输出到stdout)或者Hadoop会自动处理它吗?
我既没有在Hadoop Streaming文档中找到答案,也没有在Amazon Elastic MapReduce FAQ中找到答案。
答案 0 :(得分:1)
Hadoop有一个“插槽”的概念。 Slot是映射器进程将运行的位置。您配置每个tasktracker节点的插槽数。它是每个节点运行parralel的映射过程的理论最大值。如果没有足够的单独输入数据(称为FileSplits),它可以更少。
弹性MapReduce确实有自己的估计,根据实例功能分配多少个插槽。
与此同时,我可以想象当一个数据流被许多内核访问时,您的处理将更加有效。如果您的映射器具有内置多核使用 - 您可以减少插槽数。但它通常是典型的Hadoop任务中的一个案例。
答案 1 :(得分:1)
请参阅EMR doco [1]了解每个实例类型的map / reduce任务数。
除了David的答案之外,您还可以让Hadoop通过设置每个地图插槽运行多个线程...
conf.setMapRunnerClass(MultithreadedMapRunner.class);
默认值为10个线程,但可以使用
进行调整-D mapred.map.multithreadedrunner.threads=5
我经常发现这对自定义高IO的东西很有用。
答案 2 :(得分:-1)
我的问题是:我自己应该关心我的mapper中的多处理(从stdin读取任务然后将它们分配到工作进程,将结果组合在一个主进程中并输出到stdout)或者Hadoop会自动处理它吗?
设置Hadoop群集后,提交作业所需的最低要求为
Hadoop将负责将作业分发到不同的节点,监视它们,从i / p读取数据并将数据写入o / p。如果用户必须完成所有这些任务,那么就没有必要使用Hadoop。
建议,阅读Hadoop文档和一些教程。