乐趣区

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

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 可直接使用,免解压。

退出移动版