2、MapReduce的job提交启动过程

1、MR任务提交流程图

输入图片说明

2、流程分析

  • 1、首先在提交job之前,FileInputFormat调用getsplits();获得分片信息,并且序列化为一个job.split文件。接着再讲job的配置信息转变成一个xml文件。 =>所以总共有job.jar、job.split、job.xml三个文件

  • 2、第一步准备好后,向resourceManager请求提供机器运行程序。

  • 3、resourceManager向客户端返回一个job文件上传的路径XXX/staging和一个jobID。

  • 4、Client往这个路径上传已经准备好的那三个文件。接这个告诉resourceManager已经上传完成,并且告知需要的资源。

  • 5、resourceManager生成一个资源任务放入resourceManager的任务队列中,这个资源任务描述了:作业存放的路径、需要的运行资源等。

  • 6、由NodeManager轮询任务列表,获得这个任务,根据资源任务信息创建一个容器,并且将job作业信息下载下来,接着通知resourceManager已经下载完成。

  • 7、resourceManager通知Client,资源准备好了,处理这个任务的NameManager的iP和端口是多少。

  • 8、Client向这个NodeManager发送启动MRAppMaster的命令脚本,启动Mrappmaster。

  • 9、MrAppMaster启动后,读取job.xml,job.split文件,知道需要多少mapTask和reduceTask进程。而且每个Task的资源需求,接着向ResourceManager请求这些资源。

  • 10、ResourceManager同样创建一些资源任务,放入任务队列中。等待NodeManager轮询处理。

  • 11、NanoManager拿到这个MapTask任务后,创建一个容器并且下载job.jar、job.split、job.xml文件,后向resourceManager返回确认。resourceManager最后想MrappMaster返回准备完成的信息。

  • 12、MrAppMaster向NanoManager发送启动MapTask的命令脚本启动MapTask。

  • 13、重复MapTask过程的资源请求步骤,请求ReduceTask。

3、总结

job运行有两种方式:

  • 1、(开发debug模拟阶段)直接在idea中运行,(不需要打包) 利用hadoop 的client jar包,其中有一个localRunner.jar来模拟。但是这种方式必须在电脑上安装hadoop,并且必须在安装目录下bin文件夹中加入如下两个文件

    下载地址:https://download.csdn.net/download/luoyepiaoxin/8860033

    引入maven依赖

      -- 必须引入依赖
      <dependency>
          <groupId>org.apache.hadoop</groupId>
          <artifactId>hadoop-mapreduce-client-common</artifactId>
          <version>2.6.4</version>
      </dependency>
    
      -- 如果想直接读取的是HDFS上的文件,则需要引入依赖
      <dependency>
          <groupId>org.apache.hadoop</groupId>
          <artifactId>hadoop-hdfs</artifactId>
          <version>2.6.4</version>
      </dependency>
    
      -- 并且在代码中指定HDFS
      //指定HDFS的实现方式设置默认文件系统为HDFS,同时伪装自己的身份为root
      conf.set("fs.hdfs.impl",org.apache.hadoop.hdfs.DistributedFileSystem.class.getName());
      conf.set("fs.default.name", "hdfs://cmAgent2:8022");
      System.setProperty("HADOOP_USER_NAME", "root");
    
  • 2、(生产部署阶段)在idea中打包好,然后提交到集群中,最后使用hadoop jar XXXX。直接在集群中启动。

    注意:在打包的时候需要将上面的那几行代码注释

      总体依赖如下
      <dependencies>
          <!--这个是必须的,common里面提供了rpc等功能-->
          <dependency>
              <groupId>org.apache.hadoop</groupId>
              <artifactId>hadoop-common</artifactId>
              <version>2.6.4</version>
          </dependency>
    
          <!--这个也是必须的-->
          <dependency>
              <groupId>org.apache.hadoop</groupId>
              <artifactId>hadoop-mapreduce-client-core</artifactId>
              <version>2.6.4</version>
          </dependency>
    
          <!--这个是本地debug运行才需要的-->
          <dependency>
              <groupId>org.apache.hadoop</groupId>
              <artifactId>hadoop-mapreduce-client-common</artifactId>
              <version>2.6.4</version>
          </dependency>
    
          <!--这个是本地debug的时候,需要读取HDFS上的文件才需要,如果是读取本地文件则不需要-->
          <dependency>
              <groupId>org.apache.hadoop</groupId>
              <artifactId>hadoop-hdfs</artifactId>
              <version>2.6.4</version>
          </dependency>
      </dependencies>
    

转载于:https://my.oschina.net/liufukin/blog/795826

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值