需要引入的jar包(maven)
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-common</artifactId>
<version>2.7.1</version>
</dependency>
<dependency>
<groupId>org.apache.hive</groupId>
<artifactId>hive-jdbc</artifactId>
<version>1.2.1</version>
</dependency>
<dependency>
<groupId>org.apache.hive</groupId>
<artifactId>hive-exec</artifactId>
<version>1.2.1</version>
</dependency>
<dependency>
<groupId>jdk.tools</groupId>
<artifactId>jdk.tools</artifactId>
<version>1.8</version>
</dependency>
注意下:如果不引人jdk.tools,可能会报错:Missing artifact jdk.tools:jdk.tools:jar:1.8;
这个tools就是JDK目录下的tools.jar,我把它放到了私服上了。
2、新建一个class
package com.hadoop.hive;
import org.apache.hadoop.hive.ql.exec.UDF;
import org.apache.hadoop.io.Text;
/****************************************************************************
* com.hadoop.hive ConcatString.java Created on 2015年11月20日
*
* @Author: linfenliang
* @Description:
* @Version: 1.0
***************************************************************************/
public class ConcatString extends UDF{
public Text evaluate(Text t1,Text t2) {
return new Text(t1.toString()+"*****"+t2.toString());
}
}
这个类是我们的自定义函数,用来处理自己的业务逻辑,这里用字符串操作代替,同时自定义的函数需要继承UDF类。
3、将该工程打包成jar上传到服务器目录如下:
/var/develop/apache-hive-1.2.1-bin/
4、将该jar添加到hive中,
add jar /var/develop/apache-hive-1.2.1-bin/hadoop-hive-0.0.1-SNAPSHOT.jar
5、在hive命令行中创建临时函数,调用自定义函数,
create temporary function myconcat as 'com.hadoop.hive.ConcatString';
查询试下:
select myconcat('111','222');
输出结果:
+--------------+--+
| _c0 |
+--------------+--+
| 111*****222 |
+--------------+--+
1 row selected (0.079 seconds)