高性能数据集常见报错
1. Connect to xxx.xx.xxx.xxx:xxxx [/xxx.xx.xxx.xxx] failed: Connection refused
【原因】:加速数据集一般数据量较大,过大的数据量(例如几亿至几十亿)转换可能会超出系统分配给Clickhouse的内存而导致Clickhouse重启,从而导致后续的数据集加速任务在链接Click house时Connection refused。
【解决方法】:联系观远运维同学进服务器提高 Clickhouse配置的内存。
2. ClickHouse exception, code: 241, host: 10.250.156.78, port: 8123; Code: 241, e.displayText() = DB::Exception: Memory limit (for query) exceeded: would use 9.32 GiB (attempt to allocate chunk of 4718592 bytes), maximum: 9.31 GiB (version 20.4.5.36 (official build))
【原因】:数据量过大,超出系统默认的9.31G。
【解决办法】:联系观远运维同学进服务器提高 Clickhouse配置的内存。
3. ClickHouse exception, code: 60, host: 172.16.171.254, port: 8123; Code: 60, e.displayText() = DB::Exception: Table guandata.f957aeedb2dcd4313812bad7_new doesn't exist. (version 20.4.5.36 (official build))
【可能原因】:删除了原临时表,创建了一个新临时表,再将新数据插入该表中。
两个对同一资源的更新任务并发时,可能会出现当前一个任务在进行插入新数据操作时,后一个任务刚好执行到删除原临时表的操作,此时就会报错表不存在。
【解决方法】:需要保证同一资源同时只有一个更新任务。
用户调整数据集或者ETL的更新频率,避免出现两次数据更新相隔时间太近的情况。
4. 高性能数据集如果分区超过100个是不是就不能切换了,若分区参数不选,对数据集的性能会有影响吗?
答:1)普通数据集转换高性能数据集的时候是必须要选择分区的(分区也是构成高性能数据集能够高速查询底层框架)。
2)同时分区太多也会影响查询速度,所以高性能数据集做了100个分区的限制,超过这个限制是不允许切换成高性能数据集的。
5. 把数据集转换为高性能数据集后,为什么关联的ETL都运行失败了?
原因:数据集转换为高性能数据集后,视同为 Clickhouse直连数据集,就不能作为输入数据集参与ETL了。
解决方案:仅建议把最后制作卡片用的大数据量数据集转换为高性能数据集,还要参与ETL处理的数据集不转换。如果数据集同时用于卡片和ETL,建议前一个ETL先输出ETL用的数据集,再多建一个ETL,输出转高性能用的数据集),一个转高性能用于卡片,一个用于ETL。参考下图。