【问题标题】:Mapreduce dataflow InternalsMapreduce 数据流内部
【发布时间】:2013-05-31 07:58:48
【问题描述】:

我试图从各种书籍/博客中了解 map reduce anatomy。但我没有一个清晰的想法。

当我使用此命令向集群提交作业时会发生什么:

..已将文件加载到 hdfs 中

bin/hadoop jar /usr/joe/wordcount.jar org.myorg.WordCount /usr/joe/wordcount/input /usr/joe/wordcount/output

谁能解释一下从客户端和集群内部发生的操作顺序?

【问题讨论】:

标签: hadoop mapreduce internals


【解决方案1】:

阅读“Hadoop: The Definitive Guide”的第 6 章(“MapReduce 的工作原理”)。它用很好的语言解释它。 如需快速阅读,请参阅thisthis

【讨论】:

  • Tejas - 您在帖子中提到的链接似乎需要邀请才能阅读它们。
【解决方案2】:

流程如下:

1- 客户端通过Job 配置和设置作业并将其提交给JobTracker。

2- 提交作业后,JobTracker 会为该作业分配作业 ID。

3- 然后验证作业的输出规范。例如,如果输出目录未指定或已存在,则作业不提交,并向 MapReduce 程序抛出错误。

4- 完成此操作后,将创建作业的 InputSplits(基于您使用的 InputFormat)。如果由于输入路径不存在而无法计算拆分,例如,则不会提交作业,并向 MapReduce 程序抛出错误。

5- 根据 InputSplits 的数量,创建 map 任务,每个 InputSplits 由一个 map 任务处理。

6- 然后将运行作业所需的资源复制到整个集群中,例如作业 JAR 文件、配置文件等。作业 JAR 以高复制因子(默认为 10)复制,以便集群中有很多副本供 tasktracker 在为作业运行任务时访问。

7- 然后根据要处理的数据块的位置,JobTracker 指示 TaskTracker 在存在该特定数据块的同一个 DataNode 上运行地图任务。如果该 DataNode 上没有空闲 CPU 插槽,则将数据移动到附近有空闲插槽的 DataNode,并且无需等待即可继续处理。

8- 一旦映射阶段从每个 InputSplit 开始单独的记录(键值对)开始由 Mapper 处理,完成整个 InputSplit。

9- 一旦映射阶段结束,输出将经历洗牌、排序和组合。在此之后,reduce 阶段开始为您提供最终输出。

下面是整个过程的图示:

另外,我建议你通过这个link

HTH

【讨论】:

  • 1 - 工作是什么?您能否分享一些关于配置过程的信息?
  • 这是一个存在于“org.apache.hadoop.mapreduce”中的类。它允许我们配置作业、提交作业、控制其执行以及查询状态。 set 方法仅在提交作业之前有效,之后它们将抛出 IllegalStateException。你能告诉我你到底想知道什么吗?这将有助于更好地解释它?
  • Tariq 我想要一张整个流程的照片。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-07
  • 1970-01-01
  • 1970-01-01
  • 2013-10-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多