`

hadoop作业提交 初始化

 
阅读更多

下面我们来熟悉一下MapReduce作业的提交和初始化的过程: 
 

        作业的提交过程 
        第一步,使用Hadoop提供的shell命令提交作业,命令行作业提交命令:

Java代码  收藏代码
  1. $HADOOP_HOME/bin/hadoop jar job.jar \  
  2.     -D mapred.job.name="task-test" \  
  3.     -D mapred.reduce.tasks=3 \  
  4.     -files=blacklist.txt,whitelist.xml \  
  5.     -libjars=xxx.jar \  
  6.     -archives=yyy.zip \  
  7.     -input /test/input \  
  8.     -output /test/output  


        当用户按上述命令格式提交作业后,命令行脚本会调用JobClient.runJob()方法(1.0新版本的MapReduce API使用job.waitForCompletion(true)方法)提交作业,之后的函数调用过程如下图所示: 
 
        第二步,作业文件上传 
        JobClient将作业提交到JobTracker节点上之前,需要作业写初始化工作。初始化工作由JobClient.submitJobInternal(job)实现,这些初始化包括获取作业的jobId、创建HDFS目录、上传作业以及生成所有的InputSplit分片的相关信息等。 
        MapReduce的作业文件的上传和下载都是由DistributedCache透明完成的,它是Hadoop专门开发的数据分发工具。 

        第三步,生成InputSplit文件 
        作业提交后,JobClient会调用InputFormat的getSplits()方法生成相关的split分片信息,该信息包括InputSplit元数据信息和原始的InputSplit信息,其中元数据信息被JobTracker使用,第二部分在Map Task初始化时由Mapper使用来获取自己要处理的数据,这两部分数据被保存到job.split文件和job.splitmetainfo文件中。 

        第四步,将作业提交到JobTracker 
        JobClient通过RPC将作业提交到JobTracker端,在这一阶段会依次进行如下操作: 
        1)、为作业创建JobInProgress对象。JobTracker会为用户提交的每一个作业创建一个JobInProgress对象,这个对象维护了作业的运行时信息,主要用于跟踪正在运行的作业的状态和进度; 
        2)、检查用户是否具有指定队列的作业提交权限。Hadoop以队列为单位来管理作业和资源,每个队列分配有一定量的资源,管理严可以为每个队列指定哪些用户有权限提交作业; 
        3)、检查作业配置的内存使用量是否合理。用户在提交作业时,可已分别通过参数mapred.job.map.memory.mb和mapred.job.reduce.memory.mb指定Map Task和Reduce Task的内存使用量,而管理员可以给集群中的Map Task和Reduce Task分别设置中的内存使用量,一旦用户配置的内存使用量超过总的内存限制,作业就会提交失败; 
        4)、通知TaskScheduler初始化作业 
        JobTracker收到提交的作业后,会交给TaskScheduler调度器,然后按照一定的策略对作业做初始化操作。 

        作业的初始化 
        作业的初始化主要是指构造Map Task和Reduce Task并对它们进行初始化操作。 
        这一步的操作主要是由调度器调用JobTracker.initJob()方法来对新作业做初始化的。Hadoop将每个作业分节成4中类型的任务:Setup Task,Map Task,Reduce Task和Cleanup Task,它们的运行时信息由TaskInProgress维护,因此,从某个方面讲,创建这些任务就是创建TaskInProgress对象。 
        Setup Task 
        作业初始化标志性任务,它进行一些很简单的作业初始化工作。该类型任务又分为Map Setup Task和Reduce Setup Task两种,并且只能运行一次。 
        Map Task 
        Map阶段的数据处理任务。 
        Reduce Task 
        Reduce阶段的处理数据的任务。其数目可以由用户通过参数mapred.reduce.tasks指定。Hadoop刚开始的时候只会调度Map Task任务,直到Map Task完成数目达到由参数mapred.reduce.slowstart.completed.maps指定的百分比后,才开始调度Reduce Task。 
        Cleanup Task 
        作业结束的标志性任务,主要是做一些作业清理的工作,比如删除作业在运行中产生的一些零食目录和数据等信息。

 

总结:

Job作业提交 
        1、 编写MapReduce job程序,通过命令行向Hadoop提交并开始执行作业:

引用

        # hadoop  fs  -put  xxx.jar  /path      //或者使用hadoop  fs  -copyFromLocal  xxx.jar  /path 向copy文件 
        # chown -R hadoop xxx.jar 
        # chgrp -R hadoop xxx.jar 
        # hadoop jar xxx.jar package.ClassName input_path output_path
 
       


        客户端实际上是通过JobClient的submitJobInternal提交作业的。 
        2、本次运行,NameNode节点会首先检查用户权限和提交参数是否正确,通过后生成一个job,于是JobClient向JobTracker申请一个JobID用于标识这个job; 
        3、JobClient将Job所需要的资源提交到HDFS中一个以JobID命名的目录中,这些资源包括Jar包、配置文件、InputSplit元数据信息等; 
        4、JobClient通过调用submitJob()向JobTracker告知Job也准备好,提交这个Job; 

        Job初始化 
        5、JobTracker初始化Job,当JobTracker接收到客户端submitJob()方法,会将该作业提交到内部的作业调度队列,并做相关的初始化操作,如生成JobInProgress对象和Map或Reduce Task列表等; 
        6、JobTracker通过JobID从HDFS获取这个Job的Split等信息; 
        
        任务分配(Task Assignment) 
        7、TaskTrackers节点周期性的通过心跳Heartbeat向JobTracker节点汇报自己的相关信息,如“自己”还活着、可以接受新任务等,然后然后JobTracker或根据一定的作业调度算法给TaskTrackers节点分配一个Map Task和Reduce Task任务; 

        任务执行(Task Execution) 
        8、TaskTracker节点在获得JobTracker指派给的任务后,会到中获取当前任务相关的资源; 
        9、TaskTracker启动会给分配给自己的任务启动一个JVM; 
        10、最后在新启动的JVM中开始执行Mapper或Reducer Task任务。

分享到:
评论

相关推荐

    hadoop提交作业分析.doc

    【Hadoop 作业提交流程详解】 在Hadoop生态系统中,提交一个MapReduce作业通常通过执行类似`bin/hadoop jar xxx.jar mainclass args`的命令来完成。这个过程看似简单,实际上涉及到了多个步骤和组件的交互。下面...

    Hadoop任务调度器

    2. JobTracker接收作业并初始化。 3. JobTracker通过TaskScheduler进行任务调度。 4. TaskTracker周期性地通过heartbeat向JobTracker报告自身状态和任务状态。 5. JobTracker根据调度策略决定哪些任务分配给哪些...

    hadoop api 操作代码

    5. **Hadoop MapReduce的生命周期**:作业提交、初始化、分配任务、运行Map任务、Shuffle和Sort、运行Reduce任务、完成作业。每个阶段都有相应的Hadoop API参与,开发者可以通过这些API进行干预和优化。 6. **YARN...

    hadoop2.6.0版本-hadoop-2.6.0.tar.gz

    安装完成后,需要格式化NameNode,这是Hadoop集群初始化的重要步骤,通过`hdfs namenode -format`命令完成。接着,可以启动Hadoop的各个服务,如DataNodes、NameNodes、ResourceManager和NodeManagers,通常通过`...

    window环境下需要hadoop.dll

    在Java编程中,空指针异常(NullPointerException)通常表示尝试访问或操作一个null对象,这可能是在执行Hadoop作业(job)时,系统无法找到或加载hadoop.dll,进而无法初始化或调用某些功能。 解决这个问题的方法...

    最新Hadoop学习笔记

    5. 初始化Hadoop:执行`hadoop namenode -format`初始化NameNode。 ### 二、HDFS配置 HDFS是Hadoop的数据存储系统,其配置主要在`hadoop/conf`目录下的`hdfs-site.xml`文件。关键配置项包括: 1. `dfs....

    linux下编译过的hadoop jar包--hadoop-2.7.2.zip

    5. 初始化HDFS命名空间和格式化NameNode。 6. 启动Hadoop服务,包括DataNode、NameNode、ResourceManager和NodeManager。 五、Hadoop集群操作 1. 上传数据:使用Hadoop命令`hadoop fs -put`将本地文件系统中的数据...

    2.9.2_wintuils_hadoop.dll.zip

    7. **格式化NameNode**:首次安装后,需要对NameNode进行格式化,以初始化HDFS。 8. **启动Hadoop服务**:通过命令行启动Hadoop的各个服务,如DataNode、NameNode、ResourceManager等。 9. **运行MapReduce作业**...

    Linux环境下hadoop-0.20.2资源下载

    在启动Hadoop之前,需要格式化NameNode,这是初始化HDFS文件系统的过程。然后,可以启动DataNode和TaskTracker,接着启动NameNode和JobTracker,使Hadoop集群开始运行。使用命令行工具,如`hadoop fs -ls`或`hadoop ...

    hadoop3.0+工具

    - 初始化HDFS:使用`hdfs namenode -format`命令格式化NameNode。 - 启动Hadoop服务:运行`start-dfs.sh`和`start-yarn.sh`启动HDFS和YARN。 4. **Eclipse集成Hadoop开发**: - 安装Eclipse插件:例如,Hadoop...

    Hadoop权威指南 第二版(中文版)

     作业的初始化  任务的分配  任务的执行  进度和状态的更新  作业的完成  失败  任务失败  tasktracker失败  jobtracker失败  作业的调度  Fair Scheduler  Capacity Scheduler  shuffle和排序  map端...

    hadoop2.8.3-eclipse-plugin和hadoop.dll及winutils.exe

    而`winutils.exe`是Windows版的Hadoop实用工具,类似于Linux中的`hadoop`命令,用于执行如初始化HDFS、设置HADOOP_HOME环境变量等操作。在Windows 10 64位系统上,这两个文件对于正确配置和运行Hadoop集群至关重要。...

    hadoop-3.3.1.tar.gz

    - **格式化HDFS**:首次安装时需执行`hdfs namenode -format`来初始化NameNode。 - **启动Hadoop**:通过`start-dfs.sh`和`start-yarn.sh`命令启动HDFS和YARN服务。 4. **HDFS操作** - **上传数据**:使用`...

    hadoop-2.6.2.tar.gz

    - **MapReduce的作业生命周期**:从提交作业到完成作业的整个过程,包括作业的初始化、拆分成任务、任务调度和执行等。 - **YARN的资源调度**:了解ResourceManager如何根据应用需求分配资源,以及NodeManager如何...

    Hadoop权威指南(中文版)2015上传.rar

    作业的初始化 任务的分配 任务的执行 进度和状态的更新 作业的完成 失败 任务失败 tasktracker失败 jobtracker失败 作业的调度 Fair Scheduler Capacity Scheduler shuffle和排序 map端 reduce端 配置的调优 任务的...

    Hadoop安装配置与部署运行

    - 使用Eclipse内置的Hadoop插件提交作业到集群运行。 10. 示例 - 提供一个不含Reduce的简单Map任务示例,用于演示MapReduce的基本工作流程。 - 提供一个含Reduce的完整MapReduce任务,展示数据的完全处理过程。 ...

    大数据-hadoop-mapreduce代码

    JobTracker管理整个作业的生命周期,包括初始化、监控和完成,而TaskTracker在工作节点上运行具体的Map和Reduce任务。 为了运行这些MapReduce程序,开发者需要设置Hadoop环境,包括安装Hadoop,配置集群参数,以及...

Global site tag (gtag.js) - Google Analytics