MR知识点

  • MR:数据处理的编程模型

MR原理

  1. 输入文切割(默认按照最大切片(Long最大值),最小切片(>=1),块大小取(默认128M)三者中间值),形成k-v,并发执行。
  2. k-v进入map,执行map函数
  3. shuffle:根据map的输出,利用缓冲写到内存。根据reduce个数进行预分区、预排序,其结果在网络间分发(suffer),作为reduce的输入。
  4. 复制map的输出文件,合并,执行reduce函数,生成最终文件。
    在这里插入图片描述

MR本地作业运行机制(源码分析)

调用waitForCompletion()后

  • 提交作业,调用内部提交方法,作业提交器根据本地/集群模式获取作业id。作业提交器复制配置信息。作业提交器计算切片个数(map个数)。作业提交器生成作业配置文件,作业切片文件到临时目录。作业提交器把作业提交给本地/集群。
  • 将作业转换成内部作业提交(是一个线程的子类),执行作业的run()
  • 获取切片元数据,计算切片数,得到map任务集合,通过线程池执行map任务。得到reduce任务集合,执行reduce任务。
  • 最终通过反射运行自己实现的类(通过配置文件,找到自己实现类的类名)
    在这里插入图片描述

MR集群作业运行机

在这里插入图片描述

  1. 向资源管理器请求新的application 的id
  2. 将作业(切片信息,配置信息,jar包)拷贝到hdfs
  3. 资源管理器启动一个AppMaster,Appmaster检索作业信息(从hdfs)获取并发度(map个数)),向资源管理器请求资源列表(。
  4. APPMaster联系相应个数节点管理器 。节点管理器启动虚拟机,启动yarn子进程。子进程读取切片信息(第几个切片、从哪开始读,到哪结束、等),执行map和reduce任务

全排序和二次排序

全排序

对reduce所有输出结果进行排序
在这里插入图片描述

  1. 定义1个reduce
    缺点:数据倾斜

  2. 自定义分区函数
    缺点:不知道海量数据的分布
    在这里插入图片描述

  3. hadoop全排序分区+采样机制
    对输入文件采样 合理划分分区
    使用采样器,通过输入文件生成分区文件。使用全排序类,应用分区文件,进行分区。

二次排序

对value排序
(想获得所有年份中,温度最高所在年份)在这里插入图片描述
步骤:

  1. 组合key(实现writeComparble)
  2. 自定义分区类
    按照年份分区(同一年份进入同一个reduce
  3. 定义排序对比
  4. 定义分组对比器

Hadoop MR的连接(join)

能够执行大型数据集间的连接操作

map端连接

前提:小表、reduce数量相同,建相同
步骤:将小表放入内存,放到map任务的内存中(hashmap)。扫描大表的时候检查hashmap相同的key连接输出。

reduce端连接

步骤:map端做标。
缺点:由于要经过shuffle,所以低效。
实现代码

半连接

步骤:在map端过滤掉不参加join的数据

其他

  • Hadoop 将作业分成若干任务(task)执行,包括map任务、reduce任务。
  • 任务运行在集群的节点上,通过YARN进行调度。
  • haddop将map的输入数据分成等长数据块,称为输入分片。合理的分片大小趋向于hdfs的一个块大小(128M)。
  • map的结果会存在硬盘上,作业完成后将其删除。
  • combiner函数
    1. 位于map的输出端和reduce的输入端中间,有利于优化MR计算(减少了map端和reduce端的数据传输)
    2. combiner函数通过reduce函数实现。

相关问题

  1. 如何减少Hadoop Map端到Reduce端的数据传输量
    1.使用combiner函数
    2.减少map个数(修改参数)
    3.减少reduce个数

  2. reduce个数的选择
    目标reduce保持在每个运行5分钟左右、且至少产生一个HDFS块的输出合适

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值