下载解压hive源码
wget http://archive.cloudera.com/cdh5/cdh/5/hive-1.1.0-cdh5.7.0-src.tar.gz
自定义一个java的类
package org.apache.hadoop.hive.ql.udf;
import org.apache.hadoop.hive.ql.exec.Description;
import org.apache.hadoop.hive.ql.exec.UDF;
import org.apache.hadoop.io.Text;
/**
* ⼀一个UDF: sayhello
*/
@Description(name = "sayhello",
value = "_FUNC_(input_str) - returns Hello : input_str ",
extended = "Example:\n "
+ " > SELECT _FUNC_('wxk') FROM src LIMIT 1;\n"
+ " 'Hello : wxk'\n")
public class sayhello extends UDF {
public Text evaluate(Text input){
System.out.println("sayhello methond start......");
return new Text("Hello"+input);
}
}
进入
hive-1.1.0-cdh5.7.0/ql/src/java/org/apache/hadoop/hive/ql/udf
创建个java文件,讲上面自定义的java内容拷进来
注意这个文件名和类名要一样
[[email protected] udf]$ vi sayhello.java
注册函数
进入这个路径
hive-1.1.0-cdh5.7.0/ql/src/java/org/apache/hadoop/hive/ql/exec
修改FunctionRegistry.java
[[email protected] exec]$ vi FunctionRegistry.java
加入
import org.apache.hadoop.hive.ql.udf.sayhello;
在里面static里加入
//第一个是函数名字,第二个是对应的文件class
system.registerUDF("sayhello",sayhello.class, false);
编译
[[email protected] hive-1.1.0-cdh5.7.0]$ mvn clean package -Phadoop-2,dist -DskipTests
复制hive-exec-1.1.0-cdh5.7.0.jar
在这个路径下
[[email protected] lib]$ pwd
/home/hadoop/software/hive-1.1.0-cdh5.7.0/packaging/target/apache-hive-1.1.0-cdh5.7.0-bin/apache-hive-1.1.0-cdh5.7.0-bin/lib
复制编译后的该文件到已经部署好的hive里
[[email protected] lib]$ pwd
/home/hadoop/app/hive-1.1.0-cdh5.7.0/lib
[[email protected] lib]$ cp /home/hadoop/software/hive-1.1.0-cdh5.7.0/packaging/target/apache-hive-1.1.0-cdh5.7.0-bin/apache-hive-1.1.0-cdh5.7.0-bin/lib/hive-exec-1.1.0-cdh5.7.0.jar ./