hadoop 核心注意事项 小总:maptask并行机制 reduce并行机制 task并行 数据倾斜 shuffle mapreduce 参数优化 自定义计时器counter

标题hadoop 核心注意事项 小总

一 .maptask的并行机制(逻辑切片)
maptask 的数量取决于 一般取决于 切片的数量。有多少切片就有多少maptask。
maptask 的数量主要取决于三个方面:
1.文件的大小及数量。
2.blocksize的大小
3.以及splip(块) size 大小

时间:是在mr客户端提交程序到yarn之前。
地点:mr程序客户端(main方法)
参与者:输入目录 FileInputFormat.getSplit();
规则是:对待处理的文件卓个遍历 一切片大小(blocksize)对文件进行逻辑切片
split size=blocksize=128m;
默认 :134217728b(128M) 【hadoop 官网说 默认是字节 也可以以 k(kilo),m(兆),g,t,p,e结尾如:128m,521m,1g】(hdfs-default.xml)

在这里插入图片描述
举例正常切:
在这里插入图片描述
源码中 fileinputformat 中 有一行代码:
Math.max(minSize,math.min(maxsize,blocksize))
这个很重要
不管如何调整,都不可能跨文件处理数据。卓个遍历
调整方向 :split size= block size ;

特殊情况1:小文件场景
1.txt 12k;
2.txt 10k;
3.txt 15k;
由于 默认规则是卓个遍历 ,这就导致了 会有 三个 split (这样太浪费资源,因为交个一个maptask 就可以了)

解决方案
1.(将小文件合并为一个文件)hdfs 有个追加命令 appendToFile +shell
2.可以使用java程序 以读写流的形式 将文件合并。
3.修改源码(修改默认读取数据组件逻辑)。

特殊情况2:大文件场景
1.txt 1.5t;
2.txt 3t;
如果我们使用默认的切片大小 :128m 我们会切成很多个split (块)
解决方案:
更改默认的blocksize =512m 或者更大

更改的位置:应该在 hdfs-site.xml 中 添加
property>
name>dfs.blocksize</name
value>512m</value
</property

特殊情况3:当使用默认blocksize=128m时且 有个文件1.txt 大小为 129M
按照我们的规则 将会切成 0-128m;128m-129m 俩个块。但是实际中并不是。
因为源码

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值