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

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

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

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

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

4.Maven打包bash

1)点掉tests,至关于-DskipTests=true
clipboard.png
2)命令行添加-e,能够输出错误栈信息ide

clipboard.png
3)Profiles填写hadoop-2 dist,至关于-Phadoop-2,dist(如上图)oop


运行报错:idea

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=truespa

clipboard.png

注意事项:须要配置Maven环境变量,而且必定要写%M2_HOME%而非%MAVEN_HOME%命令行


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

clipboard.png

相关文章
相关标签/搜索