接触Hive,天然少不了它家的shell命令行模式,下面就来分析下,日常咱们接触的这个脚本到底如何运行的。java
研究的版本是 1.2.1.(先搭建好Hadoop环境) ---扩展阅读:有兴趣的看看别人写的 http://www.javashuo.com/article/p-kqzdawxc-kh.htmlshell
1)下载Hive-1.2.1的二进制文件apache
http://archive.apache.org/dist/ 下面编程
2)解压缩segmentfault
tar -zvxf apache-hive-1.2.1-bin.tar.gzeclipse
3)启动hive函数
./bin/hive 查看程序界面oop
4)定位入口函数spa
经过脚本跟踪,找到命令行
cli () {
CLASS=org.apache.hadoop.hive.cli.CliDriver
execHiveCmd $CLASS "$@"
}
看来主类就是 org.apache.hadoop.hive.cli.CliDriver
execHiveCmd命令在/root/hive/apache-hive-1.2.1-bin/bin/ext/util下面.
打印$CLASS的值
结论就是:org.apache.hadoop.hive.cli.CliDriver就是入口类。
http://www.iteblog.com/archives/864
---那么剩下的工做就是把源码如今eclipse里搭建好。---源码跟踪的是0.9.0版本
搭建eclipse过程当中碰到几个问题
1)HiveParse.java类没有,这个实际上是经过HiveParse.g文件产生的,本身编译下0.9.0版本的源码,就能够生成。
其它相似问题经过这种方式解决。
费了九牛二虎之力,终于搭建好了,上图
依赖的jar包比较多,以下图所示:
剩下的就是debug源码了。为啥选择0.9.0,理由有2个:
1早期的代码比较少,能够尽快掌握Hive的原理。后面的代码虽然比较新,可是换汤不换药。
2手头上的Hive编程指南讲的是0.9.0.
so,无论怎样,先看了。
--- debug语句以下:
jdb org.apache.hadoop.hive.cli.CliDriver -hiveconf x=y --define A=B --hivevar C=D -h 127.0.0.1
stop in org.apache.hadoop.hive.cli.CliDriver.main
stop in org.apache.hadoop.hive.cli.OptionsProcessor.process_stage2
stop in org.apache.hadoop.hive.cli.CliDriver.setHiveVariables
stop in org.apache.hadoop.hive.cli.CliDriver.getFormattedDb
stop in org.apache.hadoop.hive.cli.CliDriver.processLine
stop in org.apache.hadoop.hive.cli.CliDriver.processCmd
run