数据本地化策略和Job的执行流程

一、数据本地化策略

  1. 当JobTracker访问资源的时候需要向NameNode请求数据
  2. JobTracker获取到数据的描述信息,根据描述信息对数据进行了切片(InputSplit),然后将切片发给不同Mapper来执行
  3. MapTask在TaskTracker上执行,在执行的时候需要获取实际的数据
  4. TaskTracker需要去访问DataNode,为了节省带宽资源,所以往往将DataNode和TaskTracker放在同一个节点上 — 数据本地化策略
  5. 为了减少网络资源的消耗,往往还会将切片的大小和实际的Block的大小设置的相同

二、job执行流程

  1. run job:客户端提交一个mr的jar包给JobClient。提交方式:hadoop jar …
    a. 做job环境信息的收集,比如各个组件类,输入输出的kv类型等,检测是否合法
    b. 检测输入输出的路径是否合法
  2. JobClient通过RPC和ResourceManager进行通信,返回一个存放jar包的地址(HDFS)和jobId。jobID是全局唯一的,用于标识该job
  3. client将jar包写入到HDFS当中(path = hdfs上的地址 + jobId)
  4. 开始提交任务(任务的描述信息,不是jar, 包括jobid,jar存放的位置,配置信息等等)
  5. JobTracker进行初始化任务
  6. 读取HDFS上的要处理的文件,开始计算输入切片,每一个切片对应一个MapperTask。注意,切片是一个对象,存储的是这个切片的数据描述信息;切块是文件块(数据块),里面存储的是真正的文件数据
  7. TaskTracker通过心跳机制领取任务(任务的描述信息)。切片一般和切块是一样的,即在实际开发中,切块和切片认为是相同的。在领取到任务之后,要满足数据本地化策略
  8. 下载所需的jar,配置文件等。体现的思想:移动的是运算,而不是数据
  9. TaskTracker启动一个java child子进程,用来执行具体的任务(MapperTask或ReducerTask)
  10. 将结果写入到HDFS当中

猜你喜欢

转载自blog.csdn.net/yang134679/article/details/93657180