人群任务处理流程

目的###

  • 产出定制条件的总数量
  • 产出当前条件的人在其他标签维度的分布情况
  • 产出满足当前条件的人,并添加标记

创建任务###

  • 创建原子任务
  • 原子任务间进行逻辑交并补
  • 存储进任务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可以产出报告
原文地址:https://www.cnblogs.com/isenhome/p/5140192.html