大数据Hadoop学习笔记(四)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/yuanyi0501/article/details/83031411

MapReduce运行过程

========

  • step1 :
    • input
      • InputFormat
        • 读取数据
        • 转换成<key, value>
      • FileInputFormat
        • TextInputFormat
  • step 2:
    • map
      • ModuleMapper
      • map(KEYIN , VALUEIN, KEYOUT, VALUEOUT)
        • 默认情况下——>KEYIN :LongWritable VALUEIN : TEXT
  • step 3:
    • shuffle
    • proceess
      • map,output<key, value>
      • 输出output一开始放在memory内存缓冲区
      • 内存满了之后通过spill,溢写到磁盘中,很多文件。写的过程中有两种操作:
        • 分区parttition,基于hash分区
        • 排序sort
      • 输出之后,磁盘存在很多小文件
        • 将小文件合并merge
        • 排序
        • 形成一个大文件——》在map task运行的机器的本地磁盘
          -------------------------------- map结束 ---------------------------------------------
      • reduce任务启动,会到map task运行的机器的本地磁盘上,拷贝要处理的数据
      • 合并。排序
      • 分组group:将相同的key的value放在一起
        -MAP-01
        <hadoop,1>
        ——————<hadoop,2>------->combiner在map端合并key
        <hadoop,1>
        <yarn,1>
        <hive,1>
        -MAP-02
        -MAP-03
        -reduce-01
        a-zA-Z
    • reduce-02
      other

总结shuffle过程:

  • 分区partition
  • 排序sort
  • 拷贝copy——用户无法干预
  • 分组group
  • 压缩compress——可设置
  • 合并 combiner map任务端的reduce——可设置
  • step 4:
    • reduce:
      • reduce(KEYIN, VALUEIN,KEYOUT,VALUEOUT)
      • map输出的<key, value>数据类型与reduce输入的<key, value>数据类型一致
  • step 5:
    • output
      • OutPutFormat
    • FileOutputFormat
      • TextOutputFormat
        • 每个<key, value>对,输出一行,key和value之间用\t分隔,默认调用key和value的toString()方法
        • 在这里插入图片描述

MapReduce调优

  • reduce task 数量。设置的两种方法:
    • mapreduce.job.reduces
    • job.setNumReduceTasks(1);
  • map task 输出压缩
    • 在这里插入图片描述
  • shuffle 参数
    • 在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/yuanyi0501/article/details/83031411