我有一個反覆出現的問題,我需要爲與模式匹配的所有線程搜索日誌文件。 e.g以下優化從大型數據集提取文本
(thread a) blah blah (thread b) blha (thread a) match blah (thread c) blah blah (thread d) blah match (thread a) xxx
將生產線從所有線& 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" [email protected] | awk '{ print $6 }' | sed 's/(\(.*\)):/\1/' | sort | uniq >$FILE pargrep --fgrep $FILE [email protected] rm -f $FILE
並行grep是一個更長的腳本,它管理最多N個工作在M個文件上的grep進程的隊列。每個grep進程都會生成一箇中間文件(在/ dev/shm或/ tmp中 - 某些內存文件系統),然後在隊列從任務中消失時將其連接起來。
我在運行一組〜3000個文件超過24小時後,必須立即重啓我的工作站。我猜雙Xeon處理器和8GB掉16GB都達不到這樣的工作量:-)
你如何準確地完成初始搜索?也許向我們展示你的代碼,用於各個階段... – 2014-10-05 15:53:42