先來個對比圖看一下, 左邊圖是普通 rsync 目錄拷貝, 右邊圖是藉助 parallel 工具併發起了多個 rsync
centos6.5安裝 parallel
#!/bin/bash # Install parallel on CentOS 6. # Assumes you are root. Prefix w/ sudo if not. cd /etc/yum.repos.d/ #wget http://download.opensuse.org/repositories/home:tange/CentOS_CentOS-5/home:tange.repo wget http://download.opensuse.org/repositories/home:/tange/CentOS_CentOS-6/home:tange.repo yum install parallel
開始 rsync 拷貝檔案 [從/data/ 拷貝到 /hadoop/]
[10 ~]$ df -h Filesystem Size Used Avail Use% Mounted on /dev/mapper/VolGroup-lv_root 50G 6.1G 41G 13% / tmpfs 32G 12K 32G 1% /dev/shm /dev/sda1 485M 39M 421M 9% /boot /dev/mapper/VolGroup-lv_home 5.5G 140M 5.1G 3% /home /dev/mapper/data-apps 12T 5.2T 6.7T 44% /data /dev/mapper/bigdata-hadoop 12T 3.5T 8.3T 30% /hadoop
如果用普通的 rsync, 再加上很多小檔案,一晚上只傳了1T 多點,使用 parallel 工具 1小時大概傳了500G
cd /data find . -type f | parallel 'mkdir -p /hadoop/{//}; rsync -a {} /hadoop/{}'
**注意**
上面的 find 命令哪裡,最好用 root 使用者, 這樣同步完你會發現所有資料夾的屬主和屬組都是 root, 所以還需要再用 rsync 同步一遍許可權
rsync -a /data /hadoop
擴充套件:
如果是不同機器間,命令如下
cd /data find . -type f | parallel "rsync -a -e 'ssh -p 3299' --rsync-path='mkdir -p /data{//} && rsync' {} 192.168.0.100:/data/{}"