1

我的问题是:我应该自己关心映射器中的多处理(从标准输入读取任务然后将它们分配给工作进程,将结果组合到主进程并输出到标准输出)还是 Hadoop 会自动处理它?

我在 Hadoop Streaming 文档和 Amazon Elastic MapReduce 常见问题解答中都没有找到答案。

4

3 回答 3

1

Hadoop 有一个“槽”的概念。插槽是映射器进程将运行的地方。您可以配置每个 tasktracker 节点的插槽数。这是每个节点并行运行的映射过程的理论最大值。如果没有足够的输入数据(称为 FileSplits)的单独部分,它可能会更少。
Elastic MapReduce 确实根据实例能力有自己的估计要分配多少槽。
同时,我可以想象当一个数据流由多个内核处理时,您的处理将更加高效。如果您有内置多核使用的映射器 - 您可以减少插槽数量。但在典型的 Hadoop 任务中通常不是这种情况。

于 2012-02-03T12:37:45.017 回答
1

有关每种实例类型的 map/reduce 任务数,请参阅 EMR doco [1]。

除了大卫的答案,您还可以通过设置让 Hadoop 每个映射槽运行多个线程...

conf.setMapRunnerClass(MultithreadedMapRunner.class);  

默认值为 10 个线程,但可以使用

-D mapred.map.multithreadedrunner.threads=5

我经常发现这对于自定义高 IO 的东西很有用。

[1] http://docs.amazonwebservices.com/ElasticMapReduce/latest/DeveloperGuide/HadoopMemoryDe​​fault_AMI2.html

于 2012-03-14T23:58:36.277 回答
-1

我的问题是:我应该自己关心映射器中的多处理(从标准输入读取任务然后将它们分配给工作进程,将结果组合到主进程并输出到标准输出)还是 Hadoop 会自动处理它?

设置 Hadoop 集群后,提交作业所需的最低要求是

  • 输入格式和位置
  • 输出格式和位置
  • 用于处理数据的 Map 和 Reduce 函数
  • NameNode 和 JobTracker 的位置

Hadoop 将负责将作业分配到不同的节点,监控它们,从 i/p 读取数据并将数据写入 o/p。如果用户必须完成所有这些任务,那么使用 Hadoop 毫无意义。

建议阅读 Hadoop 文档和一些教程。

于 2012-02-03T08:48:00.807 回答