Hadoop实战之MapReduce_01

什么是MapReduce

  • MapReduce是一个用于处理海量数据的分布式计算框架,这个框架解决了
  1. 数据分布式存储(数据存在HDFS上)
  2. 作业调度
  3. 机器间通信
  4. 容错
  • MapReduce使用分治方式(分解,求解,合并),通过Map切分,Reduce合并进行数据处理,如图
    在这里插入图片描述

  • 理解上面这幅图非常重要,普遍情况下,大部分开发人员进行MapReduce开发任务时,只需要关注灰色部分。

    1. 运行MapReduce程序时,首先将需要处理的数据上传至HDFS,通过HDFS交给InputForMat进行切分,通常默认情况下,Hadoop 2.x默认的block大小是128MB,Hadoop 1.x的block大小是64MB,可以在hdfs-site.xml中设置
    2. 将切分成块的数据交由Map程序处理 。Map程序处理完成后生成<k,v>形式数据
    3. 将map处理的数据交由Shuffle处理,这里是整个MapReduce最神奇厉害的地方了(分片、分区、合并、归并。。。这些功能都在这里实现),后面会重点讲一下Shuffle
    4. 经过Shuffle初步整合过的数据交给Reduce处理合并产生结果,通过OutputFormat输出(可以输出到hdfs,Sql,文件等)

理解InputFormat

  • InputFormat主要完成两个功能 : 数据分割(Data Split) 和 记录读取器(Record Reader)
  • Data Split : 对输入文件进行切分,切成多少块则需要对应的map去处理,因此blockSize的大小设置不宜过小,否则会造成过多的map运行,占用资源。如果输入文件小文件非常多,会调用CombineFileInputFormat,合并多个小文件生成一个分片,减少map的数量(如果文件为压缩文件,则不可切分也不可合并,因此,如果想要确定控制map的数量,可以通过传入压缩包的数量来控制)
  • Record Reader: 对每个切片,读取数据的时候调用map函数,每读一条数据调用一次,直至该切片数据处理完成

理解Shuffle

  • shuffle的本意是洗牌、混洗的意思,把一组有规则的数据尽量打乱成无规则的数据。而在MapReduce中,shuffle更像是洗牌的逆过程,指的是将map端的无规则输出按指定的规则“打乱”成具有一定规则的数据,以便reduce端接收处理。
  • Shuffle过程如下:
    • Partitioner : 用于决定数据由哪个Reduce处理。例如 在map阶段完成处理后生成<k,v>格式数据,如果存在一个<a,1> 的数据,Partitioner通过hash方式,有n个reducer的情况下,对键值 ‘a’ 取hash值然后取模 hash % n = m ,得到分到下标为 m 的reducer。然后生成<m,a,1>格式数据。当然,这里分桶(分reducer)的方式不只hash,这里只是最简单的一种例子,可以自行网上查询其他方式
    • MemoryBuffer: 内容缓冲区,每个map的结果和Partitioner处理的key,value都保存在这个缓存区域中,默认大小为100M,阀值为 100 * 0。8 = 80M 。缓冲区中的数据以 {“partitioner”,“key”,“value”} 三元数组方式存储
    • Spill: 当在内容缓冲区中的数据达到阀值时,溢写Spill线程锁住这80M数据,将这80M数据写入本地磁盘中,释放内存。
    • Sort: 每次溢写Spill都会生成一个数据文件,写入磁盘前会对数据进行key排序 Sort,便于后面对合并combiner
    • Combiner: 通过Sort后的数据,可以轻易合并key相同的数据,因为key相同,通过Partitioner后确定的reducer也相同,所以这部分数据可以合并,减少reducer的工作量。合并的方式有
  • Combiner和Partitioner是用来优化Shuffle过程的。这两个都可以自定义实现,因此这里也是MapReduce可以进行性能优化的一个地方

下一章内容

  • 下一节讲在虚机Hadoop环境上分别使用python和java实现简单的word count(类似于学习Java时的hello world) 的一个MapReduce
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值