最近在處理數十 TB 的 HTTP server log 有感,記錄一些可以拿來做分散式運算的工具以及語法 (參數)。
gzip 一直是你的好工具,特別是儲存空間放在網路上時,可以大幅的減少讀取、寫入資料時所需要的 throughput。不過 gzip 一次只會用到一個 CPU core 壓縮資料,所以有人寫了 pigz ,在壓縮時建立多個 thread 同時運算。
還有不少針對 gz 的工具可以使用,像是:zcat、zgrep 和 zless (這超神奇,其實打 less 好像就會自動偵測是不是 gz 了 XD)
parallel
之前的筆記參考一下即可。
sort
排序大量資料也是會耗掉相當多的時間,幸好 sort 內建平行運算功能,只要加個參數即可。
$ sort --parallel=8 -S 4G unsort.list > sorted.list
「–parallel」可以指定要同時多少資源做排序,而「-S」則是設定要使用多大的記憶體來做排序。
xargs
感謝 Joe Horn 和 Wen-Shih Chao 提供指點,xargs 也有 parallel 的功能。使用「-P」參數就可以讓 xargs 自動做平行處理。
ls *.log | xargs -P 8 grep PATTERN
目前最常用的是這幾個,其他的就待以後用到慢慢補上。若有更好的做法也歡迎分享~
xargs 很常見…
謝謝日落 🙂
xargs -P ?
再補一個。
xz 在 v5.2 以後,也可以支援多 thread 壓縮。但是如果使用
-9
則會維持單執行緒來提高壓縮率。