下载解压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);

编译自定义函数到hive源码

编译

[[email protected] hive-1.1.0-cdh5.7.0]$ mvn clean package -Phadoop-2,dist -DskipTests

编译自定义函数到hive源码

复制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 ./

相关文章: