Hadoop运行机制理解心得

1 篇文章 0 订阅
1 篇文章 0 订阅

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:公平调度,多队列,每个队列内部共享资源,多个队列可以并行,每个队列内部可以并发,允许资源动态抢占,允许配置权重优先级
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大道独行之BIGDATA

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值