我对apachehadoop真的很陌生。但是我想学习如何用它来总结我的机器日志。实际上它还不够大(gbs),我可以解析它然后等上几个小时。但我认为学习hadoop可能会有用。
所以,我有一个如下格式的日志条目。
Location, Date, IP Address
例如
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)
我的问题是:
我可以用hadoop做这个吗?或者有更好的方法吗?
使用hadoop的常见方法是什么?
感谢您提供指向链接、文章或示例代码的指针。
1条答案
按热度按时间vuktfyat1#
你当然可以用hadoop来实现这个,如果你只有几个gbs的话,这可能不是必需的,但是你用hadoop来实现这一点的好处是你可以很容易地扩展,比如说明天你必须在500gb上做同样的事情,你可能在你的代码中没有什么可以改变的,只有硬件和配置。
我不认为有一个“共同的方式”可以这么说,hadoop是一个框架封装多个项目,你可以在map/reduce,hive,pig。。。
我认为您的用例非常适合使用hive来完成这项工作,因为您希望进行聚合,并且有一个可以轻松地将其转换为表的结构,如果您是hadoop新手,您可以熟悉sql,因此这里有一些提示。
将这些日志上载到hdfs。无论您想如何处理,这都是第一步,hdfs是一个分布式文件系统,因此您的日志将在集群中分块进行复制。
在配置单元中创建表。您必须将其设置在hdfs中日志的外部位置(并指定文件中的分隔符):
现在你可以对你的数据做一些查询了!在您的示例中,您应该执行以下操作:
注意我在打电话
MONTH()
在一天中额外的月份部分进行聚合,这就是hive所说的UDF
s。即使您正在编写sql查询,这也会生成将在集群上运行的under-the-hood map/reduce作业,因此您的作业将根据集群的大小进行缩放。
我希望这是有意义的,如果你想要更多关于hive的细节,我想把你重定向到hiveddl描述以及正式的项目页面。