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<HiveKey, BytesWritable> {
//實作每條資料的磁區邏輯(這里選擇將所有資料發送至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中進行測驗
4.1 添加jar包
進入Hive的客戶端執行
hive (default)> add jar /opt/hive/lib/partition.jar;
4.2 設定Hive中使用自定義的磁區器
hive (default)> set hive.mapred.partitioner = com.wh.MyPartitioner;
4.3 修改Reducer數量
hive (default)> set mapreduce.job.reduces=3;
4.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;
4.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磁區器完成!!!
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/237210.html
標籤:其他
上一篇:資料分析模型 第一章
