Hive IDE连接及UDF实战
# Hive IDE连接 + UDF实战|完整一步通 我给你**最实用、企业真实场景、直接能跑**的全套流程: **DataGrip/DBeaver连接Hive** + **Java写UDF + 上传 + 注册 + 调用** --- # 一、Hive IDE 连接(2种最常用工具) ## 1. 连接前提 - 知道 **Hive Server2 地址**(host:10000) - 账号密码(若开启kerberos则需要keytab) - 网络通(能访问10000端口) --- ## 2. DBeaver 连接 Hive(免费推荐) 1. 新建连接 → 搜索 **Apache Hive** 2. 配置: - Host:hive server2 IP - Port:10000 - Database:default - 用户名:你的账号(无密码留空) 3. **驱动选择**:Hive 2/3 对应驱动 4. 测试连接 → 成功 --- ## 3. DataGrip 连接 Hive(企业最常用) 1. 新建数据源 → **Apache Hive** 2. 填写: - Host - Port 10000 - Database default 3. 切换驱动:**Hive 3.x** 4. 高级参数(可选) ``` set hive.execution.engine=tez; ``` 5. 测试连接 --- # 二、Hive UDF 实战(企业标准流程) ## 什么是 UDF? 自定义函数,对Hive查询的**每一行数据做处理** 例如:脱敏、加密、截取、清洗、格式转换 --- # 三、实战:写一个【手机号脱敏 UDF】 ## 步骤1:创建Maven项目,导入依赖 ```xml <dependencies> <dependency> <groupId>org.apache.hive</groupId> <artifactId>hive-exec</artifactId> <version>3.1.2</version> <scope>provided</scope> </dependency> </dependencies> ``` --- ## 步骤2:写Java UDF代码 ```java import org.apache.hadoop.hive.ql.exec.UDF; import org.apache.hadoop.io.Text; public class MaskPhone extends UDF { public Text evaluate(Text phone) { if (phone == null || phone.toString().length() != 11) { return new Text(""); } String s = phone.toString(); return new Text(s.substring(0, 3) + "****" + s.substring(7)); } } ``` --- ## 步骤3:打包成 JAR Maven 执行: ``` mvn package ``` 得到:`udf-demo.jar` --- ## 步骤4:上传JAR到Hive ### 方式A:临时函数(当前会话有效) ```sql add jar /path/udf-demo.jar; create temporary function mask_phone as 'com.xxx.MaskPhone'; ``` ### 方式B:永久函数(所有会话可用,企业用) 1. 上传JAR到HDFS ``` hdfs dfs -put udf-demo.jar /user/hive/udf/ ``` 2. 创建永久函数 ```sql create function mask_phone as 'com.xxx.MaskPhone' using jar 'hdfs:/user/hive/udf/udf-demo.jar'; ``` --- ## 步骤5:使用 UDF ```sql select phone, mask_phone(phone) from user_info; ``` 输出: ``` 13812345678 138****5678 ``` --- # 四、企业常用 3 类 UDF 模板 ## 1. 字符串脱敏(最常用) ```java public Text evaluate(Text str) { ... } ``` ## 2. 日期格式化 ```java public Text evaluate(Text ts) { ... } ``` ## 3. 数据清洗(空值替换) ```java public Text evaluate(Text s) { ... } ``` --- # 五、常见问题 1. **ClassNotFound** - JAR路径不对 - 包名写错 2. **Function doesn't exist** - 未 add jar - 未创建函数 3. **返回NULL** - evaluate方法参数类型不匹配(必须用 **Text**)



