创建Maven项目,添加依赖
<!-- 根据要连接的hadoop和hive,设置版本参数 -->
<properties>
<hadoop.version>2.6.0-cdh5.7.1</hadoop.version>
<hive.version>1.1.0-cdh5.7.1</hive.version>
</properties>
<!-- 因为使用CDH的hadoop和hive,因此要添加CDH的官方repository,才能够下载相应的依赖包 -->
<!-- 如果使用Apache版本的hadoop和hive,则不需要添加该repository -->
<repositories>
<repository>
<id>cloudera</id>
<url>http://repository.cloudera.com/artifactory/cloudera-repos</url>
</repository>
</repositories>
<dependencies>
<!-- 添加依赖组件,根据上方配置的版本参数和repository知识库下载依赖 -->
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-common</artifactId>
<version>${hadoop.version}</version>
</dependency>
<dependency>
<groupId>org.apache.hive</groupId>
<artifactId>hive-exec</artifactId>
<version>${hive.version}</version>
</dependency>
<!-- junit是java的单元测试框架 -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.10</version>
<scope>test</scope>
</dependency>
</dependencies>
UDF函数开发测试
导出jar包:
添加jar到Hive中去,并进行测试
bin/hive中操作:
临时函数的使用:
add jar /home/hadoop/lib/train-1.0-SNAPSHOT.jar;
-- 将上传的jar包导入到classpath变量里
list jars;
-- 查看导入的jar包
create temporary function say_hello as 'com.vincent.HelloUDF';
-- 创建一个临时函数,关联该jar包
-- as 后面的路径就是上一步获得的全路径
select 'lisi',say_hello('lisi');
永久函数的使用:
create function say_hello2
as 'com.vincent.HelloUDF'
using jar 'hdfs:///tmp/train-1.0-SNAPSHOT.jar';
-- 将jar包放到hdfs上,然后创建函数关联路径即可
select 'lisi',say_hello2('lisi');