本地调试(local debug)
本次调试本为了修改HiveServer2 以提供授权校验接口,因此下了Hive源码 准备调试一番。主要测试了CliDriver和HiveServer2.
主要流程参考了这篇文文章的实现:http://b865a395.wiz03.com/share/s/2Upqel3Vs45O2q1eTZ1wyr_O0urkGT29lAco2pq2Ol26_NM3
在此篇文章对细节进行补充。
本地环境
- 本地已安装好Hive环境,且初始化过mysql库。
- 启动了HDFS服务。
- Idea。
- maven3,JDK1.8
代码准备
- 下载相应版本源码。用IDE打开。
- 先对源码打包一次,防止导入IDE时太慢。命令如下:
mvn clean package -P hadoop-2 -DskipTests
记得要指定hadoop版本的profile,初次打包没什么问题可以跳过测试,不然要挺久的。然后大陆连apache central repo有时可能会超时,超时请在不同时间段多试几次或使用梯子。 - 源码maven项目导入IDE
- 可能会有一些 类找不到(一些是要antlr相关的), 跟进到相应的模块中,点击pom.xml 生成源码。
- 代码生成后:(其他 代码找不到也用此方法解决)
调试exec
- 在Hive运行版目录下执行 hive --service metastore 启动 metastore【提供服务】
- 将本地Hadoop的core-site.xml放到 hive 源码目录的 src/main/resources 下,重新打包(如有必要)
- 将hive-site.xml放在 cli模块中的resources中。 注意配置文件里,url是指向 metastore服务。而非直连mysql ,否则报一个错误:http://mail-archives.apache.org/mod_mbox/hive-dev/201108.mbox/%3CCA+FBdFSHBtBAX7ie0JDORiLc7Hj0ToXzmpAnk7Tq4h68HmV3sQ@mail.gmail.com%3E 不太容易解决。解决办法博客(主要是在eclipse里安装一个插件):http://guoyunsky.iteye.com/blog/1178076
- 而直连服务 可以直接达到一样调试效果。
- 以及另外一个 metastore 版本不一致的问题:http://blog.csdn.net/u011098327/article/details/54601229
- 可以通过关闭版本检查 解决。
- debug模式运行hive-cli中的CLIDriver类,此时控制台可见hive command line,可以输入命令然后再ql的相应代码中打断点进行单步或拦截。
调试metastore
- 以debug模式启动HiveMetastore
- 另外写testcase使用HiveMetastoreClient类进行交互访问
调试HiveServer2
同理,将hive-site.xml 放到service的resources目录下。 debug模式启动HiveServer2类。
用beeline连接。
beeline -u jdbc:hive2://localhost:10000/default -n userName -p passWord