Hive自定义分区器流程
1.自定义类
实现org.apache.hadoop.mapred.Partitioner(必须为这个,Hive中使用的是老的API)接口
package com.ailibaba;
import org.apache.hadoop.hive.ql.io.HiveKey;
import org.apache.hadoop.io.BytesWritable;
import org.apache.hadoop.mapred.JobConf;
import org.apache.hadoop.mapred.Partitioner;
public class MyPartitioner implements Partitioner<HiveKey, BytesWritable> {
@Override
public int getPartition(HiveKey s, BytesWritable s2, int numPartitions) {
return 0;
}
@Override
public void configure(JobConf job) {
}
}
2.打包到集群/opt/module/hive/lib/目录下
3.在Hive中进行测试
3.1 添加jar包
add jar /opt/module/hive/lib/partition.jar;
3.2 设置Hive中使用自定义的分区器
set hive.mapred.partitioner = com.ailibaba.MyPartitioner;
3.3 修改Reducer数量
set mapreduce.job.reduces=3;
3.4 执行SQL进行测试
insert overwrite local directory ‘/opt/module/data/distribute-result’ select * from emp distribute by deptno sort by empno desc;
3.5 查看最终结果
-rw-r–r--. 1 ailibaba ailibaba 707 11月 1 13:13 000000_0
-rw-r–r--. 1 ailibaba ailibaba 0 11月 1 13:13 000001_0
-rw-r–r--. 1 ailibaba ailibaba 0 11月 1 13:13 000002_0
发现只有0号分区有数据。