11、MapReduce代码技巧总结

1、map的输入是无法控制的,它一行行读取进来

2、但是我们可以将它输入的value进行切割,组装成我们想要的key对象,以方便排序后在传输到reduce。

所以一般我们这么干:把需要排序的字段组装成自定义对象作为key,这个自定义对象需要实现writebleCompareble接口,
重写里面的compareto方法就行可以自定义排序了。

3、只要你在map中用的是自定义的bean作为key,那么这个信息一定是排序好的,并且交到同一个reduce中。

4、自定义patitionor

输入图片说明

使用:job.setPartitionerClass(Mypatitionor.class);

5、自定义GroupingComparator类规则来告诉reduce的iterator对key的判断。

输入图片说明

使用:job.setGroupingComparatorClass(ReduceCompareble.class);

6、自定义bean作为key,实现多个字段的排序

public class OrderBean implements WritableComparable<OrderBean> {

	private String orderID;
	private Double amount;

	[@Override](https://my.oschina.net/u/1162528)
	public void readFields(DataInput input) throws IOException {
		orderID = input.readUTF();
		amount = input.readDouble();

	}

	[@Override](https://my.oschina.net/u/1162528)
	public void write(DataOutput output) throws IOException {
		output.writeUTF(orderID);
		output.writeDouble(amount);
	}

	[@Override](https://my.oschina.net/u/1162528)
	public int compareTo(OrderBean o) {
		int cmp = this.orderID.compareTo(o.getOrderID());
		if (cmp == 0) {  //表示第一级相等,那么在判断第二级
    //compareTo默认是升序排序,加一个“-”表示降序排序。
			cmp = -this.amount.compareTo(o.getAmount());
		}
		return cmp;
	}
	
	[@Override](https://my.oschina.net/u/1162528)
	public String toString() {
		return this.orderID + "\t" + this.amount;
	}
}

7、combiner组件的使用:

就是在map阶段,整理排序后输出到磁盘的结果,和merge合并的文件结果。以减少reduce下载map运行结果的网络带宽。它的父类也是Reducer,但是他和reduce的不同在于运行的位置不一样。注意:使用combiner的前提是不能够影响业务,比如说求平均值。

8、mapreduce的计数器使用

  • 1、counter计数器的结果图

    输入图片说明

  • 2、获取counter

    输入图片说明

  • 3、counter自增1

    输入图片说明

    后面的构造器参数是组名和字段名,可以定义多个计数器,用来记录不同的信息。

9、获取map端的信息来自于那个表(在setup方法中定义即可,不要再map方法中获取。)

输入图片说明

10、在map端进行join的时候,可以使用addCacheFile

  • 1、指定cachefile的文件

    输入图片说明

  • 2、在map端获取

    输入图片说明

转载于:https://my.oschina.net/liufukin/blog/2254157

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值