Hadoop(六)

Hadoop_Day07


为什么要实现预聚合

  • 减少的了reduce 从map拉取数据的过程,提高计算效率
  • 注意:将reduce端的聚合操作,放到map 进行执行。适合求和,计数,等一些等幂操作。不适合求平均值,次幂等类似操作

Shuffle优化

  • 配置⽅⾯:

    • 增⼤map阶段的缓冲区⼤⼩
    • map阶段输出结果使压缩;压缩算法使⽤lzo
    • 增加reduce阶段copy数据线程数
    • 增加副本数,从⽽提⾼计算时的数据本地化
  • 程序⽅⾯:

    • 在不影响计算结果的情况下建议使⽤combiner
    • 输出结果的序列化类型尽量选择占⽤字节少的类型
  • 架构⽅⾯:

    • 将http改为udp,因为http还要进⾏3次握⼿操作

Hadoop宕机解决方式

  • 如果MR造成系统宕机
    • 此时要控制Yarn同时运⾏的任务数,和每个任务申请的最⼤内存。调整参数:yarn.scheduler.maximum-allocation-mb(单个任务可申请的最多物理内存量,默认是 8192MB)
  • 如果写⼊⽂件过快造成NameNode宕机
    • 那么调⾼Kafka的存储⼤⼩,控制从Kafka到HDFS的写⼊速度。例如,可以调整Flume每批次拉取数据量的⼤⼩参数batchsize

Hadoop解决数据倾斜⽅法

  1. 提前在map进⾏combine,减少传输的数据量 在Mapper加上combiner相当于提前进⾏reduce,即把⼀个Mapper中的相同key进⾏了聚合,减 少shuffle过程中传输的数据量,以及Reducer端的计算量。 如果导致数据倾斜的key⼤量分布在不同的mapper的时候,这种⽅法就不是很有效了。

  2. 导致数据倾斜的key ⼤量分布在不同的mapper

    • 局部聚合加全局聚合。 第⼀次在map阶段对那些导致了数据倾斜的key 加上1到n的随机前缀,这样本来相同的key 也会被 分到多个Reducer中进⾏局部聚合,数量就会⼤⼤降低。 第⼆次mapreduce,去掉key的随机前缀,进⾏全局聚合。 思想:⼆次mr,第⼀次将key随机散列到不同reducer进⾏处理达到负载均衡⽬的。第⼆次再根据 去掉key的随机前缀,按原key进⾏reduce处理。 这个⽅法进⾏两次mapreduce,性能稍差。
    • 增加Reducer,提升并⾏度 Job.setNumReduceTasks(int)
    • 实现⾃定义分区 根据数据分布情况,⾃定义散列函数,将key均匀分配到不同Reducer

Yarn调度器

1)Hadoop调度器重要分为三类: FIFO 、Capacity Scheduler(容量调度器)和Fair Sceduler(公平调度器)。 Apache默认的资源调度器是容量调度器; CDH默认的资源调度器是公平调度器。

2)区别: FIFO调度器:⽀持单队列 、先进先出 ⽣产环境不会⽤。 容量调度器:⽀持多队列,保证先进⼊的任务优先执⾏。 公平调度器:⽀持多队列,保证每个任务公平享有队列资源。

3)在⽣产环境下怎么选择? ⼤⼚:如果对并发度要求⽐较⾼,选择公平,要求服务器性能必须OK; 中⼩公司,集群服务器资源不太充裕选择容量。

4)在⽣产环境怎么创建队列? 调度器默认就1个default队列,不能满⾜⽣产要求。 按照框架:hive /spark/ "ink 每个框架的任务放⼊指定的队列(企业⽤的不是特别多) 按照业务模块:登录注册、购物⻋、下单、业务部⻔1、业务部⻔2

5)创建多队列的好处? 因为担⼼员⼯不⼩⼼,写递归死循环代码,把所有资源全部耗尽。 实现任务的降级使⽤,特殊时期保证重要的任务队列资源充⾜


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值