2015/09/16

寫 shell script 的一些平行處理工具

最近在處理數十 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




目前最常用的是這幾個,其他的就待以後用到慢慢補上。若有更好的做法也歡迎分享~