kylin cube压力测试
100万数据 7 个字段 有维度 测试时间 28分钟,占用空间200M
100万数据 8 个字段 有维度 测试时间 32分钟,占用空间350M
100万数据 9 个字段 有维度 测试时间 39分钟,占用空间560M
100万数据 10个字段 有维度 测试时间 80分钟,占用空间2.73GB
100万数据 11 个字段 有维度 聚合组(9+9) 测试时间 80分钟,占用空间2.1G
100万数据 11 个字段 有维度 测试时间 150分钟,占用空间5G
100万数据 12 个字段 有维度 测试时间 285分钟,占用空间13G
100万数据 13 个字段 有维度 聚合组(11+10) 测试时间 118分钟,占用空间5.33G
100万数据 13 个字段 没有维度 测试时间 6个小时,占用空间21G
100万数据 14 个字段 没有维度 测试在维度自由组合时内存溢出
200万数据 7 个字段 测试时间 17分钟,占用空间200M 没有加上维度表字段 使用资源
当时正在用跑其他的mr,占用资源
200万数据 8 个字段 测试时间 23分钟,占用空间400M没有加上维度表字段
200万数据 8 个字段 测试时间 23分钟,占用空间400M 加上维度表字
200万数据 9 个字段 测试时间 37分钟,占用空间800M 加上维度表字段
800万数据 7 个字段 测试时间 27分钟,占用空间200M 加上维度表字段
3200万数据 7 个字段 测试时间 20分钟,占用空间200M
3200万数据 11个字段 测试时间 120 分钟 占用空间 4.3G 使用资源
3200万,1600万,800万数据 12 个字段在第三步 资源占用多
计算每一个出现事实表中维度和度量的distinct值以列命名写入文件(维度列的distinct值不能太大即维度表中的distinct值不能太大 会造成OOM,唯一id值太大)
Mapreduce 被kill掉
1:不同聚合组进行比较
不同聚合组进行查询, 查询不同字(相同字段数下)
查询时间是5.22m
不同聚合组需要考虑 维表中数据的基数,基数越大用时越长,需要临时计算
不分聚合组进行比较
相同条件下查询0.4s
2
添加维度信息和不添加维度信息是没有区别:build时间相同,占用空间相同,资源占用相同,维度组合也相同: 只对事实表中normal进行计算
3
不同数据量和相同字段build时间
100万数据和200万,800万数据 build时间是相同的 17分钟
3200万 build时间 20分钟
维度组合是相同的
总结:不同数据量build时间是由跑MapReduce的时间决定的,跑mr的时间在相对数据量,几百万到千万级别时间不会很大,
为什么相同的维度不同数据时间会一样?
想法:因为是相同的维度,组合的次数是相同的 例如 7个字段 计算2的7次方,生层7层cuboid文件,每层文件进行计算也是用的mr,build的流程中计算每一层的cuboid是相同的所以时间会相同
4字段阈值:
通过测试发现 3000万数据12 个字段是阈值,基于本身数据,在12个字段时就会发生就会发生OOM,原因在上边已解释,在此情况下就需要优化。
build 流程
1 创建kylin的临时表,在hive中创建,并向其中insert overwrite数据
跑的是mr
2 创建事实表的Distinct columns 文件 计算每一个出现事实表中维度和度量的distinct值以列命名写入文件(维度列的distinct值不能太大即维度表中的distinct值不能太大 会造成OOM 不要添加 id就好)
3 构建维度词典 所有维度的成员会加载到内存,如果维度基数太大会OOM
4保存cuboid的统计信息
5 创建htable
6 计算生成cube中所有维度自由组合的数据文件
7 计算每一层Cuboid文件
跑的是mr
8 基于内存构建cube
9 将每层生成的数据 转换成hfile
10 将hfile加载到HBase中
11 更新cube信息
12 清理hive缓存(即在第一步生成的中间表)