先生编程模型及V1先生讲解

  

先生编程模型

  

先生编程模型主要分为五个步骤:输入,映射,分组,规约,输出。

  
      <李>   

    输入(InputFormat):
    主要包含两个步骤,数据分片,迭代输入

      
     <代码>数据分片(getSplits):数据分为多少个分裂,就有多少个地图任务;
      单个分裂的大小,由设置的split.minsize和split.maxsize决定;
      公式为最大{minsize,最小{最大容量,blocksize}};
      hadoop2.7.3之前blocksize默认64,之后默认128米。
      
      决定了单个分裂大小之后,就是主机选择,一个分裂可能包含多个块(将minsize设置大于128米);
      而多个块可能分布在多个主机节点上(一个块默认3备份,如果4个块就可能在12个节点),getsplits会选择包含数据最多的一部分主机。
      由此可见,为了让数据本地话更合理,最好是一个块一个的任务,也就是说分裂大小跟块大小一致。
      
      getSplits会产生两个文件
      的工作。分裂:存储的主要是每个分片对应的HDFS文件路径,和其在HDFS文件中的起始位置,长度等信息(地图任务使用,获取分片的具体位置);
      job.splitmetainfo:存储的则是每个分片在分片数据文件的工作。中分裂的起始位置,分片大小和主机等信息(主要是作业初始化时使用,用于地图任务的本地化)。
      
      迭代输入:迭代输入一条条的数据,对于文本数据来说,关键就是行号,当价值前行文本。 
      李   <李>映射(地图):正常的地图操作,将一对kv映射成为另外一对kv李   <李>分组(分区):
    按照设置的减少个数来进行分组,getPartitions共三个参数:k、v, partitionnum;
    默认按照HashPartition,如果需要全排的序,也可以设置TotalOrderPartitioner,它会采样一部分数据排序后设置R 1 (R是减少个数)个分割点,保证地图任务生成的R个文件的文件与文件之间的数据都是有序的,减少只需要对单个文件内部再排序即可。   <李>规约(减少):减少做聚合处理。   <李>输出(OutputFormat):
    一件事情是检查输出目录是否存在,如果存在则报错;
    另一件事情是将数据输出到临时目录。   
  

作业提交及初始化

  

先生编程模型及V1先生讲解

  
      <李>作业提交与初始化大概分为4个步骤:执行提交,端上传文件到hdfs,客户机与JobTracker通信提交任务,JobTracker通知TaskScheduler初始化任务。   <李> JobClient与JobTracker的通信过程如下两所示先生编程模型及V1先生讲解   <李>作业提交时序图先生编程模型及V1先生讲解“> <br/>第一步:JobClient先跟JobTracker交互获取到一个jobid; <br/>第二步:JobClient与HDFS交互创建输出目录;<br/>第三步:与HDFS交互上传任务运行所以来的文件(配置文件,jar包等)<br/>第四步:JobClient调用getSplits,与HDFS交互生成分片信息并写到分片文件中,<br/>第五步:与JobTracker交互提交任务。</李>
  <李> JobTracker收到任务提交请求后会先生成一个JobInProgress对象,这个对象会管理和监控这个工作的整个运行状况,之后JobTracker再告诉TaskSchduler进行作业初始化。</李>
  <李>作业初始话大致过程如下<img src=   
  

JobTracker与TaskTracker

  
      <李> JobTracker主要负责作业的运行时管理,以三级树的方式进行管理:首先会给作业初始化一个对象JobInProgress,初始化后每个任务有个TaskInProgress,每个任务对应多个TaskAtempt。其中一个助教成功则此TI成功,所有钛成功则此工作成功先生编程模型及V1先生讲解“> <br/> JobTracker将很多数据以KV形式存储在地图中,比如工作存储的是jobid和JobInProgress的映射;<br/> JobTracker通过接收TaskTracker的心跳请求,并发出应答来监控和管理作业运行过程,在应答中会下达各种命令:运行新任务,杀死任务等等李</>
  <李> TaskTracker:在每台机器上会启动一个TaskTracker进程,不断地向JobTracker发送心跳,汇报当前节点的资源使用情况,当前节点的任务运行情况,并根据JobTracker在应答中的指令执行具体命令<img src=先生编程模型及V1先生讲解