hadoop——SecondaryNameNode:元数据的存储与同步;Shuffle运行过程图解分析与Shuffle的combiner优化,compress压缩优化

hadoop——HDFS:分布式文件存储系统

namenode:主节点

主要功能:

1:管理子节点

2:处理客户端发送的请求

3:处理元数据

元数据存放位置:

1:存放于内存中,读写速度快,加快客户端请求

2:存放于磁盘中,防止内存中的数据丢失

3:存放位置:hadoop目录下的data/tmpData/dfs/name/current中

namenode启动过程:

将元数据信息从磁盘中读取到内存中,启动

SecondaryNameNode:辅助主节点进行元数据同步

fsimage:保存了最新的元数据检查点 

editlog主要是在NameNode已经启动情况下对HDFS进行的各种更新操作进行记录         

fsimge(old) + edits = fsimage(new)

edits:该文件很重要,记录了HDFS的修改操作,不能丢失

可以通过edits日志文件信息,可以解析得到元数据

在合并的过程中,先合并到fs.temp文件,合并完成之后,修改名字为fsimage,删除fs.temp

shuffle运行过程分析

shuffle功能:

分区:决定从map过来的key交由哪一个reduce处理

            默认:按照key的has值,对reduce的个数进行取余

                       取余决定交由哪一个reduce处理 

分组:将相同的key进行合并

排序:按照key对每一组key的value进行排序,字典排序排序方式可以修改

执行过程分为两端,map端与reduce端

map端shuffle

 reduce端shuffle

 shuffle过程的优化

注意:MapReduce的优化,有时候就是优化shuffle

combiner合并优化

在map阶段提前进行了一次合并,一般来讲等同于提前执行了reduce操作。

好处:可以降低reduce的压力

为什么说在map阶段提前运行reduce方法可以降低reduce的压力?

在map阶段的进行合并是 并行的(分布式的)。

combiner合并可以解决数据倾斜问题:

什么是数据倾斜:简单来将,就是数据分配不均匀

换个通俗易懂的解释,就是一帮人干活,累的累死,闲的闲死

可以选择性的把大量的相同key数据先进行一个合并

然后再交给reduce来处理,这样做的好处很多

即减轻了map端向reduce端发送的数据量(减轻了网络带宽)

也减轻了map端和reduce端中间的shuffle阶段的数据拉取数量(本地化磁盘IO速率)

注意:不是所有处理数据时都可以使用合并,只有当处理的数据的value相同时,才可以使用combiner合并进行优化

compress压缩优化:大大减少磁盘IO以及网络IO

MapReduce有很多地方都可以压缩

输入的就是一个压缩文件

map shuffle中合并成一个大文件,对该文件进行压缩,reduce过来取数据就是压缩之后的数据

Hadoop常见的压缩格式

检查本地库支持哪些压缩:

bin/hadoop checknative

修改压缩库,只需要替换native包即可

常用用的压缩格式:snappy;lzo;lz4

hadoop中设置压缩

输入:一般不配置

map的中间结果:

mapreduce.map.output.compress = true;

mapreduce.map.output.compress.codec=org.apache.hadoop.io.compress.Lz4Codec

压缩方式的寻找:DefaultCodec -》找打该类的目录-》其他压缩类和他在同一个目录下

reduce输出

mapreduce.output.fileoutputformat.compress = true;

mapreduce.output.fileoutputformat.compress.codec= org.apache.hadoop.io.compress.Lz4Codec

配置方式:

方式一:main方法中Configuration

方式二:在配置文件中

       全局修改,所有MapReduce都生效

方式三:运行的时候通过自定义配置

  bin/yarn jar 运行jar包.jar -D压缩属性=yy -D压缩属性=bb 运行主类 input_path(输入目录) output_Path(输出目录)

检查是否配置成功

方式一:

web中8088端口 -》history -》Configuration-》查看对应配置参数

方式二:查看计数器,Linux中的结果输出信息

     Map output materialized bytes

计数器

 

 在map或者reduce中使用计数器

context.getCounter(Temperature.TOTAL).increment(1);

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

无名一小卒

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

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

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

打赏作者

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

抵扣说明:

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

余额充值