如何创建内部漏斗分析?

时间:2014-01-31 09:42:26

标签: sql database-design hadoop data-warehouse business-intelligence

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

我无法找到在任何地方创建这样的东西的例子。有人说我应该使用Hadoop和MapReduce,但我在网上找不到任何例子。

1 个答案:

答案 0 :(得分:1)

你的MapReduce非常简单:

Mapper在日志文件中读取会话的行,其输出为(stag-id,1)

将Reducers的数量设置为等于阶段数。

Reducer汇总每个阶段的值。就像在wordcount示例中一样(这是" Hello World"对于Hadoop - https://hadoop.apache.org/docs/r1.2.1/mapred_tutorial.html#Example%3A+WordCount+v1.0)。

您必须设置Hadoop集群(或在Amazon上使用Elastic Map Reduce)。

要动态定义渠道,您可以使用Hadoop的DistributedCache功能。要查看结果,您必须等待MapReduce完成(最少几十秒;或者在Amazon的Elastic MapReduce情况下为几分钟;时间取决于数据量和群集大小)。

可以更快地为您提供结果的另一种解决方案 - 使用数据库:从mylogs逐级选择count(distinct session_id);

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

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

Apache Hive(基于Hadoop的MapReduce,但如果您将数据转换为Hive的ORC格式 - 您将获得更快的结果)。

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

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