Hive自定义分区器流程

使用Hive自定义分区器,可以解决一些情况下产生的数据倾斜,下边给出自定义分区器流程,可做参考。

1、环境说明

当前环境采用Hadoop3.1.3以及Hive3.1.2版本。

2、自定义类

自定义类实现org.apache.hadoop.mapred.Partitioner(必须为这个,Hive中使用的是老的API)接口,这里只是做测试,所以所有数据我现在全部发送至0号分区,注意分区器中Key和Value类型!!

具体代码实现如下:

package com.wh;


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 {


  //实现每条数据的分区逻辑(这里选择将所有数据发送至0号分区)
    @Override
    public int getPartition(HiveKey s, BytesWritable s2, int numPartitions) {
        return 0;
    }


    //读取配置信息的方法
    @Override
    public void configure(JobConf job) {
    }
}

3、打包到集群/opt/hive/lib目录下

将写好的代码打包上传至集群,放置在Hive的安装路径下的lib目录即可

4、在Hive中进行测试

(1)添加jar包

进入Hive的客户端执行以下命令

hive (default)> add jar /opt/hive/lib/partition.jar;

(2)设置Hive中使用自定义分区器

hive (default)> set hive.mapred.partitioner = com.wh.MyPartitioner;

(3)修改Reducer数量

hive (default)> set mapreduce.job.reduces=3;

(4)执行SQL进行测试

测试数据展示:

hive (default)> select empno from emp;OK
empno
7369
7499
7521
7566
7654
7698
7782
7788
7839
7844
7876
7900
7902
7934

使用自定义分区器对empno字段进行分区处理

hive (default)> insert overwrite local directory '/opt/data/distribute-result' select * from emp distribute by deptno sort by empno desc;

(5)查看结果

-rw-r--r--. 1 atguigu atguigu 707 11月  1 13:13 000000_0
-rw-r--r--. 1 atguigu atguigu   0 11月  1 13:13 000001_0
-rw-r--r--. 1 atguigu atguigu   0 11月  1 13:13 000002_0

发现只有0号分区有数据,自定义Hive分区器完成!!!


了解更多内容:

推荐算法!基于隐语义模型的协同过滤推荐之用户商品推荐列表

推荐算法!基于隐语义模型的协同过滤推荐之商品相似度矩阵

任务调度系统的后起之秀——DolphinScheduler(二)

任务调度系统的后起之秀——DolphinScheduler(三)

任务调度系统的后起之秀——DolphinSchedular(一)

展开阅读全文

页面更新:2024-06-11

标签:分区   隐语   后起之秀   矩阵   字段   集群   算法   路径   客户端   模型   流程   代码   环境   商品   数据   系统   科技

1 2 3 4 5

上滑加载更多 ↓
推荐阅读:
友情链接:
更多:

本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828  

© CopyRight 2020-2024 All Rights Reserved. Powered By 71396.com 闽ICP备11008920号-4
闽公网安备35020302034903号

Top