大数据Hadoop之mapreduce

1、MapReduce概述

mapReduce是hadoop一个分布式运算程序的编程框架,运行在yarn上。

2、MapReduce过程

 input-----inputformat----->mapper__suffle__>reduce------outputformat--->output

文件由inputformat切片后创建了对应数量的maptask处理文件(一个文件一个Maptask,并行运行互不干涉),执行map中的操作,在map操作中把数据处理成<k,v>形式输入到缓存中,缓存在溢写到磁盘中,在reducetask端拉取这些文件到缓存中再对这些<k,v>按key进行聚合,最后通过output输出。

 2.1、inputformat:

1、FileInputFormat切片机制

        把数据文件按128M为一个切片

2、CombineTextInputFormat切片机制

      CombineTextInputFormat用于小文件过多的场景,它可以将多个小文件从逻辑上规划到一个切片中,这样,多个小文件就可以交给一个MapTask处理。可以设置虚拟存储最大值setMaxInputSplitSize,文件将切成个个虚拟存储文件,再按虚拟存储文件顺序合并后大于这个值会分为一个切片,小于这个值会和下一个虚拟存储文件合并。

3、自定义inputformat

继承fileinputformat再改写RecordReader

2.2、shuffle

shuffle是再map方法执行后,reduce方法执行前的处理过程

Map方法后数据进入到分区方法分区后,再进去环形缓冲区(环形缓冲区默认大小100m),当环形缓冲区数据站缓冲区80%时,数据将会溢写到磁盘中,溢写前会按key的索引进行字典顺序排序(快排),溢写产生大量文件也可以对文件进行combine操作,reduce端会拉取对映的分区的文件到内存中,内存不够再存储到磁盘,拉取完所有文件后,采取归并排序把磁盘和内存的数据进行排序再进入reduce方法,最后再执行reduce方法处理数据。

2.3、reduce join和mapper join

简单的说就是文件join操作一个是在reduce端,一个是在mapper端进行,尽量使用mapperjoin,reduce主要聚合后输出数据,mapper端按切片数会产生多个maptask并行join操作性能较高,且提前处理业务逻辑。

2.4、outputformat

1TextOutputformat 文本形式输出

2sequenceFilleOutputformat 用于多个mapreduce,输出给下一个mapreduce任务处理

3自定义:继承fileOutputformat 改写recordwrite

3、优化

1慢的原因:硬件:cpu、io、内存、网络、磁盘状况 。软件:数据倾斜,map和reduce数设置不合理,map时间太长导致reduce等太久,小文件太多,溢写太多,文件merge太多

2优化方法

数据输入:合并小文件,才用combinetestinputformat

map阶段,减少溢写次数(增大环形缓冲区,增大溢写条件,减少merge合并次数,

reduce阶段,合理设置reduce数,设置reducemap共存(map运行到一定阶段reduce启动),增大reduce拉取文件内存的大小

数据倾斜:自定义分区,采用combine,避免reducejoin

基本上想到的就这么多之后再补充。。。

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值