跨多个客户端计算机解析单个大型文本文件的最简单方法?

我被赋予了编写一个webapp的任务,该webapp在给定单个正则表达式的情况下分析文本文件。我给出的文本文件范围从500MB到3GB不等。我目前正在使用Perl作为我的解析引擎。我一直在阅读有关mapReduce和Hadoop的内容,但看起来设置只是非常非常大量的数据,比我解析的数量大得多。 有什么好办法可以解决这个问题?现在,一个500MB的文件需要4到6分钟才能解析,这不算太糟糕,但3GB文件需要永远,并且Web服务器通常会超时,然后才能从Perl脚本输出并生成报告。     
已邀请:
让我们将您的文件分成100个块,并使用
seek
让任意进程在文件的任意部分上工作。
my $chunk = $ARGV[0];      # a user input, from 0 to 99
my $size = -s $THE_FILE;
my $startByte = int($chunk * $size / 100);
my $endByte = int(($chunk + 1) * $size) / 100);

open my $fh, '<', $THE_FILE;
seek $fh, 0, $startByte;
scalar <$fh>;      # skip current line in case we have seek'd to the middle of a line

while (<$fh>) {
    # ... process this section of the file ...
    last if tell($fh) >= $endByte;
}
现在在你可用的任何机器上运行这个程序100次,将参数0到99传递给每个程序。     
实际上hadoop非常容易安装和使用(特别是如果你没有大量数据而且不需要优化它)。我有一段相似的任务(处理约5GB范围内的日志),我花了不少于几个小时在5台机器上安装它,只需使用他们网站上的教程和文档。然后编程非常简单,只需从STDIN读取并写入STDOUT即可! 可能制作你自己的分割和分发脚本(即使你在像Gearman这样的东西之上)也不仅仅需要安装hadoop。     

要回复问题请先登录注册