MapReduce2

Combiner(预聚合):介于map和reduce之间的reduce操作,但是是运行在MapTask

作用:减少数据的网络传输,是一个非常重要的调化优点,减少了一半的网络传输。

1.hadoop解决数据倾斜的方法。

什么是数据倾斜:

比如:一个文件有a,b,c三个属性的字段,a的数据量1亿个,而b,c仅仅只有一个,经过wordcount,map1:99%,map2:100%,map:100%

解决方法:

第一种:

combiner:减少数据的网络传输。但是做平均的时候不合适用combiner,如果导致数据倾斜的key分布在很多不同的文件,不同mapper,这种方法不适合。

如果导致数据倾斜的key分布在很多不同的文件:

局部聚合+全局聚合:第一次map:对于导致数据倾斜的key,加上随机数前缀。这样的话,本来相同的key是不是也会分到多个reducer中进行聚合

第二次map:去掉前缀,进行全局聚合。

思想:两次MR,第一次将key随机数散列到不同的reducer进行处理,达到负载均衡的目的。

也可以增加reducer数,提高并行度。

实现自定义分区

partitioner:按照某种规则(可以自定义)对map输出的数据进行操作。

默认:HashPatitioner

顺序:map->partitioner=>reduce

根据数据分布情况,自定义三列函数,将key均匀分配到不同的reducer

shuffile优化:

map端:减少输入文件的个数,对小文件进行合并。

combiner。

数据传输时进行压缩。

reduce端:

设置map和reduce共存

尽量少用reduce,会产生网络的消耗。

增加reducer,提高并行度。

整体优化:

合理的设置map和reduce数

mr on yarn进行参数调优 container

加配置(机器,内存)

是否可以只有map而没有reduce:可以的,这样直接输出map

是否可以只有reduce而没有map?

不可以(第一印象)

Homework:

Combine为什么不适合做avg?

在求取平均数时,因为添加的Combiner组件是与reduce组件具有相同的逻辑,会提前求一次平均值后传给reduce类,导致求取的平均值错误。

有哪几种压缩方式?

1、即时压缩和非即时压缩

即时压缩是将语音信号转化为数字信号,同时进行压缩,然后即时通过Internet传送出去。即时压缩一般应用在影像、声音数据的传送中。

非即时压缩是在需要的情况下才进行,没有即时性。非即时压缩一般不需要专门的设备,直接在计算机中安装并使用相应的压缩软件即可。

2、数字压缩和文件压缩

数字压缩是专指一些具有时间性的数据,这些数据常常是即时采集、即时处理或传输的。

文件压缩是专指对将要保存在磁盘等物理介质的数据进行压缩,如一篇文章数据、一段音乐数据、一段程序编码数据等的压缩。

3、无损压缩与有损压缩

无损压缩利用数据的统计冗余进行压缩,所以无损压缩的压缩比一般比较低。这类方法广泛应用于文本数据、程序和特殊应用场合的图像数据等需要精确存储数据的压缩。有损压缩方法利用了人类视觉、听觉对图像、声音中的某些频率成分不敏感的特性,允许压缩的过程中损失一定的信息。有损压缩广泛应用于语音、图像和视频数据的压缩。

yarn参数调优:

CPU资源调度

1.yarn.nodemanager.resource.cpu-vcores
表示该节点服务器上yarn可以使用的虚拟CPU个数,默认是8,推荐将值配置与物理核心个数相同,如果节点CPU核心不足8个,要调小这个值,yarn不会智能的去检测物理核心数

2.yarn.scheduler.minimum-allocation-vcores
单个任务最小可申请的虚拟核心数,默认为1

3.yarn.scheduler.maximum-allocation-vcores
单个任务最大可申请的虚拟核心水,默认为4,如果申请资源时,超过这个配置,会抛出InvalidResourceRequestException

Memory资源调度
yarn一般允许用户配置每个节点上可用的物理资源,注意,这里是"可用的",不是物理内存多少,就设置多少,因为一个服务器节点上会有若干的内存,一部分给yarn,一部分给hdfs,一部分给hbase;Member相关的配置如下:

1.yarn.nodemanager.resource.memory-mb
设置该节点上yarn可使用的内存,默认为8G,如果节点内存资源不足8G,要减少这个值,yarn不会智能的去检测内存资源,一般这个设置yarn的可用内存资源

2.yarn.scheduler.minimum-allocation-mb
单个任务最小申请物理内存量,默认1024MB,根据自己的业务设定

3.yarn.scheduler.maximum-allocation-mb
单个任务最大申请物理内存量,默认为8291MB

map个数和reduce个数由什么来决定的:

1) 文件的大小。当块(dfs.block.size)为128m时,如果输入文件为128m,会被划分为1个split;当块为256m,会被划分为2个split。

  2) 文件的个数。FileInputFormat按照文件分割split,并且只会分割大文件,即那些大小超过HDFS块的大小的文件。如果HDFS中dfs.block.size设置为128m,而输入的目录中文件有100个,则划分后的split个数至少为100个。

  3) splitsize的大小。分片是按照splitszie的大小进行分割的,一个split的大小在没有设置的情况下,默认等于hdfs block的大小。但应用程序可以通过两个参数来对splitsize进行调节

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

@xiaoluo

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值