Hadoop运行机制理解心得

Hadoop运行机制理解心得

  1. Shuffle过程

    • Map端Shuffle

      • Spill:将MapTask处理好的数据写入磁盘
        • 所有MapTask的数据会先进行分区标记
        • 所有标记完成的数据会被写入一个环形缓冲区【内存:100M】
        • 当缓冲区达到存储阈值80%,这部分就被锁定,准备溢写
        • 对着80%中的K2V2进行排序:相同分区的数据放在一起
          • 内存:快排
        • 将这部分数据写入磁盘变成小文件
        • 最终每个MapTask会产生很多个有序的小文件
      • Merge:将每个MapTask对应的所有小文件进行合并成一个大文件
        • 合并排序:归并排序:基于有序文件的合并排序
        • 每个MapTask得到一个整体有序的大文件
      • MapTask程序结束通知程序管理者APPMaster,APPMaster会通知ReduceTask
    • Reduce端SHuffle

      • Merge:每个ReduceTask到每个MapTask取属于自己的数据
        • 合并排序:将所有属于自己的数据进行合并排序
          • 归并排序
      • 最终实现每个ReduceTask中的数据是整体有序的,实现分组
    • 思考:自定义分组:订单id,排序比较器:订单价格

      Order_0000001	Pdt_01	222.8
      Order_0000001	Pdt_05	25.8
      Order_0000002	Pdt_03	522.8
      Order_0000002	Pdt_04	122.4
      Order_0000002	Pdt_05	722.4
      Order_0000003	Pdt_01	222.8
      Order_0000003	Pdt_01	1000.8
      Order_0000003	Pdt_01	999.8
      
      Order_0000003	Pdt_01	1000.8
      
      
      Order_0000002	Pdt_05	722.4
      
      
      Order_0000003	Pdt_01	222.8
      
      Order_0000001	Pdt_01	222.8
      
      Order_0000002	Pdt_04	122.4
      
      Order_0000001	Pdt_05	25.8
      
    • 分组规则

      • 默认:调用K2的排序器作为分组的比较器

      • 自定义:继承WritableComparator,实现compare方法

        job.setGroupingComparatorClass
        
  2. Shuffle的优化

    • 尽量让程序避免shuffle过程
      • Map Join
    • ComBiner:Map端的聚合
      • 利用MapTask的个数比较多,每个MapTask负责处理的数据比较小,让每个MapTask提前做一次每个MapTask中的聚合,减轻进入Reduce的数据量
      • 聚合逻辑:就是Reduce逻辑
      • 实现:job.setCombinerClass(Reduce.class)
      • 发生:每次排序结束都会做会做一次Combiner
    • Compress:压缩
      • 利用压缩减少数据的磁盘以及网络IO的带宽,提高传输的速度
  3. MapReduce中的补充

    • 分片规则
      • 文件大小 / 分片大小 > 1.1
        • 如果大于1.1倍,一个分片大小就是一个分片
          • 剩余的是一个分片
        • 如果不大于,整个文件就是一个分片
      • 分片大小:max(最小分片大小,min(最大分片大小,块的大小))
      • |
      • 文件是否大于一个块的1.1倍
        • 135M > 128 x 1.1
          • 作为一个分片
        • 145M
          • split1:128M
          • split2:17M
    • MapReduce Join
      • Join规则
      • Join算法
        • Reduce Join:发生在reduce端,通过shuffle将两份数据的关联词在分组时进行关联
          • 必须经过Shuffle
          • 适合于大数据join大数据
        • Map Join:将小数据放入分布式内存,让每一份完整的小数据与大数据的每一个部分进行join
          • 不需要经过shuffle
          • 适合于小数据join大数据
  4. YARN的资源管理和任务调度

    • 主从架构
    • MapReduce程序在YARN上运行过程
    • YARN中的任务调度机制
      • FIFO:单队列,不能实现多个程序的并发或者并行
      • Capacity:容量调度,多队列,每个队列内部是FIFO,多个队列可以并行,允许资源动态抢占
      • Fair:公平调度,多队列,每个队列内部共享资源,多个队列可以并行,每个队列内部可以并发,允许资源动态抢占,允许配置权重优先级

猜你喜欢

转载自blog.csdn.net/mitao666/article/details/110474056