我想创建内部漏斗分析基础设施。所有用户活动提要信息都将被写入所选的数据库/dw,然后,当我动态定义一个漏斗时,我希望能够为漏斗中的每个阶段选择会话数。我在任何地方都找不到制造这种东西的例子。有人说我应该使用hadoop和mapreduce来实现这个,但是我在网上找不到任何例子。
fnatzsnv1#
mapreduce非常简单:Map器读取日志文件中会话的行,其输出为(stag id,1)将减速器的数量设置为等于级数。减速器对每个阶段的值求和。例如wordcount示例(这是hadoop的“hello world”—https://hadoop.apache.org/docs/r1.2.1/mapred_tutorial.html#example%3a+wordcount+v1.0)。您必须设置一个hadoop集群(或者在amazon上使用elasticmapreduce)。要动态定义漏斗,可以使用hadoop的distributedcache特性。要查看结果,您必须等待mapreduce完成(最短几十秒;或者在亚马逊的弹性mapreduce中是几分钟;时间取决于数据量和集群的大小)。另一个可以让你更快得到结果的解决方案是使用数据库:从mylogs中选择count(distinct session\u id)group by stage;如果您有太多的数据,无法快速执行该查询(它会进行全表扫描;hdd传输速率约为50-150mb/秒-数学很简单)-然后可以使用运行在hdfs(hadoop的分布式文件系统)上的分布式分析数据库。在这种情况下,您的选项是(我在这里只列出了开源项目):ApacheHive(基于hadoop的mapreduce,但是如果您将数据转换为hive的orc格式,您将更快地得到结果)。cloudera的 Impala -不基于mapreduce,可以在几秒钟内返回结果。为了获得最快的结果,请将数据转换为Parquet格式。shark/spark内存分布式数据库。
1条答案
按热度按时间fnatzsnv1#
mapreduce非常简单:
Map器读取日志文件中会话的行,其输出为(stag id,1)
将减速器的数量设置为等于级数。
减速器对每个阶段的值求和。例如wordcount示例(这是hadoop的“hello world”—https://hadoop.apache.org/docs/r1.2.1/mapred_tutorial.html#example%3a+wordcount+v1.0)。
您必须设置一个hadoop集群(或者在amazon上使用elasticmapreduce)。
要动态定义漏斗,可以使用hadoop的distributedcache特性。要查看结果,您必须等待mapreduce完成(最短几十秒;或者在亚马逊的弹性mapreduce中是几分钟;时间取决于数据量和集群的大小)。
另一个可以让你更快得到结果的解决方案是使用数据库:从mylogs中选择count(distinct session\u id)group by stage;
如果您有太多的数据,无法快速执行该查询(它会进行全表扫描;hdd传输速率约为50-150mb/秒-数学很简单)-然后可以使用运行在hdfs(hadoop的分布式文件系统)上的分布式分析数据库。
在这种情况下,您的选项是(我在这里只列出了开源项目):
ApacheHive(基于hadoop的mapreduce,但是如果您将数据转换为hive的orc格式,您将更快地得到结果)。
cloudera的 Impala -不基于mapreduce,可以在几秒钟内返回结果。为了获得最快的结果,请将数据转换为Parquet格式。
shark/spark内存分布式数据库。