Hive将UDF编译到源码中(idea)

有时候需要改写源码,比如将常用的某个UDF放在源码中,启动即可使用。在Linux上直接改写源码是很容易出错的,因为vim没有检测提示,直到打包时过了很久才报错,并找到日志才发现是哪里写错了,而且提示的也不清楚。所以推荐使用idea来完成改源码的操作,好处不言而喻。

1.下载解压hive源码,用idea打开为Maven项目(jdk1.8),这时所有的依赖就会自动下载

2.将写好的UDF的java代码放在org.apache.hadoop.hive.ql.udf包下

3.在org.apache.hadoop.hive.ql.exec.FunctionRegistry类中静态代码块添加注册

4.Maven打包

1)点掉tests,相当于-DskipTests=true
Hive将UDF编译到源码中(idea)
2)命令行添加-e,可以输出错误栈信息

Hive将UDF编译到源码中(idea)
3)Profiles填写hadoop-2 dist,相当于-Phadoop-2,dist(如上图)


运行报错:

Caused by: java.io.IOException: Cannot run program "bash" (in directory "F:\IdeaProjects\hive-1.1.0-cdh5.7.0\common"): CreateProcess error=2, 系统找不到指定的文件。

这是因为在Windows环境不能执行bash。那么需要能执行bash环境,有一个神器:Git
安装git后,打开Git Bash,即可在Windows系统中执行Linux命令了!
cd到hive源码项目根目录,执行mvn -e clean package -Phadoop-2,dist -DskipTests=true

Hive将UDF编译到源码中(idea)

注意事项:需要配置Maven环境变量,并且一定要写%M2_HOME%而非%MAVEN_HOME%


编译成功后,在项目根目录下的packaging/target下会生成tar包和一个同名文件夹,如下图。同名文件夹是这个tar包解压后的文件夹,上传到Linux可直接使用,免解压。

Hive将UDF编译到源码中(idea)

相关推荐