目的###
- 产出定制条件的总数量
- 产出当前条件的人在其他标签维度的分布情况
- 产出满足当前条件的人,并添加标记
创建任务###
- 创建原子任务
- 原子任务间进行逻辑交并补
- 存储进任务DB
执行任务###
- 解析任务
- 周期扫描DB获取任务
- 解析原子任务,将原子任务处理成fel(定制函数表达式),类似hive定制私有函数,函数包含自己的处理逻辑,生成字符串
- 根据创建的任务,将原子任务,进行交并补组合,生成任务解析后的字符串
- 执行任务
- 使用客户端提交fel字符串给计算中心
- 计算中心将任务分发到cluter机器
- 各个机器上启动多线程,分别处理各个机器内存的数据,
- 使用fe,解析fel字符串,反射fel自定义函数,进行cookie的判断,满足条件,将cookie,提交到下一环节,不满足条件则直接抛弃
- 统计满足条件的cookie,在各个维度上的分布,并将cookie输出到一个固定的目录
- 合并各个线程的数据,然后在合并各个cluster数据
- 将结果返回给client
- 结果处理
- 将client获取的结果,分维度存储到mysql报告库中
- 将产出的文件数据写入到kv中
问题###
- 数据存储在java堆中,不便于检查当前数据的准确性,简单的QA无法介入,需要编写程序才可以查看存储的数据是否准确
- 使用fel反射开发,增加开发部署难度,如果增加了原子条件类型,需要编写新的fel进行处理
- 数据维护在java堆中,极其容易崩溃,java内存不稳定,重新恢复极慢
优化方向###
- 修改存储,不适用java堆,使用table化工具,spark的表,phoenix表等
- 降低数据校验难度,可直接使用sql查询当前的数据
- 降低开发难度,直接sql可以产出报告