有时候需要改写源码,比如将常用的某个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
2)命令行添加-e
,可以输出错误栈信息
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
注意事项:需要配置Maven环境变量,并且一定要写%M2_HOME%
而非%MAVEN_HOME%
!
编译成功后,在项目根目录下的packaging/target
下会生成tar包和一个同名文件夹,如下图。同名文件夹是这个tar包解压后的文件夹,上传到Linux可直接使用,免解压。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。