MapReduce 的流程:
    在hdfs 中会对文件进行文件的物理的切块, 分为block-0, block-1, block-2 …
    在MapReduce 中又抽离一层逻辑切片 split0, split1, split2 …
    切片的出现可以动态控制每次的数据大小。防止io密集型导致block 的过小和cpu密集型导致block过大

    进入到Map 为 k, v 键值对的形式。
    image.png

    image.png

    MP 的计算框架: 计算向数据移动
    角色:

    1. JobTracker
      1. 资源管理
      2. 任务调度
    2. TaskTracker[与DN一一对应]
      1. 任务管理
      2. 资源汇报[心跳]
    3. client[客户端]
      1. 会根据每次的计算数据, 咨询NN 的元数据[block]->计算切片[split] -> 得到切片的清单,map 的数量就确定了。
      2. split是逻辑的, block 是物理的。block 身上有[offset, locations]. split 和block 有对应关系的。
      3. 结果: split 包含偏移量, 以及split对应的map 任务应该移动到哪些节点[locations]。
      4. client 会将jar, split清单,配置xml 上传到hdfs的目录中[上传的数据, 副本数10]。
      5. client 会调用JobTracker, 通知要启动一个计算程序了。并且告知文件都存放在什么地方。