`
langyu
  • 浏览: 888285 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

MapReduce:job在Job Tracker上的初始化

阅读更多

        这篇来说道说道job在到达Job Tracker后会有哪些动作,涉及上篇job生命周期的第五步和第六步。因为job在初始化后紧接着需要应付Job Tracker对Task Tracker的task分发响应,所以我们从Job Tracker的分发过程倒着来看job初始化。

        Task Tracker在运行时会周期性地向Job Tracker发送心跳请求,汇报Task Tracker的状态数据、本Task Tracker上task执行状态及希望从Job Tracker得到可以执行的task来做。在这里再得明确下task的概念。Task是job的基本单元,由Job Tracker分发到Task Tracker来执行。task分为两类: map task与reduce task。map task处理输入数据,它就应该是输入数据、job相关信息等组成的对象;reduce task汇总map task的输出结果,最后生成job的输出,它也应是由job相关信息组成。task是在Task Tracker上执行,所以task需要的信息须与Job Tracker的状态信息有关,以便task执行时需要。

        在前一节Job提交过程中说到,job将所有输入数据组装成了逻辑分片,这些逻辑分片只是HDFS上物理数据block的索引及存储信息。map task依赖于这些信息来决定将task分发到哪些Task Tracker上。Job Tracker可以取到job相关的metadata信息,然后由这些信息来决定如何分发task。因此,上一节的这些分片的相关信息就存放在特定的目录下,Job Tracker通过jobId可以访问到。

        Reduce task不管在哪个Task Tracker上执行,都得从其它那些执行map task的Task Tracker上拉取数据,所以对它的分发Job Tracker不需要准备什么,只要在合适的时候放到某台Task Tracker上执行即可。Job Tracker主要还是关注map task的准备工作(Reduce task并不是从所有map task拉取临时数据。如果有多个reduce task的话,每个reduce task只拉取一部分map task的临时数据。关于partition等相关的细节以后会说到)。

        这里介绍Job Tracker分发task过程中比较重要的一步:data locality级别。map task的执行效率依赖于读取输入数据的效率。输入数据越靠近执行task的Task Tracker,map task就执行的越快。根据数据所处的位置与Task Tracker的距离,有如下几种data locality级别:

引用

0     node-local    输入分片就在Task Tracker本地
1     rack-local    输入分片在Task Tracker所在的rack内其它Task Tracker上
2     off-switch    输入分片在其它的rack内


        Job Tracker在task分发时应充分考虑data locality级别。分发策略对job执行效率的影响很大程度是如何优化map task的locality。





        Job Tracker可以从job的metadata中得到并维护这样一种映射关系:job split ----> HDFS block && slave node。这种映射关系就是生成map task的基础。有多少个split,就会有map task。如上所述,响应心跳而选择map task的处理就像这样:
1.   根据Task Tracker的机器,查看Job Tracker中是否存在一个map task,它关联的block(假设一个block划分为一个split)存储在Task Tracker的本地磁盘上,那么就优先执行这个map task。
2.   如果没有1可选的map task,那么查看是否有map关联的block在Task Tracker所在的rack内。
3.   如果上面两步都没有选到某个map task,那么就根据情况看是否执行跨rack的task或其它推测式执行task。

        初始化的基本工作就很少一些,主要的选择逻辑还是task scheduler应该做的事情。既然提到Scheduler,还得说MapReduce默认的JobQueue scheduler在理论上有个严重的问题。如果它没有从1或2中选取到map task,那么它就会执行某个跨rack的map task。理想情况下应该尽量避免这样做,当前的Task Tracker本地或rack内不存在task所需的split,但其它rack内的Task Tracker上肯定会存在那个split的,那个有split存在的Task Tracker之后也会从Job Tracker取task,把这种map task放到有数据的Task Tracker上做肯定比跨rack取数据快。所以如果可能的话,尽量按照实际情况选取合适的scheduler(以上之所以是理论,也是因为大部分的执行环境都没有与rack有关物理拓扑结构)。

        Scheduler还得注意的一点是,当用户开启task推测式执行,那推测式执行就会发生在Job Tracker意识到某个task执行效率低的时候,尽量要让推测式task是node local级别的。如果推测式task要跨rack取数据,比原来的task执行还慢,就没有现实意义了。

        Job初始化过程主要是在Job Tracker建立一个slave node对task的映射模型,其它都是附属工作。我会把job生命周期的重点放在task执行的过程,也就是那个“奇迹发生的地方”。To be continued...

  • 大小: 50.3 KB
3
6
分享到:
评论
3 楼 langyu 2011-03-10  
lance_123 写道
请问楼主,文中图是用什么工具画的呢。

Visio 2007
2 楼 lance_123 2011-03-10  
请问楼主,文中图是用什么工具画的呢。
1 楼 langyu 2011-03-05  
我本初学,想把学习过程写下来让自己印象更深刻些,不知道这篇blog让阅读的诸位有哪些不爽,是觉着我不应该把学习的东西写下来,还是里面夹杂着太多的单词,或是其它?在您点“踩”的时候也请留下您的建议,这将对我的学习带来比分享这篇blog更大的收获。如果没有任何理由只是觉着不爽或者也懒的跟我说,那么请您三思。

相关推荐

    Hadoop源代码分析(类Task)

    - `jobContext` 和 `taskContext`:保存Job和Task的上下文信息。 - `committer`:定制与Task生命周期相关的特殊处理,如提交任务。 - `outputFormat`:定义任务的输出格式。 - `spilledRecordsCounter`, `task...

    Hadoop的安装.docx

    4. 初始化Hadoop环境:输入命令【hadoop4win-init】,此命令将会进行JDK与Hadoop解压缩动作,最后将执行Hadoop Namenode的格式化。 5. 启动Hadoop服务:按下任意键,会依次启动Hadoop Name Node,Data Node,Job ...

    hadoop完全分布式搭建.pdf

    1. 初始化NameNode:运行`hadoop namenode -format`。 2. 启动DataNodes、NameNode、Secondary NameNode。 3. 启动ResourceManager、NodeManager、JobHistory Server。 4. 配置 slaves 文件,列出所有的DataNode节点...

    Hadoop的安装.pdf

    - 初始化HDFS:在Namenode上执行`hadoop namenode -format`来格式化HDFS。 - 启动Hadoop服务:通过`start-dfs.sh`和`start-mapred.sh`启动Hadoop的HDFS和MapReduce服务。 至此,Hadoop的分布式环境已经准备就绪,...

    单节点Hadoop配置.doc

    - 在启动Hadoop集群之前,需要对名称节点进行一次性的格式化操作,这将初始化HDFS的元数据。 5. **启动和停止集群** - **启动**:通过执行相应的脚本启动namenode、datanode、jobtracker和tasktracker。 - **...

    hadoop单机模式

    - `<name>mapred.job.tracker</name>`:这是JobTracker的地址,设置为`localhost:9001`,意味着JobTracker也在本地主机的9001端口运行。 完成以上配置后,你需要对HDFS进行初始化,即“格式化”NameNode。在命令行...

    Hadoop_windows运行解决办法

    启动Hadoop服务之前,需要初始化HDFS和YARN。打开命令提示符,使用以下命令: ``` hadoop namenode -format start-dfs.cmd start-yarn.cmd ``` 至此,Hadoop已经启动,可以在Windows上运行了。为了在Eclipse中开发...

    hadoop集群配置

    - **初始化和启动**:在Master节点上格式化NameNode,然后在所有节点上启动Hadoop服务。 4. **注意事项** - **IP与主机名**:确保所有机器间的网络连接正常,主机名解析正确,可以通过`/etc/hosts`文件进行配置。...

    hadoop分布计算配置.pptx

    安装Hadoop到所有奴隶节点后,需要进行初始化和启动操作。使用`hadoop namenode -format`对HDFS进行格式化,这是首次启动前必须执行的步骤。然后通过`./start-all.sh`脚本启动所有Hadoop服务。 验证Hadoop是否正常...

    hadoop和ssh的配置安装

    使用以下命令初始化HDFS: ```bash bin/hadoop namenode -format ``` 6. **启动Hadoop服务**: 启动所有Hadoop服务: ```bash bin/start-all.sh ``` 7. **验证Hadoop是否启动成功**: 通过浏览器...

    hadoop入门教程.pdf

    - **mapred-site.xml**: 设置`mapred.job.tracker`为你虚拟机的IP(192.168.116.128:9001),这是JobTracker的地址。 **5. 配置环境变量** 将Hadoop和Java的路径添加到系统环境变量中,通常在`/etc/profile`文件中...

    CentOS下单机配置hadoop

    最后,在 `mapred-site.xml` 文件中,配置 JobTracker 地址,如 `<name>mapred.job.tracker</name> <value>localhost:9001</value>`。 完成配置后,需要对 NameNode 进行格式化,以初始化 HDFS 文件系统。在 `/usr/...

    hadoop单机安装

    而在`mapred-site.xml`中,指定JobTracker的地址(`mapred.job.tracker`)。 完成配置后,执行**格式化NameNode**,这是首次启动Hadoop集群的必要步骤,用以初始化HDFS文件系统: ```bash cd /opt/hadoop source ...

    hadoop1.2.1配置过程

    此命令会格式化HDFS,为集群初始化做准备。 **2. 启动 HDFS 和 MapReduce 服务** bin/start-dfs.sh bin/start-mapred.sh 执行以上命令分别启动HDFS和MapReduce服务。 **3. 查看进程** jps 使用 `jps` 命令...

    VMware虚拟机下hadoop1.x的安装方法

    初始化Hadoop** - 使用 `hadoop namenode -format` 对名称节点进行格式化。 - 切换到 `hadoop/bin` 目录,运行 `start-all.sh` 启动所有Hadoop服务。 - 使用 `jps` 查看服务状态,正常情况下应显示 `JobTracker`, `...

Global site tag (gtag.js) - Google Analytics