在hadoop作业中自定义分区和归约

简介: 版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq1010885678/article/details/43735703 当...
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq1010885678/article/details/43735703

当遇到有特殊的业务需求时,需要对hadoop的作业进行分区处理

那么我们可以通过自定义的分区类来实现

还是通过单词计数的例子,JMapper和JReducer的代码不变,只是在JSubmit中改变了设置默认分区的代码,见代码:

		//1.3分区
		//设置自定义分区类
		job.setPartitionerClass(JPartitioner.class);
		//设置分区个数--这里设置成2,代表输出分为2个区,由两个reducer输出
		job.setNumReduceTasks(2);

自定义的JPartitioner代码如下:

import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.lib.partition.HashPartitioner;

//自定义的分区类必须继承Partitioner类,这里只要继承默认的HashPartitioner,并重写getPartition方法即可
public class JPartitioner extends HashPartitioner<Text, LongWritable> {
	@Override
	public int getPartition(Text key, LongWritable value, int numReduceTasks) {
		//由于之前在代码中设置了分区的个数为2,
		//getPartition方法的返回值就是分区的下标,如:第一个分区return 0,第二个return 1
		//如果key的长度小于4,那么将这些键值对分入第一个区
		//否则就分入第二个区,<span style="font-family: Arial, Helvetica, sans-serif;">numReduceTasks是设置的分区数量</span>
		return key.toString().length() < 4 ? 1 % numReduceTasks
<span style="white-space:pre">				</span>: 2 % numReduceTasks;
	}
}

自定义分区就完成了


如果在海量数据的情况下,可能要设置归约(combiner)来减轻网络和reducer的压力

那么可以再JSubmit中通过代码设置combiner的类来启动

代码很简单,就一句话

<span style="white-space:pre">		</span>//1.5归约
		job.setCombinerClass(JReducer.class);

其实combiner和reducer都是设置的JReducer

侧面反映了combiner的角色作就是本地的reducer


相关文章
|
6月前
|
存储 分布式计算 监控
|
3月前
|
资源调度 分布式计算 Hadoop
使用YARN命令管理Hadoop作业
本文介绍了如何使用YARN命令来管理Hadoop作业,包括查看作业列表、检查作业状态、杀死作业、获取作业日志以及检查节点和队列状态等操作。
69 1
使用YARN命令管理Hadoop作业
|
4月前
|
XML 分布式计算 监控
详细指南:在Hadoop中配置Oozie作业
【8月更文挑战第31天】
86 0
|
5月前
|
分布式计算 Hadoop
Hadoop配置作业使用Combiner
【7月更文挑战第7天】
47 4
|
5月前
|
分布式计算 算法 Hadoop
Hadoop数据倾斜自定义分区器
【7月更文挑战第5天】
42 3
|
5月前
|
分布式计算 监控 Hadoop
Hadoop数据倾斜使用自定义分区器
【7月更文挑战第3天】
42 1
|
5月前
|
分布式计算 Hadoop 开发者
Hadoop数据倾斜自定义分区器
【7月更文挑战第1天】
48 1
|
6月前
|
存储 分布式计算 负载均衡
|
6月前
|
分布式计算 监控 算法
Hadoop性能优化合适的分区策略
【6月更文挑战第11天】
97 6
|
6月前
|
存储 分布式计算 Hadoop
Hadoop性能优化合理的分区大小
【6月更文挑战第12天】
52 4