【Hive 运维】JDBC使用Hive UDF:Hive UDF打通hiveserver2

文章目录

  • [一. 问题描述与方案分析](#一. 问题描述与方案分析)
    • [1. 问题描述](#1. 问题描述)
    • [2. 方案分析](#2. 方案分析)
    • [3. 方案优化](#3. 方案优化)
      • [3.1. 通过文件系统,来保证jar包的节点一致性](#3.1. 通过文件系统,来保证jar包的节点一致性)
      • [3.2. hiveserver2 session的更新优化](#3.2. hiveserver2 session的更新优化)
  • [二. 实现与操作](#二. 实现与操作)

一. 问题描述与方案分析

1. 问题描述

用户需要创建永久的Hive UDF供JDBC连接使用,一开始先通过hive client的方式注册(输入hive,进入hive交互界面)发现,udf存在,但是通过jdbc连接的时候无法找到此函数。

如下相关操作:

sql 复制代码
-- 1. 上传包到文件系统中
hadoop fs -put /home/hadoop/lib/hive-1.0-SNAPSHOT.jar /lib/
 
-- 创建永久函数
-- a.进入hive终端
hive
-- b. 注册hive永久函数
-- 注意:函数是绑定到某个库下的,此时是绑定到default库下。
CREATE FUNCTION sayhello AS 'com.gao.bigdata.HelloUDF' USING JAR 'hdfs://hadoop002:9000/lib/hive-1.0-SNAPSHOT.jar';
 
 
-- 查看函数列表 
show functions like '*sayhello*';

2. 方案分析

通过重启hiveserver2之后通过jdbc连接找到了此函数。

相关参考见:cloudera Error executing a hive UDF through jbdc

从上截图可以知道有两个要点

  1. 要将所有的jar都放到各个节点的hiveserver2下
  2. 重启所有的hiveserver

通过操作之后发现方案可行

3. 方案优化

上面的解决方案虽然可行,但运维成本较高,现进行优化。

3.1. 通过文件系统,来保证jar包的节点一致性

首先将所有的jar都放到各个hiveserver2节点下的原因是add jar使用了本地路径,导致每个jdbc连接hiveserver2的时候都是从本地找jar。我们可以把jar放到hdfs上,这样add jar每个hiveserver2都能够从远端拉去jar,这就是文件的状态一致性。

3.2. hiveserver2 session的更新优化

其次要重启所有的hiveserver2,这也造成一定的运维问题,甚至会影响正在运行任务的jdbc连接。

先看下hive架构图:

  • 如果我们通过hive终端添加UDF函数,那Hiveserver2中的session就不会同步到,需要你重启才能加载最新的Hive session。

  • 如上架构图我们通过beeline或者jdbc的方式注册,添加的UDF函数就直接会存在于HiveServer2中,这样就不用重启。

  • 但另外需要注意的是,JDBC连接不同的Hiveserver2(这里我们称之为H2)时,因为只在H1上注册了UDF,所以H2需要重启,或需要再通过JDBC连接测试一遍。

到这里我们就得到了较为简化后的执行方案,具体操作见下节。

二. 实现与操作

通过beeline方式登录hive

sql 复制代码
beeline -u jdbc:hive2://hiveserver2-hostname:10000 -n user -p password

udf绑定到某个库下

sql 复制代码
use databaseA

添加udf

sql 复制代码
ADD JAR hdfs:///xxx/hive-demo-1.0-SNAPSHOT.jar;
CREATE FUNCTION to_upper_xxx AS 'com.gao.udf.UpperCaseUDF' USING JAR 'hdfs:///xxx/hive-demo-1.0-SNAPSHOT.jar';

测试:

上述创建的udf是绑定到databaseA库下。

相关推荐
非凡ghost4 小时前
视频剪辑不用等渲染,这款开源工具让切分合并秒级完成
运维·电脑·软件需求
FII工业富联科技服务6 小时前
Omniverse 数字孪生与柔性自动化,如何破解产能与交付、设备与空间的双重困境?
运维·自动化·devops
润滑卫士6 小时前
油液介电常数在线监测:测量原理与油液老化状态评估方法
运维
Rock Chin6977 小时前
把 n8n 接进 Slack:在对话里 @机器人 触发自动化工作流
运维·机器人·自动化
浩浩测试一下7 小时前
Linux 底层知识点 1
linux·运维·服务器
Eloudy7 小时前
全文 - IMEX 第01节 -IMEX overview
运维·服务器·网络
物联网软硬件开发-轨物科技8 小时前
【技术白皮书】光伏清检一体化机器人系统解决方案技术白皮书
大数据·运维·网络·人工智能·机器人
海宇数据8 小时前
零信任架构实战:基于海宇网上踪迹欺诈行为识别构建自动化信贷资信评估网关
运维·人工智能·架构·自动化
忆挽篱笙歌9 小时前
环境变量,本地变量
linux·运维·服务器
码间留白10 小时前
手把手把 GitHub 推上阿里云 ECS:Actions CI/CD 全链路避坑实录(折腾好几天,到 2 分钟见绿)
运维·阿里云·ci/cd·docker·devops·github actions