1.环境
本文没有使用hadoop0.20这个版本网上有很多成功的例子
我使用hive-0.10.0和hadoop-0.23.4,没有使用root用户,不知道root可不可以,源码为hive-branch-0.10,因为是用hadoop用户,首先要确保在hadoop用户下可以编译,也就是说在hive-branch-0.10下运行ant package可以通过,有这个条件才能进行下面的操作。
2.导入
ant package
ant eclipse-files
这样以后就可以在eclipse中查看hive源码了
3.编译
eclipse中hive-branch-0.10右键选中Properties---->Builders---->new---->Ant Builder
然后在Buildfile中选择hive-branch-0.10/build.xml
target选项卡中After a "Clean"选中package,Manual Build也选中package
就可以了,然后勾选这个ant builder,去掉除这个新建的以外所有的勾,例如java builder前面的勾,然后将ant builder 用up移到最上面
这样我们就能手动编译hive了。
在hive-0.10支持多个hadoop版本,而这些hadoop版本之间不完全兼容,在外部hive能识别hadoop版本,可是在eclipse默认是0.20,使用hadoop-core-0.20.2.jar,于是我把这个jar包删掉了(包括build path中删除),然后把hadoop-common-0.23.4.jar、hadoop-mapreduce-client-core-0.23.4.jar、hadoop-hdfs-0.23.4.jar、commons-cli-1.2.jar、hadoop-mapreduce-client-common-0.23.4.jar拷贝到了hive中或者添加到build path中(以上不一定全要,但是我加了以上这些),这样就不会影响正常的编译,与没删那个hadoop-core-0.20.2.jar一样了
4.运行
就是要加一些jar包和conf文件到classpath中,另外配置环境变量,可以报什么错,然后发现缺什么包,再一一加进去。首先在run---->run configurations---->Java Application中新建配置我把它命名为MyHive,project设置为hive-branch-0.10,Main class配置为org.apache.hadoop.hive.cli.CliDriver
然后再选择classpath选项卡,添加$HIVE_HOME目录下lib文件夹下面的所有jar包到classpath,添加$HIVE_HOME目录下conf文件夹到classpath,添加hadoop配置文件夹到classpath,添加hadoop-mapreduce-client-common-0.23.4.jar、guava-11.0.2.jar、hadoop-common-0.23.4.jar、protobuf-java-2.4.0a.jar、hadoop-mapreduce-client-jobclient-0.23.4.jar、hadoop-yarn-common-0.23.4.jar、hadoop-yarn-api-0.23.4.jar、commons-io-2.1.jar、hadoop-auth-0.23.4.jar
我添加了以上这些,其实添加的最好方法就是上面的缺什么加什么包
另外我还在hadoop设置中的hadoop-env.sh添加了export HADOOP_CLASSPATH=$HADOOP_CLASSPATH:$HIVE_HOME/conf:$HADOOP_HOME/etc/hadoop不知道有没有用
然后在Environment选项卡中我增加了HADOOP_HOME、HADOOP_CONF_DIR、HADOOP_HDFS_HOME、HADOOP_MAPRED_HOME、HADOOP_YARN_HOME、YARN_CONF_DIR这些变量(也不知道有没有用)
最后的结果是能够在eclipse成功运行hive(我遇到错误诸如缺包、使用0.20时候的IPC错误、找不到配置文件、可以运行select * from table_name却无法运行select id from table_name等等)