Hive创建表格报Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask. MetaException引发的血案
Posted _和_
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Hive创建表格报Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask. MetaException引发的血案相关的知识,希望对你有一定的参考价值。
在成功启动Hive之后感慨这次终于没有出现Bug了,满怀信心地打了长长的创建表格的命令,结果现实再一次给了我一棒,报了以下的错误Error, return code 1 from org.apache.Hadoop.hive.ql.exec.DDLTask. MetaException,看了一下错误之后,先是楞了一下,接着我就发出感慨,自从踏上编程这条不归路之后,就没有一天不是在找Bug的路上就是在处理Bug,给自己贴了个标签:找Bug就跟吃饭一样的男人。抒发心中的感慨之后,该干活还是的干活。
第一步:查看配置文件 确保没有出错
第二步:上网找找同是天涯落人,看看有哪位哥们也跟我一样出现了这个问题,找来找去,就找到一个更换MySQL-connector-Java jar包的解决方案,怎么看都不像能解决问题,抱着死马当活马医的心态,还是试了一下,果然不出意料,没有解决问题,PASS!
第三步:运行 hive -hiveconf hive.root.logger=DEBUG,console打印hive启动过程的log。不打不知道,一打吓一跳,看到下面血淋淋的报错信息,心凉了半截,血案啊!!!由于太长我就截了一小部分出来
[main]: ERROR DataNucleus.Datastore: Error thrown executing CREATE TABLE `SERDE_PARAMS` ( `SERDE_ID` BIGINT NOT NULL, `PARAM_KEY` VARCHAR(256) BINARY NOT NULL, `PARAM_VALUE` VARCHAR(4000) BINARY NULL, CONSTRAINT `SERDE_PARAMS_PK` PRIMARY KEY (`SERDE_ID`,`PARAM_KEY`) ) ENGINE=INNODB : Specified key was too long; max key length is 767 bytes com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Specified key was too long; max key length is 767 bytes at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) ... at org.apache.hadoop.util.RunJar.main(RunJar.java:212) main]: ERROR Datastore.Schema: An exception was thrown while adding/validating class(es) : Specified key was too long; max key length is 767 bytes com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Specified key was too long; max key length is 767 bytes at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) ... at java.lang.reflect.Method.invoke(Method.java:606) at org.apache.hadoop.util.RunJar.main(RunJar.java:212) [main]: DEBUG metastore.HiveMetaStore: admin role already exists InvalidObjectException(message:Role admin already exists.) at org.apache.hadoop.hive.metastore.ObjectStore.addRole(ObjectStore.java:3187) ... at java.lang.reflect.Method.invoke(Method.java:606) [main]: DEBUG metastore.HiveMetaStore: Failed while granting global privs to admin InvalidObjectException(message:All is already granted by admin) at org.apache.hadoop.hive.metastore.ObjectStore.grantPrivileges(ObjectStore.java:3912) ... at org.apache.hadoop.util.RunJar.main(RunJar.java:212)
第四步:继续搜索解决方法,然后找到了可能是字符集的原因,可以通过在mysql中将数据库的字符集改为latin1,执行以下命令: alter database hive character set latin1;
第五步:重启hive,继续看log,除了第一个exception消失了之外,其他依然存在,有些疑惑,认真看了一下,发现metastore.HiveMetaStore: admin role already exists,会不会是之前hive启动出错时留下的问题,那么把mysql中的hive数据删掉重新创建一个看看。
第六步:在mysql中执行以下命令:
drop database hive;
create database hive;
alter database hive character set latin1;
第七步:重启hive,查看log,问题解决了!!!
以上是关于Hive创建表格报Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask. MetaException引发的血案的主要内容,如果未能解决你的问题,请参考以下文章
Sqoop从hive导数据到mysql中为啥一直报 ERROR tool.ExportTool:
hive on spark hql 插入数据报错 Failed to create Spark client for Spark session Error code 30041
hive on spark hql 插入数据报错 Failed to create Spark client for Spark session Error code 30041
hive 错误 FAILED: SemanticException [Error 10041]: No partition predicate found for
DataGrip 连接 Kerberos 认证的 hive 报 Hive JDBC Kerberose Authentication Error: GSS initiate failed 错误
hive跑mapreduce报java.lang.RuntimeException: Error in configuring object