我试图从各种书籍/博客中了解 map reduce anatomy。但我没有一个清晰的想法。
当我使用以下命令向集群提交作业时会发生什么:
..已将文件加载到 hdfs
bin/hadoop jar /usr/joe/wordcount.jar org.myorg.WordCount /usr/joe/wordcount/input /usr/joe/wordcount/output
任何人都可以解释从客户端和集群内部发生的操作顺序吗?
Read Chapter 6 ("How MapReduce Works") of "Hadoop: The Definitive Guide". It explains it in good language. For quick read, see this and this.
过程是这样的:
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 阶段开始为您提供最终输出。
下面是整个过程的图示:
另外,我建议您通过此链接。
高温高压