1. 程式人生 > >使用tar+pigz+ssh實現大數據的高效傳輸

使用tar+pigz+ssh實現大數據的高效傳輸

tar pigz ssh 大數據的高效傳輸

使用tar+pigz+ssh實現大數據的高效傳輸

以前我們跨主機拷貝大數據的時候,比如要拷貝超過100GB的mysql原始數據,我們通常的做法如下:

  • 在源端打包壓縮為tar.gz文件

  • 采用scp或者rsync等方式拷貝到目標主機

  • 在目標主機解壓文件

這三個過程是同步阻塞,即不能同時異步執行,導致效率低下。

現在我們將過程優化為以數據流的方式,同時執行(非阻塞模式),則效率一般可以提高到原來的3倍以上,具體實現如下:

磁盤讀取---->打包---->壓縮------>傳輸---->解壓縮-->拆包---->落盤

|->tar |->gzip |->ssh |->gzip |->tar

比如我要將本地的test目錄拷貝到“目標IP”的的data目錄,則命令如下:

tar -c test/ |pigz |ssh -c arcfour128 目標IP "gzip -d|tar -xC /data"

當然,這裏的解壓過程仍然用了效率比較低下的gzip,如果將解壓工具換成lz4(但需要單獨編譯安裝),則效率可以再提高不少。

如果不需要解壓,則命令變為:

tar -c test/ |pigz |ssh -c arcfour128 目標IP "cat >/data/test.tar.gz"

註:因為采用了流式壓縮,解壓過程必須加上-i參數,及tar –ixf /data/test.tar.gz 。

說明: pigz是一個高效的壓縮工具,可以將多核CPU的每一分剩余性能都用來做壓縮計算。而傳統的gzip則只能用單核CPU。比如一臺2個8core cpu服務器采用pigz和gzip壓縮相同的數據,一般性能差距至少在7-8倍以上(一般不會達到理論的16倍,因為受限於磁盤的讀寫速度和內存等資源)


使用tar+pigz+ssh實現大數據的高效傳輸