千家信息网

0011-如何在Hive & Impala中使用UDF

发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,温馨提示:要看高清无码套图,请使用手机打开并单击图片放大查看。1.文档编写目的本文档讲述如何开发Hive自定义函数(UDF),以及如何在Impala中使用Hive的自定义函数,通过本文档,您将学习到以
千家信息网最后更新 2026年11月02日0011-如何在Hive & Impala中使用UDF

温馨提示:要看高清无码套图,请使用手机打开并单击图片放大查看。

1.文档编写目的

本文档讲述如何开发Hive自定义函数(UDF),以及如何在Impala中使用Hive的自定义函数,通过本文档,您将学习到以下知识:

1.如何使用Java开发Hive的自定义函数

2.如何在Hive中创建自定义函数及使用

3.如何在Impala中使用Hive的自定义函数

这篇文档将重点介绍UDF在Hive和Impala的使用,并基于以下假设:

1.集群环境正常运行

2.集群安装Hive和Impala服务

以下是本次测试环境,但不是本操作手册的硬限制:

1.操作系统:Redhat6.5

2.CDH和CM版本为5.11.1

3.采用sudo权限的ec2-user用户进行操作

2.UDF函数开发

使用Intellij工具开发Hive的UDF函数,进行编译;

1.使用Intellij工具通过Maven创建一个Java工程

2.pom.xml文件中增加Hive包的依赖

  org.apache.hive  hive-exec  1.1.0

3.Java示例代码如下

package com.peach.date;import org.apache.hadoop.hive.ql.exec.UDF;import java.text.ParseException;import java.text.SimpleDateFormat;/** * SQL的UDF日期相关工具类 * Created by peach on 2017/8/24. */public class DateUtils extends UDF { /**     * 将日期字符串格式化为标准的日期格式     * 如:     * 2017-8-9 to 2017-08-09     * 2017-08-09 9:23:3 to 2017-08-0909:23:03     * @param sdate * @param pattern * @return */ public static String evaluate(Stringsdate, String pattern) {        String formatDate = sdate; SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");        try {            formatDate =sdf.format(sdf.parse(sdate)); } catch (ParseException e) {            e.printStackTrace(); } return formatDate; }}

此处使用一个简单的日期转换自定义函数来做事例,注意此处需要集成UDF类,重写evaluate方法,来实现自己定义函数。

4.编译jar包

前提条件是已配置Maven的环境变量,命令行进入工程目录,执行如下命令:

 mvn clean  package 

3.Hive使用自定义函数(UDF)

将章节2中编译好的sql-udf-utils-1.0-SNAPSHOT.jar上传到集群服务器;

3.1创建临时UDF

1.进入Hive的shell命令行,执行如下命令,创建临时函数

add jar  /home/ec2-user/sql-udf-utils-1.0-SNAPSHOT.jar;create  temporary function parse\_date as 'com.peach.date.DateUtils'; 

2.在命令行测试该UDF函数

select  parse\_date(dates, 'yyyy-MM-dd HH:mm:ss') from date\_test1; 

3.2创建永久UDF

1.在HDFS中创建相应目录,将sql-udf-utils-1.0-SNAPSHOT.jar包上传至该目录

ec2-user@ip-172-31-8-141  ~$ hadoop dfs -mkdir /udfjarec2-user@ip-172-31-8-141  ~$ hadoop dfs -put sql-udf-utils-1.0-SNAPSHOT.jar /udfjar 

注意:目录udfjar和sql-udf-utils-1.0-SNAPSHOT.jar的权限,所属用户为hive

2.进入Hive的shell命令行,执行如下命令创建永久的UDF

create  function default.parse\_date as 'com.peach.date.DateUtils' using jar  'hdfs://ip-172-31-9-186.ap-southeast-1.compute.internal:8020/udfjar/sql-udf-utils-1.0-SNAPSHOT.jar'; 

注意:在创建的时候如果带有数据库名,则该UDF函数只对该库生效,其它库无法使用该UDF函数。

3.在命令行测试该UDF

 select  parse\_date(dates, 'yyyy-MM-dd HH:mm:ss') from date\_test1; 

4.验证永久UDF函数是否生效

重新打开Hive CLI能正常使用创建的UDF函数。

4.Impala使用Hive的UDF

1.在Impala shell命令行执行元数据同步命令

ip-172-31-10-156.ap-southeast-1.compute.internal:21000  > invalidate metadata; 

2.使用UDF函数

ip-172-31-10-156.ap-southeast-1.compute.internal:21000  > select parse\_date(dates,'yyyy-MM-dd HH:mm:ss') from date\_test1; 

5.常见问题

1.通过Impala CLI命令行,使用UDF自定义函数时异常

Connected to ip-172-31-10-156.ap-southeast-1.compute.internal:21000Server version: impalad version 2.7.0-cdh6.10.2 RELEASE (build 38c989c0330ea952133111e41965ff9af96412d3)[ip-172-31-10-156.ap-southeast-1.compute.internal:21000] > select parse_date(dates) from date_test1;Query: select parse_date(dates) from date_test1Query submitted at: 2017-08-24 12:51:44 (Coordinator: http://ip-172-31-10-156.ap-southeast-1.compute.internal:25000)ERROR: AnalysisException: default.parse_date() unknown

元数据未同步导致,执行如下命令进行元数据同步:

[ip-172-31-10-156.ap-southeast-1.compute.internal:21000] > invalidate metadata;

2.在Impala CLI命令行执行,异常如下

[ip-172-31-10-156.ap-southeast-1.compute.internal:21000] > select parse_date(dates,'yyyy-MM-dd HH:mm:ss') from date_test1;Query: select parse_date(dates,'yyyy-MM-dd HH:mm:ss') from date_test1Query submitted at: 2017-08-24 13:02:14 (Coordinator: http://ip-172-31-10-156.ap-southeast-1.compute.internal:25000)ERROR: Failed to copy hdfs://ip-172-31-9-186.ap-southeast-1.compute.internal:8020/udfjar/sql-udf-utils-1.0-SNAPSHOT.jar to /var/lib/impala/udfs/sql-udf-utils-1.0-SNAPSHOT.2386.2.jar:Error(2): No such file or directory

在Impala Daemon服务器上,目录不存在导致

解决方法:

在所有Impala Daemon服务器创建/var/lib/impala/udfs目录

[ec2-user@ip-172-31-10-156 lib]$ sudo mkdir -p impala/udf[ec2-user@ip-172-31-10-156 lib]$ sudo chown -R impala:impala impala/

注意:目录所属用户及组

温馨提示:要看高清无码套图,请使用手机打开并单击图片放大查看。

函数 命令 目录 数据 日期 开发 服务 工具 服务器 环境 用户 集群 永久 同步 测试 编译 温馨 图片 工程 所属 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 花魁咖啡 互联网科技公司排名 科技互联网企业 互联网公司 科技公司 互联网科技公司电话 壹账通互联网科技 互联网科技公司有哪些 互联网科技公司招聘 银川新华互联网科技学校地址 互联网之后的科技是什么 南山科技园互联网公司有哪些 花神(南京)互联网科技有限公司 广西互联网科技孵化中心 佛山市翊博互联网络科技有限公司 深圳艾果互联网通讯科技 朱啸虎曾投资哪些互联网科技企业 雨阳互联网卡科技有限公司 广东工业互联网大赛深圳学泰科技 广州富喜互联网络科技 互联网科技大会大佬 河南云网互联网络科技有限公司 互联网金融监管科技数据 青海省互联网新科技 欧洲十大科技互联网公司 湖北码尼互联网科技有限公司电话 华夏互联网科技业 区块链结合互联网科技 广东鹅鹅鹅互联网科技有限公司 现代互联网科技公司 上海互联网科技园景观
0