使用多个线程/核心来提高awk性能

时间:2013-04-09 04:50:36

标签: gawk multiple-processes

我有一个包含~50k文件的目录。每个文件有~70万行。我写了一个awk程序来读取每一行,只有在出现错误时才打印。一切都运行得很好,但所花的时间很长 - 大约4天!!!!有没有办法减少这个时间?我们可以使用多个核心(进程)吗?有没有人试过呢?

1 个答案:

答案 0 :(得分:2)

awkgawk不会自行解决此问题。没有神奇的“让它并行”开关。你需要在某种程度上重写:

  • 文件分片 - 解决此问题的最简单方法是并行运行多个awks,每个文件一个。您需要某种调度机制。 Parallelize Bash script with maximum number of processes显示了如何在shell中自己编写。这需要更多阅读,但如果您需要更多功能,请查看gearmancelery哪些内容可以适应您的问题
  • 更好的硬件 - 听起来你可能需要一个更快的CPU才能让它更快,但它也可能是一个I / O问题。拥有来自munin或其他监控系统的CPU和I / O图表将有助于隔离这种情况下的瓶颈。您是否尝试在基于SSD的系统上运行此作业?这些日子往往很容易获胜。
  • 缓存 - 可能存在一些重复的行或文件。如果有足够的重复,以某种方式缓存处理将是有帮助的。如果计算文件的CRC / md5sum并将其存储在数据库中,则可以计算新文件的md5sum,如果已经这样做,则跳过处理。
  • 完全重写 - 使用awk进行缩放会在某些时候变得荒谬。使用一些map-reduce框架可能是一个好主意。