在自己虚拟机上使用mysql作为hive元数据存储, 修改配置如下:

   
   
   
   
  1. <property> 
  2.   <name>javax.jdo.option.ConnectionURLname> 
  3.   <value>jdbc:mysql://localhost:3306/metastorevalue> 
  4.   <description>JDBC connect string for a JDBC metastoredescription> 
  5. property> 
  6.  
  7. <property> 
  8.   <name>javax.jdo.option.ConnectionDriverNamename> 
  9.   <value>com.mysql.jdbc.Drivervalue> 
  10.   <description>Driver class name for a JDBC metastoredescription> 
  11. property> 
  12.  
  13. <property> 
  14.   <name>javax.jdo.option.ConnectionUserNamename> 
  15.   <value>hivevalue> 
  16.   <description>username to use against metastore databasedescription> 
  17. property> 
  18.  
  19. <property> 
  20.   <name>javax.jdo.option.ConnectionPasswordname> 
  21.   <value>hivevalue> 
  22.   <description>password to use against metastore databasedescription> 
  23. property> 

并将mysql jdbc驱动拷贝到HIVE_HOME/lib目录下.
  接下去登陆hive客户端,执行show databases;命令, 异常:

   
   
   
   
  1. [ruizhe@localhost ~]$ hive 
  2. Hive history file=/tmp/ruize/hive_job_log_ruize_201204091822_467986476.txt 
  3. hive> show databases; 
  4. FAILED: Error in metadata: javax.jdo.JDOFatalInternalException: Unexpected exception caught. 
  5. NestedThrowables: 
  6. java.lang.reflect.InvocationTargetException 
  7. FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask 
  8. hive>  

被这个问题困扰好久, 同样的配置在自己笔记本环境上可以,但在公司机器上异常,
最后网上搜索了一把,发现解决方法如下:

   
   
   
   
  1. delete $HADOOP_HOME/build and every thing should be fine 

切换到 HADOOP_HOME目录:

   
   
   
   
  1. [hadoop@localhost build]$ pwd 
  2. /opt/app/hadoop-0.20.2-cdh3u3/build 
  3. [hadoop@localhost build]$ ls 
  4. ant  c++  classes  contrib  examples  hadoop-core-0.20.2-cdh3u3.jar  hadoop-tools-0.20.2-cdh3u3.jar  ivy  src  test  tools  webapps 
  5. [hadoop@localhost build]$  

果然在HADOOP_HOME/build目录下有新build的信息(我用ant重新build过hadoop)
直接删除build目录:

   
   
   
   
  1. [hadoop@localhost hadoop-0.20.2-cdh3u3]$ rm -rf build 

重新进入hive客户端:

   
   
   
   
  1. [ruize@localhost ~]$ hive 
  2. Hive history file=/tmp/ruize/hive_job_log_ruize_201204091826_1452110220.txt 
  3. hive> show databases; 
  4. OK 
  5. default 
  6. Time taken: 1.786 seconds 
  7. hive>  

这次OK了!