MapReduce总结(概括)

MapReduce是一种大规模数据处理的编程模型
使用场景

  • PV UV
  • 词频统计
  • Top N

MapReduce优缺点

  • 优点:
    • 编程模型简单
    • 高伸缩性
      • 支持横向扩展 (增加节点)
    • 高吞吐离线处理数据
    • 并行处理
  • 缺点:
    • 不支持流式数据
    • 不支持实时计算
    • 不支持复杂计算
    • 不支持迭代计算

shuffle Map端

  • Map端会源源不断的把数据输入到一个环形内存缓冲区
  • 达到默认80%时
    • 新启一个线程
    • 把内存缓冲区的数据溢写到磁盘
  • 在溢写的过程中
    • partition分组
    • 对于每个分组,按照key排序
      Map处理完成后
    • 对溢出到磁盘的多个文件进行Merge操作
    • 合并为一个大文件和一个索引文件

shuffle Reduce端

  • Map端完成之后,暴露一个Http Server给Reduce端获取数据使用
  • Reduce启动拷贝线程从各个Map端拷贝结果
  • 一边拷贝一边进行Merge操作(归并排序)

Combiner

  • 满足结合律:求最大值,求和
  • 不适合:求平均数

MapReduce容错性

  • Task运行失败
    • Map Task失败
      • MRAppMaster重启Map Task
    • Reduce Task失败
      • MRAppMaster重启Reduce Task ,Map Task的输出结果保存在磁盘上

Task运行缓慢

  • 通常是由于硬件损坏,软件bug或者配置错误导致
  • 单个Task运行缓慢会显著影响整体作业运行时间
  • 解决方案 :推测执行

Map Task的数目

  • 计算公式
    • return Math.max(minSize , Math.min(maxSize , blockSize))

Reduce Task数目

  • 默认值为1 可以通过mapreduce.job.reduce 控制,如果需要全局排序(计算词频) 个数应该为1
  • 如果设置了partition RedeceTask的数量应该设置成一样
  • 如果没有 partition的数量应该根据reduceTask的数量来确定

你可能感兴趣的:(MapReduce,MapReduce)