1,现版本:hive1.0.0
2,目标升级版本:hive1.2.1
3,下载hive1.2.1版本( apache-hive-1.2.1-bin.tar.gz)
http://apache.fayea.com/hive/hive-1.2.1/
升级步骤:
1.关闭当前打开的连接.
2.备份mysql中的hive库(如若升级失败,便于恢复)
mysqldump -uhive -phive hive > schem_hive-1.0.0.sql
3.解压新版本hive
4.修改环境变量
指定HIVE_HOME到新版本hive目录
5.配置新版本hive
cd ${HIVE_HOME}/scripts/metastore/upgrade/mysql/ 目录下
找到很多如下sql脚本文件:
.......
-rw-r--r--. 1 hadoop hadoop 141 Apr 29 10:26 upgrade-0.10.0-to-0.11.0.mysql.sql
-rw-r--r--. 1 hadoop hadoop 311 Apr 29 10:26 upgrade-0.11.0-to-0.12.0.mysql.sql
-rw-r--r--. 1 hadoop hadoop 386 Apr 29 10:26 upgrade-0.12.0-to-0.13.0.mysql.sql
-rw-r--r--. 1 hadoop hadoop 282 Apr 29 10:26 upgrade-0.13.0-to-0.14.0.mysql.sql
-rw-r--r--. 1 hadoop hadoop 278 Apr 29 10:26 upgrade-0.14.0-to-1.1.0.mysql.sql
-rw-r--r--. 1 hadoop hadoop 271 Apr 29 10:26 upgrade-0.5.0-to-0.6.0.mysql.sql
-rw-r--r--. 1 hadoop hadoop 230 Apr 29 10:26 upgrade-0.6.0-to-0.7.0.mysql.sql
-rw-r--r--. 1 hadoop hadoop 201 Apr 29 10:26 upgrade-0.7.0-to-0.8.0.mysql.sql
-rw-r--r--. 1 hadoop hadoop 137 Apr 29 10:26 upgrade-0.8.0-to-0.9.0.mysql.sql
-rw-r--r--. 1 hadoop hadoop 235 Apr 29 10:26 upgrade-0.9.0-to-0.10.0.mysql.sql
-rw-r--r--. 1 hadoop hadoop 243 May 7 16:55 upgrade-1.1.0-to-1.2.0.mysql.sql
查找发现没有找到对应版本的升级脚本;进入mysql的hive库中查找SCHEMA_VERSION如下:
mysql> use hive
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
mysql> select * from VERSION;
+--------+----------------+--------------------------------------------------+
| VER_ID | SCHEMA_VERSION | VERSION_COMMENT |
+--------+----------------+--------------------------------------------------+
| 1 | 0.14.0 | Hive release version0.14.0 |
+--------+----------------+-------------------------------------------------+
1 row in set (0.00 sec)
因为1.0.0是0.14.0之后的大版本,所以1.0.0升级使用的SCHEMA_VERSION还是0.14.0;
找到从1.0.0升级到1.2.1需要的如下脚本:
-rw-r--r--. 1 hadoop hadoop 278 Apr 29 10:26 upgrade-0.14.0-to-1.1.0.mysql.sql
-rw-r--r--. 1 hadoop hadoop 243 May 7 16:55 upgrade-1.1.0-to-1.2.0.mysql.sql
执行如下脚本:
mysql -uhive -phive hive <upgrade-0.14.0-to-1.1.0.mysql.sql
mysqldump -uhive -phive hive > schem_hive-1.1.0.sql
mysql -uhive -phive hive <upgrade-1.1.0-to-1.2.0.mysql.sql
然后将mysql的驱动拷贝到现在版本的lib下;
将之前旧版本配置好的hive-site.xml,hive-env.xml与hive-log4j.properties放回现在版本的conf下;
启动hive;升级完成!
操作中所遇bug;
启动hive时控制台抛出[ERROR] Terminal initialization failed; falling back to unsupported java.lang.IncompatibleClassChang异常;
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
SLF4J: Actual binding is of type [org.slf4j.impl.Log4jLoggerFactory]
[ERROR] Terminal initialization failed; falling back to unsupported
java.lang.IncompatibleClassChangeError: Found class jline.Terminal, but interface was expected
at jline.TerminalFactory.create(TerminalFactory.java:101)
at jline.TerminalFactory.get(TerminalFactory.java:158)
at jline.console.ConsoleReader.
at jline.console.ConsoleReader.
at jline.console.ConsoleReader.
at org.apache.hadoop.hive.cli.CliDriver.getConsoleReader(CliDriver.java:773)
at org.apache.hadoop.hive.cli.CliDriver.executeDriver(CliDriver.java:715)
at org.apache.hadoop.hive.cli.CliDriver.run(CliDriver.java:675)
at org.apache.hadoop.hive.cli.CliDriver.main(CliDriver.java:615)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at org.apache.hadoop.util.RunJar.main(RunJar.java:212
原因:是因为hadoop下使用的还是旧版本的jline-0.9.94.jar
ll$HADOOP_HOME/share/hadoop/yarn/lib/
-rw-rw-r--. 1 hadoop hadoop 87325 Jan 29 2015 jline-0.9.94.jar
解决办法:
删除旧版本的jline包 ;
将新版本hive下的jline的JAR包拷贝到hadoop的$HADOOP_HOME/share/hadoop/yarn/lib/目录下;
cd $HADOOP_HOME/share/hadoop/yarn/lib/
rm jline-0.9.94.jar
cp $HIVE_HOME/lib/jline-2.12.jar ./
启动 hive 即可!