详解HDFS的Mapper类和Reduce类及4个泛型参数含义

Mapper类:

1. Mapper组件开发方式:自定义一个类,继承Mapper
2. Mapper组件的作用是定义每一个MapTask具体要怎么处理数据。
 例如一个文件,256MB,会生成2个MapTask(每个切片大小,默认是128MB,
 所以MapTask的多少有处理的数据大小来决定)。即2个MapTask处理逻辑是一样的,
 只是每个MapTask处理的数据不一样。
3. 下面是Mapper类中的4个泛型含义:
	 a.泛型一:KEYIN:LongWritable,对应的Mapper的输入key。输入key是每行的行首偏移量
	 b.泛型二: VALUEIN:Text,对应的Mapper的输入Value。输入value是每行的内容
	 c.泛型三:KEYOUT:对应的Mapper的输出key,根据业务来定义
	 d.泛型四:VALUEOUT:对应的Mapper的输出value,根据业务来定义
4. 注意:初学时,KEYIN和VALUEIN写死(LongWritable,Text)。KEYOUT和VALUEOUT不固定,根据业务来定
5. Writable机制是Hadoop自身的序列化机制,常用的类型:
	a. LongWritable 
	b. Text(String)
	c. IntWritable
	d. NullWritable
6. 定义MapTask的任务逻辑是通过重写map()方法来实现的。
读取一行数据就会调用一次此方法,同时会把输入key和输入value进行传递
7. 在实际开发中,最重要的是拿到输入value(每行内容)
8. 输出方法:通过context.write(输出key,输出value)
9. 开发一个MapReduce程序(job),Mapper可以单独存储,
 此时,最后的输出的结果文件内容就是Mapper的输出。
10. Reducer组件不能单独存在,因为Reducer要依赖于Mapper的输出。
 当引入了Reducer之后,最后输出的结果文件的结果就是Reducer的输出。

Reduce类:

1. Reducer组件用于接收Mapper组件的输出
2. reduce的输入key,value需要和mapper的输出key,value类型保持一致
3. reduce的输出key,value类型,根据具体业务决定
4. reduce收到map的输出,会按相同的key做聚合,
形成:key Iterable 形式然后通过reduce方法进行传递
5. reduce方法中的Iterable是一次性的,即遍历一次之后,再遍历,里面就没有数据了。
所以,在某些业务场景,会涉及到多次操作此迭代器,处理的方法是
:①先创建一个List  ②把Iterable装到List ③多次去使用List即可
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值