创建模型问题
问题描述:
直接机器IP创建模型正常,切换域名后失败
问题原因:
使用kylin api场景模型,前一步需要loadtable,但因为用的是域名,loadtable和createmodel两步被Nginx发到了不同的机器上,在极短暂的时间内,多台机器的元数据信息不同步,导致在A机器上load的表在B机器上看不到从而导致建模失败,信息为Root fact table does not exist:xxx
解决方案:
1、loadtable后sleep 一段时间,等元数据同步
但随着网络问题,可能还是无法报错最终一致性
2、在同一台机器上进行创建
强制维问题
网上一直说强制维是查询group by后必带的维度,此观点是存在问题的,强制维,层级维等都是为了减少cuboid的,如果你的查询中有某个必带的维度(不一定是在group by中),比如日期的过滤,那么你就可以将此维度设置为强制维来减少cuboid,从而使得查询性能最好(占用资源小,查询快)
cube的planner
kylin的cubeplanner只能帮助(理论上)用户尽量减少cuboid的组合,使得能够尽量聚合或者上卷的cuboid删除,但在真实的业务中,可能就存在某些cuboid不应该被planner掉的,笔者就在生产环境中遇到了这种问题:为了使用尽可能小的存储,执行了多次cubeplanner,导致部分大查询(查询跨度为一年,原始数据为1000w+/天)失败,错误信息为:coprocessor timeout after scanning
最好的cubePlanner应该在系统稳定执行3-6个月后再进行(但可能因为数据量过大而导致优化失败)
系统cube问题
问题1:无法创建分区
笔者使用的是kylin3.1.1版本,使用官方命令生成系统cueb已经各种表,但在实际中会发现,查询相关的cube(KYLIN_HIVE_METRICS_QUERY_RPC_QAKYLIN_HIVE_METRICS_QUERY_CUBE_QA,KYLIN_HIVE_METRICS_QUERY_RPC_QA,KYLIN_HIVE_METRICS_QUERY_QA)可能存在分区信息创建失败而导致整个线程假死的情况,
解决方案:
需要用户手动创建分区
问题2:dashboard无法展示查询命中cube情况
基于系统cube,开启dashboard,但仍旧无法先看cube的命中率(或者在planner中也无法看到),此问题是因为以上cube中缺少project维度信息,导致在查询的时候无法找到对应的project查询为空
解决方案:
重新设计cube,增加project维度
查询问题
问题1:IN和范围查询
描述:IN的查询会出现coprocessor timeout after scanning错误,但是范围查询不会
原因:IN的查询不会将查询条件下推到HBase中,范围查询会,因此导致IN扫描的数据量较大而超时
解决方案:
增加hbase查询时间或者改为范围查找