1 问题产生背景

更换hive客户端还使用原先的关系型数据库(我用的是mysql)的metastore。

2 报错信息

Error: Error while compiling statement: FAILED: SemanticException Unable to fetch table emp.
Exception thrown when executing query :
SELECT DISTINCT 'org.apache.hadoop.hive.metastore.model.MTable' AS
`NUCLEUS_TYPE`,`A0`.`CREATE_TIME`,`A0`.`LAST_ACCESS_TIME`,`A0`.`OWNER`,`A0`.`RETENTION`,
`A0`.`IS_REWRITE_ENABLED`,`A0`.`TBL_NAME`,`A0`.`TBL_TYPE`,`A0`.`TBL_ID`
FROM `TBLS` `A0` LEFT OUTER JOIN `DBS` `B0` ON `A0`.`DB_ID` = `B0`.`DB_ID`
WHERE `A0`.`TBL_NAME` = ? AND `B0`.`NAME` = ? (state=42000,code=40000)

3 分析问题

网上能查到类似的问题很少,只好自己想办法了。
乍一看报错信息中最后是一个关系型数据库的查询语句,就把它复制出来到mysql的元数据库下执行,问号?改成具体的表名和字段名(到元数据库的TBLS表和DBS查看),比如我的:

SELECT
DISTINCT 'org.apache.hadoop.hive.metastore.model.MTable'
AS `NUCLEUS_TYPE`,
`A0`.`CREATE_TIME`,
`A0`.`LAST_ACCESS_TIME`,
`A0`.`OWNER`,
`A0`.`RETENTION`,
`A0`.`IS_REWRITE_ENABLED`,
`A0`.`TBL_NAME`,
`A0`.`TBL_TYPE`,
`A0`.`TBL_ID`
FROM `TBLS` `A0`
LEFT OUTER JOIN `DBS` `B0` ON `A0`.`DB_ID` = `B0`.`DB_ID`
WHERE `A0`.`TBL_NAME` = 'student' AND `B0`.`NAME` = 'default'

执行有报错:

org.jkiss.dbeaver.model.sql.DBSQLException: SQL 错误 [1054] [42S22]: Unknown column 'A0.IS_REWRITE_ENABLED' in 'field list'at org.jkiss.dbeaver.model.impl.jdbc.exec.JDBCStatementImpl.executeStatement(JDBCStatementImpl.java:133)at org.jkiss.dbeaver.ui.editors.sql.execute.SQLQueryJob.executeStatement(SQLQueryJob.java:509)at org.jkiss.dbeaver.ui.editors.sql.execute.SQLQueryJob.lambda$0(SQLQueryJob.java:440)at org.jkiss.dbeaver.model.exec.DBExecUtils.tryExecuteRecover(DBExecUtils.java:168)at org.jkiss.dbeaver.ui.editors.sql.execute.SQLQueryJob.executeSingleQuery(SQLQueryJob.java:427)at org.jkiss.dbeaver.ui.editors.sql.execute.SQLQueryJob.extractData(SQLQueryJob.java:812)at org.jkiss.dbeaver.ui.editors.sql.SQLEditor$QueryResultsContainer.readData(SQLEditor.java:3226)at org.jkiss.dbeaver.ui.controls.resultset.ResultSetJobDataRead.lambda$0(ResultSetJobDataRead.java:118)at org.jkiss.dbeaver.model.exec.DBExecUtils.tryExecuteRecover(DBExecUtils.java:168)at org.jkiss.dbeaver.ui.controls.resultset.ResultSetJobDataRead.run(ResultSetJobDataRead.java:116)at org.jkiss.dbeaver.ui.controls.resultset.ResultSetViewer$ResultSetDataPumpJob.run(ResultSetViewer.java:4516)at org.jkiss.dbeaver.model.runtime.AbstractJob.run(AbstractJob.java:105)at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63)
Caused by: java.sql.SQLSyntaxErrorException: Unknown column 'A0.IS_REWRITE_ENABLED' in 'field list'at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:120)at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:97)at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:122)at com.mysql.cj.jdbc.StatementImpl.executeInternal(StatementImpl.java:764)at com.mysql.cj.jdbc.StatementImpl.execute(StatementImpl.java:648)at org.jkiss.dbeaver.model.impl.jdbc.exec.JDBCStatementImpl.execute(JDBCStatementImpl.java:327)at org.jkiss.dbeaver.model.impl.jdbc.exec.JDBCStatementImpl.executeStatement(JDBCStatementImpl.java:130)... 12 more

报错信息大概意思是说这个表TBLSIS_REWRITE_ENABLED列不存在,把这个字段注释掉就能正常运行了。但是这个问题没法解决呀,因为hive元数据库里的表都是hive自动生成的,最好别改。

4 解决问题

既然更换hive客户端那就重新建一个元数据库吧,名字可以自己起,那就叫metastore2吧,在hive解压后的conf文件夹下的hive-site.xml中修改javax.jdo.option.ConnectionURLhive.metastore.warehouse.dir即可。下面是我的配置信息仅供参考:

<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration><property><name>javax.jdo.option.ConnectionURL</name><value>jdbc:mysql://cts111:3306/metastore2?createDatabaseIfNotExist=true&amp;useSSL=false</value><description>JDBC connect string for a JDBC metastore</description></property><property><name>javax.jdo.option.ConnectionDriverName</name><value>com.mysql.jdbc.Driver</value><description>Driver class name for a JDBC metastore</description></property><property><name>javax.jdo.option.ConnectionUserName</name><value>root</value><description>username to use against metastore database</description></property><property><name>javax.jdo.option.ConnectionPassword</name><value>mysql123</value><description>password to use against metastore database</description></property><!-- hue配置 --><property><name>hive.server2.thrift.port</name><value>10000</value><description>TCP 的监听端口</description></property><property><name>hive.server2.thrift.bind.host</name><value>192.168.1.111</value><description>TCP绑定的主机</description></property><property><name>hive.server2.long.polling.timeout</name><value>5000</value><description>HiveServer2在响应使用长轮询的异步调用之前等待的时间(毫秒)</description></property><!-- 如果使用了下面这个配置得先启动metastore,否则hiveserver2会报错跑不起来 --><property><name>hive.metastore.uris</name><value>thrift://192.168.1.111:9083</value><description>指向的是运行metastore服务的主机</description></property><property><name>hive.metastore.warehouse.dir</name><value>/user/hive/warehouse2</value></property><property><name>hive.cli.print.current.db</name><value>true</value><description>Whether to include the    current database in the Hive prompt.</description></property><property><name>hive.cli.print.header</name><value>true</value><description>Whether to print the names of the columns in query output.</description></property><!-- 关闭元数据检查 --><property><name>hive.metastore.schema.verification</name><value>false</value></property><!-- tez --><property><name>hive.execution.engine</name><value>tez</value></property><!-- 解决hive配置tez后查询一直pending的问题 默认是-1 --><property><name>hive.tez.cpu.vcores</name><value>1</value><description>https://cwiki.apache.org/confluence/display/Hive/Configuration+Properties</description></property><!-- 为了tez稳定运行的可选设置 --><property><name>hive.tez.container.size</name><value>1024</value></property><property><name>hive.prewarm.enabled</name><value>true</value></property><!--配置hive默认的提交队列,在capacity-scheduler.xml中设置了--><property><name>mapreduce.job.queuename</name><value>hive</value></property><!--配置tez默认的提交队列,在capacity-scheduler.xml中设置了--><property><name>tez.queue.name</name><value>hive</value></property></configuration>

hive-site.xml的配置文件一定要根据自己的实际情况做剪裁,自己的环境跟别人的可能不一样,如果是刚安装hive测试运行只要配置前四个基本的四大件就好。

5 参考文章

1)hive 问题总结

hiveserver2查询操作报错Error while compiling statement等相关推荐

  1. 每日分享 hive hue 报错Error while compiling statement: FAILED: SemanticException Error in parsing

    报错原因 SemanticException Error in parsing 翻译过来大意就是 解析中的 SemanticException(语义异常) 错误 解决办法 应该修改成 a.dcbh 而 ...

  2. mysql 42000 1064_mysql主从复制或其他操作报错ERROR 1064 (42000): You have an er

    实验环境介绍: 在进行mysql主从复制配置从服务器时,系统报错 mysql> change master to master_host='192.168.109.149',master_use ...

  3. Vuejs报错error: Unexpected console statement (no-console) at src\... 解决办法

    1. 转载于:https://www.cnblogs.com/Tobenew/p/10908093.html

  4. 数据库查询报错Error Code 1064

    数据库查询报错Error Code 1064 原因是sql语句书写错误,里面的 '' 符号并不是单引号,而是键盘上的波浪号. 错误代码: SELECT * FROM 'test'.'user'; 正确 ...

  5. hive sql报错:SQL 错误 [10004] [42000]: Error while compiling statement: FAILED: SemanticException [Error

    SQL 错误 [10004] [42000]: Error while compiling statement: FAILED: SemanticException [Error 10004]: Li ...

  6. mysql报错ERROR 1206 (HY000): The total number of locks exceeds the lock table size的解决方法...

    1. 问题背景         InnoDB是新版MySQL(v5.5及以后)默认的存储引擎,之前版本的默认引擎为MyISAM,因此,低于5.5版本的mysql配置文件.my.cnf中,关于InnoD ...

  7. wince6.0 编译报错:error C2220: warning treated as error - no 'object' file generated的解决办法

    内容提要:wince6.0编译报错:"error C2220: warning treated as error - no 'object' file generated" 原因是 ...

  8. wince6.0 编译报错:error C2220: warning treated as error - no 'object' file generated的解决办法...

    内容提要:wince6.0编译报错:"error C2220: warning treated as error - no 'object' file generated" 原因是 ...

  9. Redis 2.8.18 安装报错 error: jemalloc/jemalloc.h: No s

    2019独角兽企业重金招聘Python工程师标准>>> 本文为大家讲解的是Redis 2.8.18 安装报错 error: jemalloc/jemalloc.h: No such ...

最新文章

  1. 2022-2028年中国廉价航空行业深度调研及投资前景预测报告
  2. Missing number
  3. 宁波计算机软考培训机构,浙江宁波2019年下半年软考通过率约为25.7%
  4. 【Qt】数据库实战(一)
  5. 2.struts1.x中的异常处理
  6. 监控系统的多协议直播(RTSP RTMP HTTP Live Streaming)
  7. 如何完成一次Apache的版本发布
  8. BugkuCTF-Crypto题简单加密
  9. gbox推荐源_分享一批自己用的软件源 gbox软件源
  10. 目瞪口呆,4款1M不到的实用软件,颠覆你的认知
  11. 9.14-hspice使用方法
  12. 缓存框架 EhCache 使用 2
  13. Python实时垃圾分类系统(环境教程&完整源码&数据集)
  14. 十大热门编程语言:不死 Java、不朽 C/C ++、新贵 Python
  15. Unity GUI 中文显示
  16. 论文页码不连续?经常改不对?教你一招立马解决
  17. TCP——粘包/拆包
  18. Word中下划线自动换行版式不…
  19. 服务器硬盘 frn bad,【服务器问题】浪潮inspur服务器个别硬盘亮红灯且发出1长的滴滴声响...
  20. 谁说Source Insight只能看C盘的文件?我有妙招!

热门文章

  1. CSS垂直及水平居中小技巧
  2. 小米股价腰斩,雷军那么拼,资本市场为何不认可?
  3. 直播|详解企业运营年度规划
  4. 时间序列预测01:如何将时间序列预测转化为监督学习问题
  5. 揭开机器学习的神秘面纱
  6. 【UG474】可配置逻辑块(configurable logic block,CLB)资源学习
  7. 任正非为什么如此重视基础科学?
  8. win32API函数
  9. Environment.getExternalStorageDirectory()过时
  10. MySQL数据库之数据查询