【发布时间】: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