gpt4 book ai didi

linux - 优化从大数据集中提取文本

转载 作者:太空宇宙 更新时间:2023-11-04 05:28:48 24 4
gpt4 key购买 nike

我遇到一个反复出现的问题,我需要在日志文件中搜索与模式匹配的所有线程。例如以下内容

 (thread a) blah blah (thread b) blha (thread a) match blah (thread c) blah blah (thread d) blah match (thread a) xxx 

将从线程 a 和 d 生成所有行

有多个日志文件(已压缩)。数量有数百或数千。每个未压缩文件最大可达约 20MB。

我现在这样做的方法是首先在所有文件中 grep“匹配”,将(线程 x)部分剪切到 sort/uniq 文件中,然后在文件上使用 fgrep 与原始日志集上的匹配线程。

我已经并行化了初始 grep 和最终 grep。然而这仍然很慢。

有没有办法提高此工作负载的性能?(我虽然是hadoop,但它需要太多资源来设置/实现)

这是整个过程的脚本。

    #!/bin/bash    FILE=/tmp/thg.$$    PAT=$1    shift    trap "rm -f $FILE" 3 13    pargrep "$PAT" $@ | awk '{ print $6 }' | sed 's/(\(.*\)):/\1/' | sort | uniq >$FILE    pargrep --fgrep $FILE $@    rm -f $FILE

并行 grep 是一个更长的脚本,它管理一个最多包含 N 个处理 M 个文件的 grep 进程的队列。每个 grep 进程都会生成一个中间文件(在/dev/shm 或/tmp - 某些内存文件系统中),一旦队列从任务中耗尽,这些文件就会被连接起来。

今天,我的工作站在一组约 3000 个文件上运行了超过 24 小时后,我不得不重新启动它。我猜具有 8GB 和 16GB 交换空间的双 Xeon 无法满足这样的工作负载:-)

最佳答案

已更新

为了并行解压缩和 grep 文件,请尝试使用 GNU Parallel ,如下所示:

parallel -j 8 -k --eta 'gzcat {} | grep something ' ::: *.gz 

原始答案

嗯……我发现你没有得到任何答案,所以我会伸出脖子来尝试一下。我没有对此进行测试,因为我没有太多空闲 GB 的数据......

首先,我会对脚本进行基准测试,看看是什么消耗了时间。具体来说,是初始的 grep 阶段,还是 awk|sed|sort|uniq 阶段?

我会删除 sort|uniq 因为我怀疑对多个 GB 进行排序会占用您的时间。如果是这种情况,也许可以尝试用 awk 替换 sort|uniq,如下所示:

pargrep ... | ... | awk '!seen[$0]++'

它只会在第一次出现时打印每一行,而不需要对整个文件进行排序。

如果做不到这一点,我认为您需要对各个阶段的时间进行基准测试并进行报告。另外,您应该考虑发布您的 pargrep 代码,因为这可能是瓶颈。另外,您是否考虑过使用 GNU Parallel 来完成该部分?

关于linux - 优化从大数据集中提取文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26202093/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com