Hadoop之MapReduce相关内容

一、 简单理解MapReduce

MapReduce编程核心思想

1Map阶段: 分数据处理,将文件按照某种规则进行切片,一个切片一个Map任务,在MapReduce中可以有多个Map任务
	不同的Map任务可以运行在不同的节点上,进行分布式运行
2Reduce阶段: 合数据处理,将map阶段处理的数据结果进行汇总,计算出最终的结果,reduce处理的可能是多个Map任务的处理结果,所以reduce比较浪费资源,因此reduce阶段能不存在就不存在

MapReduce启动后存在的进程

1MRApplicationMaster    ----监控整个MR程序的运行状态,以及向RM申请资源
2MapTask                ----负责运行map阶段的计算逻辑
3ReduceTask             ----负责运行reduce阶段的计算逻辑

二、 MapReduce的序列化机制

原因

MapReduce处理的数据是多种多样的,在这个过程中就会涉及到网络传输,而在网络中传输的数据都是以二进制的形式进行传输,当MapReduce处理的数据为对象时,是无法在网络中传输的,所以需要对MapReduce中的数据进行序列化。

在实现序列化机制时必须使用Hadoop自带的序列化机制,不能使用java的序列化机制,原因是java的序列化机制太重了,在java中当一个对象被序列化时,会附带很多信息,包括校验信息,继承体系等,不便于在网络中传输。

特点

快速,可扩展,紧凑,互操作

自定义javabean对象步骤

1、 继承Writable
2、 反序列化时需要反射调用空参构造函数,所以需要有空参构造器
3、 重写序列化方法
4、 重写反序列化方法
5、 反序列化顺序需要和序列化顺序一致
6、 如果需要将内容显示到文件中,需要重写toString方法
7、 如果需要将自定义的bean放到key中传输,还需要实现comparable接口

三、 MapReduce的文件输入InputFormat

InputFormat主要用来做两件事

  • 将文件切片
  • 将文件转换成key-value形式

InputFormat是一个抽象类,在下面通过两个方法来实现这两件事

  • getSplits
  • RecordReader

InputFormat常用的,在MR程序中默认使用的子类是FileInputFormat,FileInputFormat也是一个抽象类,其下主要有五个实现子类,同时也可以自定义实现子类

1、 TextInputFormat(FlieInputFormat的默认实现子类)

  • 切片机制
1、 先获取输入文件的状态FileStatus
2、 如果有多个文件,每个文件单独切片
3、 在切片之前,判断文件是否能被切割(像压缩包一般是不能被切割的,bzip除外)
4、 如果文件能被切割,就按照公式进行切割  Math.max(minsize, Math.min(maxsize, blocksize))
	先求出maxsize和blocksize的最小值
	然后用最小值和minsize求出最大值,最大值为切片的大小
	minsize和maxsiz
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值