AWS EMR 5.33.1环境Hive 2.3.7执行show tables抛出MetaException异常
AWS EMR 5.33.1环境下Hive执行show tables报错问题说明
环境信息
- 集群版本:AWS EMR 5.33.1
- 组件版本:Hive 2.3.7
问题现象
- 数据库创建流程正常,执行
show databases;可正常返回已创建的库列表 - 表创建流程无任何异常抛出,执行
describe <table>;可正确返回目标表的表结构信息 - 执行
show tables;或show tables in <schema>;时均返回如下报错:
FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask.MetaException(message:Got exception: org.apache.hadoop.hive.metastore.api.MetaException Exception thrown when executing query : SELECT A0.TBL_NAME,A0.TBL_NAME AS NUCORDER0 FROM TBLS A0 LEFT OUTER JOIN DBS B0 ON A0.DB_ID = B0.DB_ID WHERE B0.`NAME` = ? AND LOWER(A0.TBL_NAME) LIKE '_%' ESCAPE '\' ORDER BY NUCORDER0)
问题根本原因
该问题是Hive 2.3.7版本与高版本MySQL元数据库的转义逻辑不兼容导致的:
报错SQL中LIKE '_%' ESCAPE '\'的反斜杠转义符,在MySQL 8.0版本中需要二次转义才能被正确识别,而Hive 2.3.7版本生成元数据查询SQL时未适配该转义规则,导致SQL执行语法错误。EMR 5.33.1版本默认搭载的元数据库或Hive内核未包含该场景的兼容修复,因此会触发该问题。
解决方案
将EMR集群版本升级至emr-6.4.0及以上版本即可解决该问题,该版本的EMR搭载的Hive内核已修复转义符生成逻辑,可兼容高版本MySQL的转义规则。
内容的提问来源于stack exchange,提问作者Taipan
相关产品推荐
相关产品推荐

