阶段二,hadoop,4.mapreduce

四、MapReduce

1.分布式运算程序

  • 优点:可用于大量廉价pc机上、可通过增加机器来扩展算力、高容错性(节点计算任务转移)、可处理PB级数据

  • 缺点:无法实时计算、无法流式计算、无法有向无环图计算(大量磁盘IO)

2.核心编程思想:

  •  分为两个阶段:MapTask、ReduceTask

  • 只能一个map和一个reduce,可以多个mapreduce串行

3.三类实例进程

  • mrappmaster:负责整个程序的过程调度及状态协调

  • maptask:负责Map阶段的整个数据处理流程

  • reducetask:负责Reduce阶段的整个数据处理流程

4.常用序列化类型

  • 特殊:IntWritable、Text、LongWritable(常用)

  • 其余:类型+Writable

5.mapreduce编程规范:Mapper、Reducer和Driver

6.案列

  • 本地测试

  • 提交于集群测试:路径改为main变量且于集群hadoop jar  *.jar  全类名  参数1  参数2 ..

  • 在windows上向集群提交任务(了解):设置conf

7.hadoop序列化与反序列化(自定义bean对象实现Writable接口)

  • 对象重写write、readFields方法

  • 序列顺序一致

  • 重写toString,使用“\t”

  • 若bean放于key,则还需实现Comparable接口,因为shuffle要求key可排序

8.框架原理

  • input--inputFormat--Mapper--Shuffle--Reducer--OutputFormat--Output

  • Shuffle:   sort--copy--sort

  • 数据切片是MapReduce程序计算输入数据的单位,一个切片会对应启动一个MapTask

  • 默认切片大小为BlockSize,否则会发生跨节点读数据

9.job提交原码

  • 建立连接:判断是本地运行环境还是集群运行环境

  • 创建给集群提交数据路径

  • 拷贝jar包到集群

  • 计算切片,生成切片规划文件、向路径写xml配置文件

  • 提交job,返回提交状态

10.切片原码:

  • 遍历目录下每一个文件

  • 计算切片大小,默认128m

  • 每次切片要判断剩余大小是否大于块的1.1倍,小于就划为一块切片

  • 将切片信息写于规划文件InputSplit

  • 过程于getSplit中完成

  • 提交规划文件于yarn,并计算maptask数量

11.combineTextInputFormat切片机制:过程分为虚拟存储、切片过程

  • 用于处理大量小文件,多个文件交于一个task处理

  • 根据实际情况设置切片最大值: .setMaxInputSplitSize(job, 4194304);// 4m

  • 虚拟存储:所有文件与4m比较,小于(划一块)、处于1-2倍(除2划两块)、

            大于2倍(按最大4m划分,最后除2划两块)

  • 切片过程:划分后的文件是否大于4m,大于(单独形成切片)

            小于(与下一个文件合形成一个切片)

12.shuffle机制(sort、copy、sort)

  • map方法输出的数据进入环形缓冲区(默认100m,两端放数据,80%时反向并排序之前数据(快排))

  • 输出数据按分区隔离后,再合并、排序(归并)后写入磁盘

  • copy出各task的数据,合并、排序(归并)后再按key分组输出到reduce方法

13.自定义partition分区

  • 类继承Partitioner,重写getParttion方法

  • job驱动中设置分区类:.setPartitionnerClass(**.class)

  • 根据分区逻辑设置task数量:.setNumReduceTasks(*)

  • 若数字大于实际分区数(产生空文件,浪费task)、小于(报错)

14.WritableComparable排序

  • 自定义对key排序(且快排)

  • 重写compareTo,编写排序逻辑

  • dirver添加配置

15.Combiner合并

  • 父类为reduce

  • 对每一个maptask进行局部汇总,减少网络传输量

  • driver添加配置

16.input\OutPutFormat

  • input:切片、配置信息

  • 默认输出格式:TextOutFormat

  • 其中使用Recordwriter来写数据

17.MapReduce工作机制

  • 客户端提交job到yarn:计算出maptaskshul

  • maptask中textinputformate用recorderreader向map读入一行数据

  • 数据进入环形缓冲区排序并分区,对多条结果归并排序,写数据到磁盘

  • reducertask拷贝多个maptask磁盘中数据到本地,进行归并排序到reduce

  • reduce一次读一组数据,再将数据送到textoutputformat中的recordwriter写出到文件

18.reduceTask 并行度决定机制

  • maptask个数由切片数决定

  • reducetask数量可以手动设置

  • 数据倾斜:reducetask之间输入数据量分布不均

19.reduceJoin

  • 合并操作于reduce阶段完成

  • 创类包含两表属性

  • mapper中setup创流,map向两流写入数据

  • reducer中合并

20.Mapjoin

  • 适用于一张表小(内存),一张大的场景

  • 只需在mapper中,setup里写缓存数据,map写连接

  • driver配置内存路径job.addCacheFile

21.自定义分组

  • 创类继承WritableComparator

  • 重写compare

22.压缩:减少磁盘io

  • 运算密集型少用压缩

  • io密集型多用压缩

  • deflate、gzip、bzip2、snappy

23.压缩方式:压缩/解压缩速度、压缩率、是否支持切片

24.压缩位置:

  • map前:考虑解压速度、是否可切片

  • map后:考虑压缩/解压速度

  • reduce后:考虑压缩率

25.可在map/reduce端采用压缩,driver中配置

  • 开启压缩:conf.setBoolean

  • 设置压缩方式:conf.setClass

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值