存储过程中查不到system模式下的表数据(NO_DATA_FOUND)
set ngmr.dd.local.mode.auto=false;
# 系统表实际上是mysql表的视图,默认为local模式应该会更快捷一点。但是应该有地方配置错误,所以需要关闭local模式,但是会牺牲一点查询性能
不能Rename表
set inceptor.torc.allow.rename=true;
# 星环给的解释是:rename表可能会导致丢数据,所以把该功能禁用了,需要手动打开
不能truncate表(truncate 表时报错)
Error: EXECUTION FAILED: Task DDL error HiveException: [Error 40000] Exception while processing (state=08S01,code=40000)
# 这种情况是因为我们从仓库1复制到仓库2时,所有仓库1表的元数据都同步到了仓库2,但是有些表数据并没有同步(比如tmp表,ifc表等),所以表的hdfs路径不存在,在truncate时会报该错误。解决办法就是,随便插入一条数据后再truncate即可。比如:
insert into ifc.table(data_date) values('test');
varchar及varchar2字段类型必须设定字段长度,否则会报该错误
Error: COMPILE FAILED: Semantic error: [Error 20594] Zero-length varchar2 column is not allowed (state=42000,code=20594)
varchar or varchar2 to varchar(8) or varchar2(8)
#加上字段长度就好啦。这个应该是星环加强了某些限制。
动态分区删数据问题
delete from table_t partition(day_code) where day_code = vs_run_date and xx_flag = 1;
- 必须要指定分区字段,也即加上partition(day_code);
- 必须开启参数:set hive.crud.dynamic.partition=true;
动态分区自动增分区问题
insert into table_t partition(day_code) values('1',1,'20210101');
- 必须要指定分区字段,也即加上partition(day_code);
- 必须开启参数:set hive.exec.dynamic.partition=true;
开启kerberos后,用户查表报权限问题
Error: COMPILE FAILED: Internal error HiveAccessControlException: [Error 20388] Permission denied: Principal [name=xxxxx, type=USER] does not have following privileges for operation SHOW_CREATETABLE [[SELECT with grant] on Object [type=TABLE_OR_VIEW, name=xxx.xxxxxxxxx]] (state=42000,code=20388)
这个问题可以先尝试通过管理员账号进行赋权解决。
grant ALL on table xxx.* to user xxx;
如果还不行,说明是kerberos开启的时候,有些权限没有弄好。可以尝试修改inceptor元数据库来解决
1. 登录active namenode
2. 登录mysql
3. 列出databases
mysql> show databases;
+------------------------+
| Database |
+------------------------+
| information_schema |
| metastore_inceptorsql1 |
| mysql |
| test |
+------------------------+
4 rows in set (0.00 sec)
4. 进入元数据库
mysql> use metastore_inceptorsql1;
Database changed
-- 查看inceptor库列表
select db_id,name from DBS;
-- 查看相应表的所有人(owner)
select OWNER
from TBLS
where DB_ID = 'X' --在上个语句查询
and tbl_name = 'Y' --具体表名
-- 如果所有者不对,问题就在这里了,可以更新所有者
update TBLS
set OWNER='xxxxx' --登录inceptor的用户名
DB_ID = 'X'
and tbl_name = 'Y'
-- 也可以直接整库更新
update TBLS set OWNER='xxxxx' where DB_ID in ('X1','X2')
-------------------------2021-05-17更----------------------------
发现有很多tos running with problems
这个问题的背景和现象是:
- 许可证过期,重新认证后,重启inceptor时,最后在这一步【通过TOS启动executor group1】失败。
- inceptor显示为down,但实际可用,executor也都正常。
- inceptor的daemon check显示unknowhost:none --被这个问题现象带到沟里去了
排查步骤:
-
由于服务正常,只不过管理界面显示异常。所以查了nn01节点的health check报错日志,也报了一堆unknowhost exception。跟界面的显示结果一致,好了,根据经验,查/etc/hosts,查/etc/resolv.conf,查hostname,但都没问题。。。还查了防火墙,但都没问题
-
然后在inceptor启动步骤里,分析日志,看到如下信息(其实看了很多次,不知道也没注意这个问题,直到反复排查了第1个问题n次后,才关注到这个日志)。 由此日志,我感觉应该是这一步会在k8s的虚拟dns中注入host信息,所以上面那一步报错其实问题还在这里
tos registry hostname in Service(10,Some(1),INCEPTOR,None,transwarp-6.0.2-final,INSTALLED,inceptor1,Inceptor1,KUBERNETES,true,true,false,false) 's dependencies is xxxxx
generated inceptor-executor1.yaml on [Manager]
- 在8180的tos界面看到很多tos不健康(Running with problems),之前出其他问题跟星环运维沟通过,他们有时候会问tos是否正常。所以我感觉也有可能是这些tos的问题。换思路,先搞定这些tos问题再看inceptor
但是tos日志没找到,最后在星环论坛上找到一篇文章,里面有说修改配置后,重启tos的操作。那我就不修改配置,重启下某个主机的tos,神奇的是这个主机的tos好了,接着把其他有问题的节点都重启,tos都健康后,inceptor自己就好了
# 这个实际不是重启tos,好像重启或重置某些k8s相关的服务
systemctl daemon-reload && systemctl restart kubelet && systemctl restart haproxy
奇怪的知识又增加了。不过也说明自己对当下火热的k8s一窍不通,有时间有机会要去学习下。