Mapreduce的进阶

Mapreduce

shuffle过程:

每个map task把输出结果写到环形缓冲区内,环形缓冲区的大小默认为100M.
当内存环形缓冲区写入的数量达到一定的阈值时,后台线程会将数据溢写到磁盘(阈值默认为80)
    根据partitioner,把数据写入到不同的partition
    对每个partition的数据进行排序
随着Map Task的不断运行,磁盘上的溢出文件会越来越多
    讲这些溢出文件合并
    对于一个partition下的不同分片,使用归并排序,同一分区内数据有序
Reduce Task通过网络远程拷贝MapTask的结果文件中的属于他的分区数据。
    合并所有已拷贝过来的数据文件
    采用归并排序算法,对文件数据内容整理排序,将相同key的数据分为一个组,不同key之间有序。
    最终生成一个kry对应一组值得数据集,一个key对应得一组数据会调用一次reduce方法。

Combiner优化:

combiner调用得地方
    MapTask得环形缓冲区向磁盘溢写文件之前调用combiner
    map阶段再合并本地多个文件写入一个大文件之前调用combiner
使用combiner得好处:
    减少map task输出数据得数量,由于临时结果写入到本地磁盘,所以能减少磁盘IO
    减少reduce map网络传输数据量,由于reduce需要远程通过网络进行map拷贝数据,提高拷贝速度。
应用场景;
    针对结果可以叠加得场景
    sum(可以)average(不可以)
设置方法(local reducer)
    job.setCombinerClass(WC.class)

YARN内置调度器

数据本地性

数据本地性得含义:

    如果任务运行再与它需要处理的数据再同一个节点,则称该任务具有本地性
数据本地的级别
    同节点
    同机架
    跨机架
数据本地行优点
    避免通过网络远程读取数据进而提高数据读取效率

推测执行
作业完成时间取决于最慢的任务完成时间
因硬件老化、软件Bug等,某些任务可能运行非常慢
MapReduce编程进阶 广告数据分析背景

Kafka 多分区、多副本、分布式、用Scala语言编写、基于发布/订阅的消息系统。

原理
    在kafka中,发送消息者成为Producer,而消息拉取者称为Consumer,通常consumer是被定义在Consumer Gruop里
    Kafka通过Zookeeper管理集群
    Kafka集群由多个实例组成,每个节点称为Broker,对消息保存时根据Topic进行归类
    一个Topic可以被划分为多个Partition
    每个Partition可以有多个副本
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值