1

我想创建内部漏斗分析基础结构。 所有用户活动提要信息都将写入选定的数据库/ DW,然后当我动态定义渠道时,我希望能够为渠道中的每个阶段选择会话计数。如何创建内部漏斗分析?

我找不到在任何地方创建这样的事情的例子。有人说我应该使用Hadoop和MapReduce,但是我在网上找不到任何示例。

回答

1

你的MapReduce是非常简单的:

映射器读取日志文件中的会话的行,它的输出是(雄鹿-ID,1)

减速的集数等于级数。

减速机为每个阶段求和的值。就像wordcount示例(这是Hadoop的“Hello World” - https://hadoop.apache.org/docs/r1.2.1/mapred_tutorial.html#Example%3A+WordCount+v1.0)。您将不得不建立Hadoop集群(或在Amazon上使用Elastic Map Reduce)。

要动态定义渠道,您可以使用Hadoop的分布式缓存功能。为了查看结果,您必须等待MapReduce完成(至少几十秒;对于Amazon Elastic MapReduce,则需要几分钟;时间取决于数据量和群集大小)。

另一个解决方案可以为您提供更快的结果 - 使用数据库:select count(distinct session_id)从mylogs逐个阶段;

如果您有太多数据来快速执行该查询(它执行全表扫描; HDD传输速率大约为50-150MB /秒 - 数学很简单) - 那么您可以使用分布式分析数据库运行通过HDFS(Hadoop的分布式文件系统)。

在这种情况下,你的选择是(我列出这里只开源项目):

的Apache蜂巢(基于在Hadoop MapReduce的,但如果你的数据转换成蜂巢的ORC格式 - 你会得到的结果多少更快)。

Cloudera的Impala - 不基于MapReduce,可以在几秒钟内返回结果。为了最快的结果将您的数据转换为Parquet格式。

Shark/Spark - 内存分布式数据库。

+0

谢谢!我是否能够立即定义渠道动态并立即查看结果,或者是否需要硬编码,生病需要等待一段时间,直到结果可用为止? –

+0

我编辑了解决这个问题的答案。 –

+0

谢谢!还有一端松动。每个步骤的总和对我来说都不起作用,因为我也有反向路径的渠道。例如:a-> b-> a(a和b是页面的名称)。在这种情况下,使用总和将不起作用,因为在第三阶段,它将计算第一步的所有浏览量。你有一个想法,我可以解决这个问题吗?再次感谢! –