Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/57.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用hadoop mapreduce查找登录持续时间_Hadoop - Fatal编程技术网

如何使用hadoop mapreduce查找登录持续时间

如何使用hadoop mapreduce查找登录持续时间,hadoop,Hadoop,我是hadoop新手,最近熟悉了MapReduce技术。这是令人印象深刻的,但我是一个绝对的初学者,以锻炼一个mapreduce问题的解决方案。任何方向正确的帮助都将不胜感激。我有逻辑方法,但不知道如何用hadoop映射它 问题描述:我必须找到组织中每台服务器的登录持续时间。 投入: 有两个选项卡分隔的值文件作为输入提供,其结构如下: File1: UserName Timestamp serverid CMXO001 02-Jan-2014 12:00:

我是hadoop新手,最近熟悉了MapReduce技术。这是令人印象深刻的,但我是一个绝对的初学者,以锻炼一个mapreduce问题的解决方案。任何方向正确的帮助都将不胜感激。我有逻辑方法,但不知道如何用hadoop映射它

问题描述:我必须找到组织中每台服务器的登录持续时间。 投入: 有两个选项卡分隔的值文件作为输入提供,其结构如下:

File1:
UserName Timestamp                    serverid
CMXO001  02-Jan-2014 12:00:00.234567  HP0012XP023
CMXO001  02-Jan-2014 12:10:20.234567  HP0012XP023
上面的文件包含一个登录和相应的注销记录,该记录在输入文件中可以是任意顺序

File2:
ServerId    ServerName
HP0012XP023 HP XP Server London
我们必须编写hadoop mapreduce作业来执行以下操作:

1:查找每天为每个服务器执行的登录[不需要服务器名称] 预期产出: 日期服务器登录帐户 91-01-2014 HP0012XP023 1

2:找出每个服务器的整个数据集中每个用户的总登录时间[总连接时间]

expected output:
Date      ServerName          User    Durationfor that day
10/01/14  HP XP Server London CMXO001 10:20
3:查找每个月至少连接5次登录会话超过1小时的用户

Expected output:
Username Times
CMXO001  12

以下是3项任务的解决方案:

  • 您的映射程序处理文件1。在每个输入记录(行)上,Map函数从时间戳中提取日期,并将其与服务器连接以获取输出密钥。输出值为1,因此映射器的输出为(day serverId,1)。减缩器只是对每天的serverId的值进行汇总——与Wordcount示例中的情况完全相同(这是Hadoop的“Hello World”)

  • 您的映射程序处理文件1。在每个输入记录(行)上映射函数问题:key=UserName-Date-ServerId,value=Time。减缩器接收每个键的两个时间值,计算持续时间,并发出预期输出。 还原程序如何将ServerId转换为服务器名称?您必须使用Hadoop的DistributedCache特性将文件2发送到还原程序。还原程序将在设置函数中读取此文件,并将映射保存在内存中

  • 这里使用两个MapReduce作业链。首先,计算每个用户每天的登录持续时间,就像在任务“2”中一样。输出将作为第二个MapReduce作业的输入。在第二个作业中,映射程序将发出如下输出:key=userId,value=1-但仅针对持续时间>1h的输入记录。映射程序不会为其他记录发出任何输出。还原器将进行与任务“1”中完全相同的数值汇总


  • 这听起来是一个非常好的方法。我将尝试一下并提供反馈。谢谢你的帮助,埃夫根尼,你已经指出了正确的方向。在使用分布式缓存和其他功能时出现了一些小问题,但它并没有停止使用。与分布式缓存相关的功能已被弃用,并且在这方面没有太多帮助,或者可能是我的新功能:)分布式缓存是Hadoop MapReduce最有用的功能之一。我猜您已经看过旧hadoop API中的org.apache.hadoop.filecache.DistributedCache。我建议您阅读Tom White的Hadoop权威指南(第三版!)中有关分布式缓存的内容。