在之前的Hadoop是什么中已经说过MapReduce采用了分而治之的思想,MapReduce主要分为两部分,一部分是Map——分,一部分是Reduce——合

MapReduce全过程的数据都是以键值对的形式存在的

首先,我们假设我们有一个文件,文件中存了以下内容

hive spark hive hbase
hadoop hive spark
sqoop flume scala

这里涉及到一个偏移量(一个字符或空格为1位)
第一行的偏移量为0,内容为“hive spark hive hbase”
第二行的偏移量为21,内容为“hadoop hive spark”
第三行的偏移量为39,内容为“sqoop flume scala”

  • Map
  • 输入
    MapReduce处理的数据是从HDFS中读出来的
    以偏移量为key,内容value,则存在:
    (0,“hive spark hive hbase”)
    (21,“hadoop hive spark”)
    (39,“sqoop flume scala”)
  • 输出
    将输入的value中的词以空格为分割逐个取出来做key,1做value存起来
    (hive,1)
    (spark,1)
    (hive,1)
    (hbase,1)
    (hadoop,1)
    注意:有多少行,Map就要循环做几次
  • shuffle(之后会详细说,这里简单解释)
  • 输入
    map的输出
  • 输出
    相同的key的value进行合并
    这里合并不是进行累加或别的运算,而是合并到一个集合中
    (hive,[1,1,1])
    (spark,[1,1])
    (hbase,[1])
    (hadoop,[1])
    。。。。。。
  • reduce
  • 输入
    shuffle的输出
  • 输出
    根据业务将value进行合并
    例如当前的业务就会将value进行累加

MapReduce处理数据五步走

整个MapReduce程序,所有数据以(key,value)形式流动

  • 第一步:input

正常情况下不需要写代码
仅仅在MapReduce程序运行的时候指定一个路径即可

  • 第二步:map(核心)

map(key,value,output,context)
key:每行数据的偏移量——基本没用
value:每行数据的内容——真正需要处理的内容

  • 第三步:shuffle

不需要写代码

  • 第四步:reduce(核心)

reduce(key,value,output,context)
key:业务需求中的key
value:要聚合的值

  • 第五步:output

正常情况下不需要写代码
仅仅在MapReduce程序运行的时候指定一个路径即可

  • 工作原理

图文:以MapReduce编程五步走为基础,说MapReduce工作原理

相关文章:

  • 2021-12-17
  • 2021-08-07
猜你喜欢
  • 2021-10-19
  • 2021-06-23
  • 2021-11-20
  • 2021-10-04
  • 2021-10-18
相关资源
相似解决方案