分享

hive+impala+kudu+mysql:Communications link failure

zhuqitian 2017-12-14 11:01:15 发表于 总结型 [显示全部楼层] 回帖奖励 阅读模式 关闭右栏 4 12363
今天出现一个诡异现象,在impala命令行中建表失败:[mw_shl_code=sql,true][apache.test.datanode1:21000] > create table test (id int primary key,name string) partition by hash partitions 8 stored as kudu;
Query: create table test (id int primary key,name string) partition by hash partitions 8 stored as kudu
ERROR: ImpalaRuntimeException: Error making 'createTable' RPC to Hive Metastore:
CAUSED BY: InvalidObjectException: kudu_db: Communications link failure

The last packet successfully received from the server was 1,404,095 milliseconds ago.  The last packet sent successfully to the server was 2 milliseconds ago.[/mw_shl_code]
报错说rpc通信失败,那么可以理解为元数据没有插入到mysql中

mysql显示结果:
[mw_shl_code=sql,true]mysql> select TBL_NAME,NAME from TBLS a inner join DBS b on a.DB_ID= b.DB_ID;
+----------------------------+-----------+
| TBL_NAME                   | NAME      |
+----------------------------+-----------+
| kd_customer                | hive_db   |
| kd_customer_10             | hive_db   |
| kudu_test                  | impala_db |
| kd_customer                | impala_db |
| kd_customer_parquet        | impala_db |
| kd_customer_text           | impala_db |
| kd_customer_withoutpart    | kudu_db   |
| kd_customer_withoutpart_10 | kudu_db   |
| orders                     | kudu_db   |
| test                       | kudu_db   |
+----------------------------+-----------+
10 rows in set (0.00 sec)[/mw_shl_code]

hive命令行查询:
[mw_shl_code=sql,true]hive> show tables;
OK
test
Time taken: 0.057 seconds, Fetched: 1 row(s)[/mw_shl_code]

至此,证明mysql中是已经保存了这份元数据了,但是建表报错通信失败,那么再建一次:
[mw_shl_code=sql,true][apache.test.datanode1:21000] > create table kudu_db.test (id int primary key,name string) partition by hash partitions 8 stored as kudu;
Query: create table kudu_db.test (id int primary key,name string) partition by hash partitions 8 stored as kudu
ERROR: ImpalaRuntimeException: Error making 'createTable' RPC to Hive Metastore:
CAUSED BY: AlreadyExistsException: Table test already exists[/mw_shl_code]

说是test表已经存在,再来删除看看
[mw_shl_code=sql,true][apache.test.datanode1:21000] > drop table kudu_db.test;
Query: drop table kudu_db.test
ERROR: AnalysisException: Table does not exist: kudu_db.test[/mw_shl_code]
删除不成功,说是test表不在kudu_db中。那这奇怪了,两个报错冲突了,原因就在通信建立失败时引起的,
那mysql中已经有了元数据了为何又报错说通信失败呢?
先不跟踪源码,先解决下问题:
mysql中删除test表相关联的元数据:
先删除TABLE_PARAMS表中的数据,如果直接删除TBLS中数据,会报外键约束错误。
再大概介绍下kudu表的元数据在TABLE_PARAMS中长什么样子:
四个字段kudu.master_addresses、kudu.table_name、storage_handler、transient_lastDdlTime(都顾名思义的字段名不解释)
删除后再次在impala命令行中创建就ok了

总结:不算是疑难杂症,也很少会碰到,只是记录下

已有(4)人评论

跳转到指定楼层
王少波 发表于 2019-6-13 11:16:25
你好,我的impala中stored as kudu显示没有kudu类型的表类型,请问这一块需要怎么配置呢,谢谢
回复

使用道具 举报

zhuqitian 发表于 2019-7-24 15:34:12
王少波 发表于 2019-6-13 11:16
你好,我的impala中stored as kudu显示没有kudu类型的表类型,请问这一块需要怎么配置呢,谢谢

不好意思,现在才看到你的留言:
如果你使用cloudera manager搭建的,而且成功的安装kudu了就不会有这个问题

回复

使用道具 举报

Jelly旺 发表于 2019-12-28 13:55:32
如果是impala中stored as kudu显示没有kudu类型的表类型,那这是impala版本过低导致的,要cdh5.12.0或者impala2.9以上
回复

使用道具 举报

zhuqitian 发表于 2020-2-20 20:31:15
Jelly旺 发表于 2019-12-28 13:55
如果是impala中stored as kudu显示没有kudu类型的表类型,那这是impala版本过低导致的,要cdh5.12.0或者imp ...

5.12版本我也没用过,如果你是用的cloudera manager安装的,kudu和impala都有那应该问题不大,如果你是自己测试,你可以尝试更高版本,kudu和impla高版本还是有些改进的,不好意思,好久没来论坛回复的晚了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

推荐上一条 /2 下一条