如何在Hive中创建自定义函数UDF及如何直接通过Impala的同步元数据重用UDF的jar文件

简介: 如何在Hive中创建自定义函数UDF及使用如何在Impala中使用Hive的自定义函数UDF函数开发使用Intellij工具开发Hive的UDF函数,进行编译;1.使用Intellij工具通过Maven创建一个Java工程,并添加pom.

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

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

UDF函数开发

使用Intellij工具开发Hive的UDF函数,进行编译;
1.使用Intellij工具通过Maven创建一个Java工程,并添加pom.xml依赖

<dependency>
            <groupId>org.apache.hive</groupId>
            <artifactId>hive-exec</artifactId>
            <version>${hive.version}</version>
        </dependency>

2.Java示例代码如下

import org.apache.hadoop.hive.ql.exec.UDF;
/**
 * @Auther:  截取2018023 前五位(简单的udf对列的字符串处理)
 * @Date: 2019/3/11 10:00
 * @Description:
 */
public class SubStrUdf extends UDF {
    public static String evaluate(String str) {
        if(null == str || str.length()==0){
            return "";
        }else{
            return str.substring(0,5);
        }
    }
}

此处使用一个简单的日期截取来做示例,注意此处需要集成UDF类,重写evaluate方法,来实现自己定义函数。
3.编译jar包
前提条件是已配置Maven的环境变量,命令行进入工程目录,执行如下命令:

mvn clean package

或者
直接在IDE maven 的插件里面进行打包

clean
package
install

3.Hive使用自定义函数(UDF)
将章节2中编译好的sql-udf-demo-1.0.jar上传到集群服务器;
3.1创建临时UDF
1.进入Hive的shell命令行,执行如下命令,创建临时函数

hive> add jar /var/lib/hadoop-hdfs/sql-udf-demo-1.0.jar;
hive> create temporary function SubStrUdf as 'com.demo.hive.SubStrUdf';

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

hive> select SubStrUdf (send_erp_time), send_erp_time from erp_goods.order_goods limit 10 ;
hive会进行分布式的运算

3.2创建永久UDF
1.在HDFS中创建相应目录,将sql-udf-demo-1.0.jar包上传至该目录

[hdfs@cdh21 ~]$ hadoop fs -mkdir /udf
[hdfs@cdh21 ~]$ hadoop fs -put sql-udf-demo-1.0.jar /udf

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

hive> create function SubStrUdf as 'com.demo.hive.SubStrUdf' using jar  'hdfs://cdh21:8020/udf/sql-udf-demo-1.0.jar';

注意:在创建的时候如果带有数据库名,则该UDF函数只对该库生效,其它库无法使用该UDF函数。
在命令行测试该函数是否可用,测试与上面一样
3.验证永久UDF函数是否生效
重新打开Hive CLI能正常使用创建的UDF函数。

hive> select SubStrUdf (send_erp_time), send_erp_time from erp_goods.order_goods limit 10 ;

4.Impala使用Hive的UDF(直接使用hive中的java的jar文件中函数,同步元数据即可,可以直接复用哦)
1.在Impala shell命令行执行元数据同步命令

impala> invalidate metadata;

测试:
重新同步元数据之后再次进行测试:
注意,如果这边在第一个impala-shell进去的时候,同步元数据之后还是不能使用hive创建的UDF函数的话,关闭客户端连接,重新进入就可以使用了
删除UDF函数命令:

impala> drop function SubStrUdf;

且重启也生效

相关文章
|
Java 数据库 数据安全/隐私保护
Java操作Excel文件导入导出【内含有 jxl.jar 】
Java操作Excel文件导入导出【内含有 jxl.jar 】
356 0
课时103:生成jar文件
本文介绍了Java中生成和使用JAR文件的基本概念与操作。JAR文件用于将多个类文件打包成一个压缩文件,便于管理和分发。通过JDK提供的`jar`命令可以创建JAR文件,并可通过设置CLASSPATH环境变量来配置和使用这些文件。文中还演示了如何定义、编译和打包一个简单的Java程序为JAR文件,并详细解释了JAR文件的结构及配置方法。此外,简要提及了JDK 1.9后引入的模块化系统对JAR文件的影响。
555 1
|
Java 开发者
修改JAR文件工具
本文介绍了一款名为JarEditor的IDEA插件,该插件允许用户直接对JAR包内的文件进行增删改查操作,无需先行解压。通过简单的安装与使用步骤,大大简化了传统上需要解压缩、反编译、重新编译及打包的过程。此外,JarEditor还支持对混淆过的JAR文件进行字节码级别的修改,并提供了强大的搜索功能,支持大小写、全词匹配和正则表达式搜索。对于开发者而言,这款插件无疑极大提高了处理JAR文件的效率和便捷性。
1798 14
|
SQL 存储 数据管理
Hadoop-15-Hive 元数据管理与存储 Metadata 内嵌模式 本地模式 远程模式 集群规划配置 启动服务 3节点云服务器实测
Hadoop-15-Hive 元数据管理与存储 Metadata 内嵌模式 本地模式 远程模式 集群规划配置 启动服务 3节点云服务器实测
409 2
|
Java Windows
如何在windows上运行jar包/JAR文件 如何在cmd上运行 jar包 保姆级教程 超详细
本文提供了一个详细的教程,解释了如何在Windows操作系统的命令提示符(cmd)中运行JAR文件。
13535 1
|
SQL 存储 关系型数据库
Hive 元数据更新
【8月更文挑战第12天】
717 1
|
SQL DataWorks 监控
DataWorks产品使用合集之同步数据到Hive时,如何使用业务字段作为分区键
DataWorks作为一站式的数据开发与治理平台,提供了从数据采集、清洗、开发、调度、服务化、质量监控到安全管理的全套解决方案,帮助企业构建高效、规范、安全的大数据处理体系。以下是对DataWorks产品使用合集的概述,涵盖数据处理的各个环节。
|
SQL 分布式计算 HIVE
实时计算 Flink版产品使用问题之同步到Hudi的数据是否可以被Hive或Spark直接读取
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
|
XML 运维 Java
Spring运维之boot项目打包jar和插件运行并且设置启动时临时属性和自定义配置文件
Spring运维之boot项目打包jar和插件运行并且设置启动时临时属性和自定义配置文件
431 1
|
消息中间件 存储 SQL
实时计算 Flink版产品使用问题之kafka2hive同步数据时,如何回溯历史数据
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。