Ambari Hive 无法正常查询的解决(3)

mysql> use hive
mysql> show tables;
+---------------------------+
| Tables_in_hivemeta        |
+---------------------------+
| BUCKETING_COLS            |
| CDS                      |
| COLUMNS_V2                |
| COMPACTION_QUEUE          |
| COMPLETED_TXN_COMPONENTS  |
| DATABASE_PARAMS          |
| DBS                      |
| DB_PRIVS                  |
| DELEGATION_TOKENS        |

9. 问题来了,表不存在。为什么不存在呢?其实我已经知道问题了。Mysql表名大小写敏感问题。

mysql>select count(*) from `DBS`;
ERROR 1146 (42S02): Table 'hivemeta.DBS' doesn't exist

10. 由于很多Oracle数据库的表名是大小写不敏感的。但是Mysql却是表名大小写敏感的。所以,很多开发人员,都喜欢将mysql设置为表名大小写不敏感。
而show tables之后,我就怀疑这个可能了。

11. 经过检查/etc/my.cnf,确实已经设置lower_case_table_names=1

12. Hive库创建的时候,mysql是大小写敏感的。所以,表名都是大写的。而后期,有人修改了mysql参数,取消大小写敏感。这样,问题就来了。Mysql并不是完全不敏感,而是在设置参数lower_case_table_names=1  之后,创建和查询的sql语句中的表名,默认修改为小写的。而已经创建的表名,还是大写的显示。但是你无论用大写表名,还是小写表名,都无法正确查询到了。

13. 这个问题出现的场景:
只有是在hive库创建完成之后,又修改/etc/my.cnf,添加参数lower_case_table_names=1导致的。

14. 问题找到之后,有两个解决方案:
a. 取消参数lower_case_table_names=1
b. 如果mysql的hive库中没有什么数据,删除hive库表,重新创建hive meta表,直接就创建出小写的表名了。
输出就是小写的了:

mysql> show tables;
+---------------------------+
| Tables_in_hive_beta      |
+---------------------------+
| bucketing_cols            |
| cds                      |
| columns_v2                |
| compaction_queue          |
| completed_txn_components  |
| database_params          |
| db_privs                  |
| dbs                      |
| delegation_tokens        |
| func_ru                  |

15. 我最后选择取消参数lower_case_table_names=1,并重启mysql。查询正常了。

mysql> select count(*) from `DBS`;
+----------+
| count(*) |
+----------+
|        2 |

16. Ambari启动hive metastore也成功了。
问题解决,一切恢复正常

$ beeline -u "jdbc:hive2://hostname.domain.cn:10000/default;principal=hive/_HOST@domain.com;"
Connecting to jdbc:hive2://hostname.domain.cn:10000/default;principal=hive/_HOST@domain.com;
Connected to: Apache Hive (version release-1.2.1-EDH-1.1.2)
Driver: Hive JDBC (version release-1.2.1-EDH-1.1.2)
Transaction isolation: TRANSACTION_REPEATABLE_READ
Beeline version release-1.2.1-EDH-1.1.2 by Apache Hive
0: jdbc:hive2://hostname.domain.cn:10000> show databases;
+----------------+--+
| database_name  |
+----------------+--+
| default        |
| hbjt          |
+----------------+--+
2 rows selected (1.206 seconds)

最终的原因,就是有人修改的/etc/my.cnf,导致的本次问题。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/4c3268b482d75bf59785473161196634.html