【问题标题】:Does Amazon Elastic Map Reduce runs one or several mapper processes per instance?Amazon Elastic Map Reduce 是否为每个实例运行一个或多个映射器进程?
【发布时间】:2012-02-03 03:50:42
【问题描述】:

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

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

【问题讨论】:

    标签: hadoop amazon-web-services mapreduce elastic-map-reduce hadoop-streaming


    【解决方案1】:

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

    【讨论】:

    • 谢谢,大卫,这正是我一直在寻找的概念和术语。
    【解决方案2】:

    请参阅 EMR 文档 [1],了解每种实例类型的 map/reduce 任务数。

    除了 David 的回答之外,您还可以通过设置让 Hadoop 每个映射槽运行多个线程...

    conf.setMapRunnerClass(MultithreadedMapRunner.class);  
    

    默认为 10 个线程,但可通过

    进行调整
    -D mapred.map.multithreadedrunner.threads=5
    

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

    [1]http://docs.amazonwebservices.com/ElasticMapReduce/latest/DeveloperGuide/HadoopMemoryDefault_AMI2.html

    【讨论】:

      【解决方案3】:

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

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

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

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

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

      【讨论】:

      • 问题不是将作业分配到不同的节点,而是在一个节点上运行多个作业。
      猜你喜欢
      • 2022-01-21
      • 1970-01-01
      • 2015-05-12
      • 1970-01-01
      • 2017-02-11
      • 2015-05-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多