当前位置: 首页 > article >正文

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

文章目录

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

一. 问题描述与方案分析

1. 问题描述

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

如下相关操作:

-- 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

![[Pasted image 20240923104321.png]]

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

  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架构图:
![[Pasted image 20240923105823.png]]

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

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

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

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

 

二. 实现与操作

通过beeline方式登录hive

beeline -u jdbc:hive2://hiveserver2-hostname:10000 -n user -p password

udf绑定到某个库下

use databaseA

添加udf

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库下。

![[Pasted image 20240923110810.png]]


http://www.kler.cn/a/317148.html

相关文章:

  • 如何向函数模块 FM 中传递 Range 参数
  • EXCEL延迟退休公式
  • Dockerfile的使用
  • 前端,location.reload刷新页面
  • HBase 安装与基本操作指南
  • C# 模拟浏览器自操作(自动化办公)
  • idea多模块启动
  • uniapp 动态修改input样式
  • Linux bash特性:
  • 机器人上的DPDK使用思考
  • Android Retrofit源码分析(一):Retrofit是什么?和OkHttp的区别是什么?为什么需要他?
  • 计算机网络34——Windows内存管理
  • 速盾:网站使用 CDN 加速
  • Redis的分布式部署
  • AI大模型日报#0923:李飞飞创业之后首个专访、华为云+腾讯音乐发布昇腾适配方案
  • 基于MaxScale搭建MariaDB读写分离集群的方法【2024年最新版】
  • 深度学习(一)——CMC特刊推荐
  • 统一网关--gateway(仅供自己参考)
  • 深入探究PR:那些被忽视却超实用的视频剪辑工具
  • ES解说!
  • 【重学 MySQL】三十七、聚合函数
  • 【第十二章:Sentosa_DSML社区版-机器学习之回归】
  • expressjs 和 Router 配置 POST 请求
  • 智能算法躲避拥堵,高德企业用车上线“动态选路服务”为出行提效
  • Redis常用数据类型
  • 自动化测试常用函数