从HDFS和MapReduce两方面了解Hadoop
打包作业,我们需要将我们的 MapReduce 程序打成 jar 包。
将 jar 包复制到 hadoop 机器上。 在 HDFS 上准备好要统计的文件,我准备的文件在 HDFS 上的/mr/input/目录下,内容为"hello hadoop hdfs.I am coming."。 执行 jar。
查看结果。 我们先看看输出目录,结果如下,最终输出的结果就存放在/mr/output/part-r-00000 文件中。 图 1. MapReduce 作业输出目录 然后我们再看看输出文件中的具体内容,如下所示: 图 2. MapReduce 作业输出结果 MapReduce 运行原理 我们可以将一个 MapReduce 作业的运行过程简单的拆分成 6 个过程,分别是作业的提交、作业初始化、任务分配、任务执行、进度和状态的更新、作业完成。下面我就一起来具体了解下这么几个步骤。 作业的提交 当我们调用 job.submit()或者 job.waitForCompletion()方法(其内部也会调用 submit()方法)的时候,会创建一个 JobSubmitter 对象,在 JobSubmitter 内部所实现的作业提交过程如下:
作业的初始化
任务的分配 application master 会为创建的任务向资源管理器请求容器,先是为 map 任务请求资源,后为 reduce 任务请求资源。为 map 任务分配资源的时候需要考虑到数据本地化的局限,会尽量保证运行的 map 任务所需要的数据块存储在当前机器或者当前机架中,这样会极大的节省带宽资源。而 reduce 任务则不存在这个限制。 任务的执行
进度和状态的更新 任务在运行的过程中,会对其精度保持追踪,对与 map 任务,其任务进度就是已经处理的输入所占总输入的比例。对与 reduce 任务来讲就比较复杂了,因为这个部分包含资源复制阶段、排序阶段和 reduce 阶段三个阶段,每个阶段都占整个完成比例的 1/3,也就是说当我们完成 reduce 的一半的时候进度应该为 5/6。对与状态的更新,客户端会每秒轮询一次 application master 以接收最新的任务状态。 作业的完成 当 application master 收到作业最后一个任务已经完成的通知后,便把作业的状态设置为"成功"。 为了方便大家理解,我这里将整个过程总结为一张图,贴在这里仅供大家参考。 (编辑:威海站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |