使用Hadoop MapReduce按月和IP对日志条目进行分组

时间:2013-01-15 01:42:41

标签: hadoop mapreduce

我是Apache Hadoop的新手。但我想学习如何使用它来总结我的机器日志。实际上它不够大(GB)我可以解析它并等待,比如几个小时。但我认为学习Hadoop可能会有用。

所以,我有一个日志条目,格式如下。

Location, Date, IP Address

e.g。

New York, 2011-11-31 10:50:59, 1.1.1.1
New York, 2011-11-31 10:51:01, 1.1.1.2
Chicago, 2011-11-31 10:52:02, 1.1.1.1
Los Angeles, 2011-11-31 10:53:04, 1.1.1.4

我希望按位置汇总,按月分组,然后按IP地址汇总。以下是我的想法。

  Location, Month, IP,   Count
+ New York
|   +-- November 2011
|   |     +---- 1.1.1.1    5
|   |     +---- 1.1.1.2    2
|   |     +---- 1.1.1.3    7
|   +-- December 2011
|   |     +---- 1.1.1.1    6
|   |     +---- 1.1.1.4    6
|   +-- January 2012
|         +---- 1.1.1.1   10 
+ Chicago 
|   +-- November 2011
|   |     +---- 1.1.1.1   20
|   |     +---- 1.1.1.2    1
|   |     +---- 1.1.1.3   10
(so on)

我的问题是:

  1. 我可以使用Hadoop执行此操作还是有更好的方法来执行此操作?
  2. 使用Hadoop执行此操作的常用方法是什么?
  3. 感谢您提供指向链接或文章或示例代码的指针。

1 个答案:

答案 0 :(得分:1)

can I do this using Hadoop or is there a better way to do it?

你绝对可以使用Hadoop,如果你只有几个Gbs可能没那么必要,但是你用Hadoop做的就是你能够轻松地扩展,让我们说明天你必须在500Gb上做同样的事情,你可能没有任何改变你的代码,只有硬件和配置。

what is the common way to do this using Hadoop?

我不认为有一种“常用方式”可以这么说,Hadoop是一个封装多个项目的框架,你可以在Map / Reduce,Hive,Pig中做到这一点......

我认为你的用例非常适合使用Hive,因为你想做聚合并且有一个可以很容易地进入表的结构,如果你是Hadoop的新手,你可以熟悉SQL,所以这里有一些提示。

  1. 将这些日志上传到HDFS。无论您希望如何处理,这都是首要任务,HDFS是一个分布式文件系统,因此您的日志将在整个群集中按块分割并复制。

    hadoop fs -put /path/to/your/log/directory /user/hive/warehouse/logs
    
  2. 在Hive中创建一个表。您必须将其设置在将日志放入HDFS的位置外部(并指定文件中的分隔符):

    hive -e "create external table logs(location string, day string, ip string) row format delimited fields terminated by ',' location /user/hive/warehouse/logs"
    
  3. 现在您可以对数据进行一些查询!在您的示例中,您应该执行以下操作:

    hive -e "select location, month(day), ip, count(*) from logs group by location, month(day), ip order by location, month, ip"
    

    请注意,我当天正在呼叫MONTH(),以便聚合当天的部分时间,这就是Hive所谓的UDF

  4. 即使您正在编写SQL查询,这将生成将在您的群集上运行的Map / Reduce作业,因此您的作业将根据群集的大小进行扩展。

    我希望这是有道理的,如果您想了解有关Hive的更多详细信息,我想将您重定向到the Hive DDL description以及the official project page