有时候需要改写源码,比如将常用的某个 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 可直接使用,免解压。