Azure HPC Önbelleği veri alma - el ile kopyalama yöntemi
Bu makalede, Verileri Azure HPC Önbelleği ile kullanılmak üzere bir Blob depolama kapsayıcısına el ile kopyalamaya yönelik ayrıntılı yönergeler verilmektedir. Kopyalama hızını iyileştirmek için çok iş parçacıklı paralel işlemler kullanır.
Azure HPC Önbelleği'nizde verileri Blob depolamaya taşıma hakkında daha fazla bilgi edinmek için Bkz. Verileri Azure Blob depolamaya taşıma.
Basit kopya örneği
Önceden tanımlanmış dosya veya yol kümelerine karşı arka planda aynı anda birden fazla kopyalama komutu çalıştırarak istemcide el ile çok iş parçacıklı bir kopya oluşturabilirsiniz.
Linux/UNIX cp
komutu sahipliği ve mtime meta verilerini korumak için bağımsız değişkenini -p
içerir. Bu bağımsız değişkeni aşağıdaki komutlara eklemek isteğe bağlıdır. (Bağımsız değişkeninin eklenmesi, meta veri değişikliği için istemciden hedef dosya sistemine gönderilen dosya sistemi çağrılarının sayısını artırır.)
Bu basit örnek, iki dosyayı paralel olarak kopyalar:
cp /mnt/source/file1 /mnt/destination1/ & cp /mnt/source/file2 /mnt/destination1/ &
Bu komutu verdikten sonra, jobs
komut iki iş parçacığının çalıştığını gösterir.
Tahmin edilebilir dosya adlarıyla veri kopyalama
Dosya adlarınız tahmin edilebilirse, paralel kopya iş parçacıkları oluşturmak için ifadeleri kullanabilirsiniz.
Örneğin, dizininiz 'den 0001
1000
öğesine sıralı olarak numaralandırılmış 1000 dosya içeriyorsa, her birinin 100 dosyayı kopyalayan 10 paralel iş parçacığı oluşturmak için aşağıdaki ifadeleri kullanabilirsiniz:
cp /mnt/source/file0* /mnt/destination1/ & \
cp /mnt/source/file1* /mnt/destination1/ & \
cp /mnt/source/file2* /mnt/destination1/ & \
cp /mnt/source/file3* /mnt/destination1/ & \
cp /mnt/source/file4* /mnt/destination1/ & \
cp /mnt/source/file5* /mnt/destination1/ & \
cp /mnt/source/file6* /mnt/destination1/ & \
cp /mnt/source/file7* /mnt/destination1/ & \
cp /mnt/source/file8* /mnt/destination1/ & \
cp /mnt/source/file9* /mnt/destination1/
Yapılandırılmamış dosya adlarıyla veri kopyalama
Dosya adlandırma yapınız tahmin edilebilir değilse, dosyaları dizin adlara göre gruplandırabilirsiniz.
Bu örnek, arka plan görevleri olarak çalıştırılacak komutlara göndermek için cp
tüm dizinleri toplar:
/root
|-/dir1
| |-/dir1a
| |-/dir1b
| |-/dir1c
|-/dir1c1
|-/dir1d
Dosyalar toplandıktan sonra, alt dizinleri ve bunların tüm içeriklerini yinelemeli olarak kopyalamak için paralel kopyalama komutlarını çalıştırabilirsiniz:
cp /mnt/source/* /mnt/destination/
mkdir -p /mnt/destination/dir1 && cp /mnt/source/dir1/* mnt/destination/dir1/ &
cp -R /mnt/source/dir1/dir1a /mnt/destination/dir1/ &
cp -R /mnt/source/dir1/dir1b /mnt/destination/dir1/ &
cp -R /mnt/source/dir1/dir1c /mnt/destination/dir1/ & # this command copies dir1c1 via recursion
cp -R /mnt/source/dir1/dir1d /mnt/destination/dir1/ &
Bağlama noktaları ne zaman eklenir?
Tek bir hedef dosya sistemi bağlama noktasına karşı yeterli paralel iş parçacığına sahip olduktan sonra, daha fazla iş parçacığı eklemenin daha fazla aktarım hızı sağlamadığı bir nokta olacaktır. (Aktarım hızı, veri türünüz bağlı olarak dosya/saniye veya bayt/saniye cinsinden ölçülür.) Daha da kötüsü, aşırı iş parçacığı kullanımı bazen aktarım hızının düşmesine neden olabilir.
Bu durumda, aynı uzak dosya sistemi bağlama yolunu kullanarak diğer Azure HPC Önbelleği bağlama adreslerine istemci tarafı bağlama noktaları ekleyebilirsiniz:
10.1.0.100:/nfs on /mnt/sourcetype nfs (rw,vers=3,proto=tcp,addr=10.1.0.100)
10.1.1.101:/nfs on /mnt/destination1type nfs (rw,vers=3,proto=tcp,addr=10.1.1.101)
10.1.1.102:/nfs on /mnt/destination2type nfs (rw,vers=3,proto=tcp,addr=10.1.1.102)
10.1.1.103:/nfs on /mnt/destination3type nfs (rw,vers=3,proto=tcp,addr=10.1.1.103)
İstemci tarafı bağlama noktaları eklemek ek kopyalama komutlarını ek /mnt/destination[1-3]
bağlama noktalarına çatallayarak daha fazla paralellik elde etmenizi sağlar.
Örneğin, dosyalarınız çok büyükse, kopyalama komutlarını farklı hedef yolları kullanacak şekilde tanımlayabilir ve kopyayı gerçekleştiren istemciden paralel olarak daha fazla komut gönderebilirsiniz.
cp /mnt/source/file0* /mnt/destination1/ & \
cp /mnt/source/file1* /mnt/destination2/ & \
cp /mnt/source/file2* /mnt/destination3/ & \
cp /mnt/source/file3* /mnt/destination1/ & \
cp /mnt/source/file4* /mnt/destination2/ & \
cp /mnt/source/file5* /mnt/destination3/ & \
cp /mnt/source/file6* /mnt/destination1/ & \
cp /mnt/source/file7* /mnt/destination2/ & \
cp /mnt/source/file8* /mnt/destination3/ & \
Yukarıdaki örnekte, üç hedef bağlama noktasının tümü de istemci dosya kopyalama işlemleri tarafından hedeflenmektedir.
İstemciler ne zaman eklenir?
Son olarak, istemcinin özelliklerine ulaştığınızda, daha fazla kopya iş parçacığı veya ek bağlama noktası eklemek ek dosya/sn veya bayt/sn artışı sağlamaz. Bu durumda, kendi dosya kopyalama işlemi kümelerini çalıştıracak aynı bağlama noktaları kümesine sahip başka bir istemci dağıtabilirsiniz.
Örnek:
Client1: cp -R /mnt/source/dir1/dir1a /mnt/destination/dir1/ &
Client1: cp -R /mnt/source/dir2/dir2a /mnt/destination/dir2/ &
Client1: cp -R /mnt/source/dir3/dir3a /mnt/destination/dir3/ &
Client2: cp -R /mnt/source/dir1/dir1b /mnt/destination/dir1/ &
Client2: cp -R /mnt/source/dir2/dir2b /mnt/destination/dir2/ &
Client2: cp -R /mnt/source/dir3/dir3b /mnt/destination/dir3/ &
Client3: cp -R /mnt/source/dir1/dir1c /mnt/destination/dir1/ &
Client3: cp -R /mnt/source/dir2/dir2c /mnt/destination/dir2/ &
Client3: cp -R /mnt/source/dir3/dir3c /mnt/destination/dir3/ &
Client4: cp -R /mnt/source/dir1/dir1d /mnt/destination/dir1/ &
Client4: cp -R /mnt/source/dir2/dir2d /mnt/destination/dir2/ &
Client4: cp -R /mnt/source/dir3/dir3d /mnt/destination/dir3/ &
Dosya bildirimleri oluşturma
Yukarıdaki yaklaşımları (hedef başına birden çok kopya iş parçacığı, istemci başına birden çok hedef, ağ tarafından erişilebilen kaynak dosya sistemi başına birden çok istemci) anladıktan sonra şu öneriyi göz önünde bulundurun: Dosya bildirimleri oluşturun ve bunları birden çok istemcide kopyalama komutları ile kullanın.
Bu senaryo, dosya veya dizin bildirimlerini oluşturmak için UNIX find
komutunu kullanır:
user@build:/mnt/source > find . -mindepth 4 -maxdepth 4 -type d
./atj5b55c53be6-01/support/gsi/2018-07-22T21:12:06EDT
./atj5b55c53be6-01/support/pcap/2018-07-23T01:34:57UTC
./atj5b55c53be6-01/support/trace/rolling
./atj5b55c53be6-03/support/gsi/2018-07-22T21:12:06EDT
./atj5b55c53be6-03/support/pcap/2018-07-23T01:34:57UTC
./atj5b55c53be6-03/support/trace/rolling
./atj5b55c53be6-02/support/gsi/2018-07-22T21:12:06EDT
./atj5b55c53be6-02/support/pcap/2018-07-23T01:34:57UTC
./atj5b55c53be6-02/support/trace/rolling
Bu sonucu bir dosyaya yeniden yönlendirin: find . -mindepth 4 -maxdepth 4 -type d > /tmp/foo
Ardından dosyaları saymak ve alt dizinlerin boyutlarını belirlemek için BASH komutlarını kullanarak bildirimde yineleme yapabilirsiniz:
ben@xlcycl1:/sps/internal/atj5b5ab44b7f > for i in $(cat /tmp/foo); do echo " `find ${i} |wc -l` `du -sh ${i}`"; done
244 3.5M ./atj5b5ab44b7f-02/support/gsi/2018-07-18T00:07:03EDT
9 172K ./atj5b5ab44b7f-02/support/gsi/stats_2018-07-18T05:01:00UTC
124 5.8M ./atj5b5ab44b7f-02/support/gsi/stats_2018-07-19T01:01:01UTC
152 15M ./atj5b5ab44b7f-02/support/gsi/stats_2018-07-20T01:01:00UTC
131 13M ./atj5b5ab44b7f-02/support/gsi/stats_2018-07-20T21:59:41UTC_partial
789 6.2M ./atj5b5ab44b7f-02/support/gsi/2018-07-20T21:59:41UTC
134 12M ./atj5b5ab44b7f-02/support/gsi/stats_2018-07-20T22:22:55UTC_hpccache_catchup
7 16K ./atj5b5ab44b7f-02/support/pcap/2018-07-18T17:12:19UTC
8 83K ./atj5b5ab44b7f-02/support/pcap/2018-07-18T17:17:17UTC
575 7.7M ./atj5b5ab44b7f-02/support/cores/armada_main.2000.1531980253.gsi
33 4.4G ./atj5b5ab44b7f-02/support/trace/rolling
281 6.6M ./atj5b5ab44b7f-01/support/gsi/2018-07-18T00:07:03EDT
15 182K ./atj5b5ab44b7f-01/support/gsi/stats_2018-07-18T05:01:00UTC
244 17M ./atj5b5ab44b7f-01/support/gsi/stats_2018-07-19T01:01:01UTC
299 31M ./atj5b5ab44b7f-01/support/gsi/stats_2018-07-20T01:01:00UTC
256 29M ./atj5b5ab44b7f-01/support/gsi/stats_2018-07-20T21:59:41UTC_partial
889 7.7M ./atj5b5ab44b7f-01/support/gsi/2018-07-20T21:59:41UTC
262 29M ./atj5b5ab44b7f-01/support/gsi/stats_2018-07-20T22:22:55UTC_hpccache_catchup
11 248K ./atj5b5ab44b7f-01/support/pcap/2018-07-18T17:12:19UTC
11 88K ./atj5b5ab44b7f-01/support/pcap/2018-07-18T17:17:17UTC
645 11M ./atj5b5ab44b7f-01/support/cores/armada_main.2019.1531980253.gsi
33 4.0G ./atj5b5ab44b7f-01/support/trace/rolling
244 2.1M ./atj5b5ab44b7f-03/support/gsi/2018-07-18T00:07:03EDT
9 158K ./atj5b5ab44b7f-03/support/gsi/stats_2018-07-18T05:01:00UTC
124 5.3M ./atj5b5ab44b7f-03/support/gsi/stats_2018-07-19T01:01:01UTC
152 15M ./atj5b5ab44b7f-03/support/gsi/stats_2018-07-20T01:01:00UTC
131 12M ./atj5b5ab44b7f-03/support/gsi/stats_2018-07-20T21:59:41UTC_partial
789 8.4M ./atj5b5ab44b7f-03/support/gsi/2018-07-20T21:59:41UTC
134 14M ./atj5b5ab44b7f-03/support/gsi/stats_2018-07-20T22:25:58UTC_hpccache_catchup
7 159K ./atj5b5ab44b7f-03/support/pcap/2018-07-18T17:12:19UTC
7 157K ./atj5b5ab44b7f-03/support/pcap/2018-07-18T17:17:17UTC
576 12M ./atj5b5ab44b7f-03/support/cores/armada_main.2013.1531980253.gsi
33 2.8G ./atj5b5ab44b7f-03/support/trace/rolling
Son olarak, istemcilere gerçek dosya kopyalama komutlarını oluşturmanız gerekir.
Dört istemciniz varsa şu komutu kullanın:
for i in 1 2 3 4 ; do sed -n ${i}~4p /tmp/foo > /tmp/client${i}; done
Beş istemciniz varsa aşağıdaki gibi bir şey kullanın:
for i in 1 2 3 4 5; do sed -n ${i}~5p /tmp/foo > /tmp/client${i}; done
Ve altı için.... Gerektiğinde tahminde bulun.
for i in 1 2 3 4 5 6; do sed -n ${i}~6p /tmp/foo > /tmp/client${i}; done
Komut çıkışının find
bir parçası olarak elde edilen dördüncü düzey dizinlerin yol adlarını içeren her N istemciniz için bir tane olmak üzere N sonuç dosyaları alırsınız.
Kopyalama komutunu oluşturmak için her dosyayı kullanın:
for i in 1 2 3 4 5 6; do for j in $(cat /tmp/client${i}); do echo "cp -p -R /mnt/source/${j} /mnt/destination/${j}" >> /tmp/client${i}_copy_commands ; done; done
Yukarıdakiler, istemcide BASH betiği olarak çalıştırabileceğiniz, her birinin satır başına kopyalama komutuna sahip olan N dosyalarını verir.
Amaç, bu betiklerin birden çok iş parçacığını istemci başına eşzamanlı olarak birden çok istemcide paralel olarak çalıştırmaktır.