【问题标题】:hadoop suggestions on how to process logshadoop 关于如何处理日志的建议
【发布时间】:2013-12-04 11:21:27
【问题描述】:

我需要一些关于如何在 Java 中使用 hadoop 而不是 Pig 来处理基础架构日志的建议,因为我认为 Pig 在读取日志文件时不支持正则表达式过滤器。

例如,我有 cisco 日志和 Web 服务器日志,我想按行过滤特定值并输入 hadoop。

网上有一些建议,即先将其更改为 csv 格式,但如果日志文件以 GB 为单位呢???

是否可以在“映射”阶段过滤行,即程序将从 HDFS 中的文件中读取行并将其发送到映射器...

我需要一些关于最佳方式和干净方式的建议......

谢谢。

【问题讨论】:

  • 你好像在linux上,为什么不用grep, sed, ...?
  • 我知道这些,但是日志非常庞大,我想创建一些统计信息,我已经尝试使用 pig 按 IP 过滤 Web 服务器日志,但是使用正则表达式达到了限制.. .so 我希望直接在 Java 中使用 hadoop。
  • 所以你认为 java 比grep 更高效?祝你好运。
  • @krisdigitx,为什么 Java 会比 grep 快?使用 grep 您可能只受到磁盘读取速度的限制。在这种情况下,Java 将无法帮助您。
  • @krisdigitx 由于 MapReduce 算法提供的固有并行性,Hadoop 通常处理事物的速度更快。但是,如果您在进入地图阶段之前进行过滤,我认为不会有太多的并行性。我能想到的唯一方法可能是制作自定义输入格式,尽管这只有在输入格式并行运行时才有帮助(这不是我确定的)。如果他们这样做,那是您最好的选择,如果它绝对必须在映射器之前完成。但是我个人建议只将过滤器移动到映射器。

标签: java regex linux apache-pig


【解决方案1】:

我们可以在PIG 上做REGEX operations。 PIG 内部仅使用JAVA REGEX specifications

请看下面的例子:

myfile = LOAD '999999-99999-2007' AS (a:chararray);

filterfile = FILTER myfile BY a MATCHES '.*DAY+.*';

selectfile = FOREACH filterfile GENERATE a, SIZE(a) AS size;

STORE selectfile INTO '/home/jagadish/selectfile';

示例中使用的文件大小为 2.7 GB,包含 1100 万行。其中正则表达式输出为 450,000 行。

我相信这回答了你的问题,否则请告诉我。

【讨论】:

  • 我更喜欢使用 Java API 而不是 pig,因为它是更好的正则表达式过滤器并允许更多控制..
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-25
  • 2012-01-18
  • 2013-08-14
相关资源
最近更新 更多