ambari安装hive以mysql作为元数据存储建表失败的解决办法

这几天项目上线,需要新安装hive在生产环境上,元数据准备就直接用mysql进行存储,因为行内生产环境肯定不能随随便便就安装一个mysql,所有的数据必须由DBA数据中心进行申请操作,所以我们向DBA提交了建库申请,DBA同事也帮我们建好了hive的元数据存储库,继而我们直接在ambari进行傻瓜式安装hive填上了相应的数据库名,用户名,表名等等,测试连接通过,直接next,但是在最后deploy后,安装hiveserver2节点出现Waring,刚开始因为提示的是警告我们直接忽略了,重启集群后发现hive安装失败。

查看那个警告日志,里面提示“该表状态没有主键”,经过讨论最后找出了问题所在,DBA的数据库因为权限问题所以限制的比较严格,所有表的创建必须有主键,但是很可能hive自动创建的那57张表中可能有没有主键的表,导致mysql创建的表并不全,最后问题出现。

表名:

COMPLETED_TXN_COMPONENTS
NEXT_COMPACTION_QUEUE_ID
NEXT_LOCK_ID
NEXT_TXN_ID
TXN_COMPONENTS
WRITE_SET

我们在测试环境上连上mysql,使用下面语句:

select distinct table_name from columns where  TABLE_SCHEMA = 'hive' and table_name not in (
select distinct table_name from COLUMNS 
where TABLE_SCHEMA = 'hive' and (column_key  = 'PRI' or column_key = 'UNI')
)
查出来有六张表是没有限制主键的,看了它的表结构后,我们大胆的在测试环境上手动给这六张表添加了主键,当时选择添加主键的字段都是形式ID这类的,添加完之后在测试环境上进行了多次测试,发现主键添加后并不影响hive运行。
针对测试环境得出来的结论和与DBA讨论的结果,我们商量出下面一个解决办法,首先在集群本地安装一个没有限制的临时mysql用来安装hive,在几个hive客户端和服务端建立域名映射,修改如下:
10.20.148.20 dbhost

然后直接用hive指向这个mysql进行安装,因为权限是全部放开的,所以hive安装后正常,为了之后迁移方便,这个临时数据库的用户名和表名,端口等等都是与DBA数据库那一端一样的。

alter table COMPLETED_TXN_COMPONENTS add primary key COMPLETED_TXN_COMPONENTS(CTC_TXNID);
alter table NEXT_COMPACTION_QUEUE_ID add primary key NEXT_COMPACTION_QUEUE_ID(NCQ_NEXT);
alter table NEXT_LOCK_ID add primary key NEXT_LOCK_ID(NL_NEXT);
alter table NEXT_TXN_ID add primary key NEXT_TXN_ID(NTXN_NEXT);
alter table TXN_COMPONENTS add primary key TXN_COMPONENTS(TC_TXNID);
alter table WRITE_SET add primary key WRITE_SET(WS_TXNID);
安装完成之后我们手动为没有主键的表添加上了主键,测试也是正常。最终让DBA将这个临时数据库的hive元数据全部迁移到DBA中,重启集群之后,运行正常,问题解决。

猜你喜欢

转载自blog.csdn.net/zhou_shaowei/article/details/78422658
今日推荐