接觸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