我试图解决的问题似乎微不足道。我收集了大量的事件(实际上它们来自移动应用程序,所以它们是移动事件)。每个事件由几个属性描述:
operating_system create_time version resolution model brand network_type etc.
我将这些事件存储在 hdfs 上,我要解决的问题是允许用户近乎实时地分析这些事件。通过分析,我的意思是能够只选择特定的列、有趣的日期范围,并查看有多少事件来自不同的手机型号。例如,假设我有以下数据集:
os1 2015-07-30 v1 200x200 model1 brand1 provider1
os1 2015-07-30 v1 200x200 model1 brand1 provider1
os1 2015-07-30 v1 200x200 model1 brand1 provider2
os1 2015-07-30 v1 200x200 model1 brand2 provider2
os1 2015-07-29 v1 200x200 model1 brand1 provider1
os2 2015-07-30 v1 200x200 model1 brand1 provider1
os1 2015-06-30 v1 200x200 model1 brand1 provider1
让我们还假设用户想要从 2015 年 7 月开始查找来自不同手机的事件数量。他正在寻找的答案如下所示:
os1 2015-07-30 v1 200x200 model1 brand1 provider1 4
os1 2015-07-30 v1 200x200 model1 brand1 provider2 1
os1 2015-07-30 v1 200x200 model1 brand2 provider2 1
因为事件的数量很大,我试图计算聚合并将它们存储在 cassandra 中。每天计算聚合,在前面的示例数据集中,我的聚合看起来像这样:
os1 2015-06-30 v1 200x200 model1 brand1 provider1 1
os1 2015-07-29 v1 200x200 model1 brand1 provider1 1
os1 2015-07-30 v1 200x200 model1 brand1 provider1 3
os1 2015-07-30 v1 200x200 model1 brand1 provider2 1
os1 2015-07-30 v1 200x200 model1 brand2 provider2 1
问题是它们仍然太多。我仍然需要 spark 来运行按需任务来汇总请求日期范围内的聚合。它很慢,需要大量的网络传输。我阅读了很多关于 HyperLogLog 和其他类似算法的信息,但我不知道如何在这里使用它们。我并不关心确切的结果,估计对我来说非常好。谁能建议我能做什么?