Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Tento článek obsahuje podrobné pokyny pro ruční kopírování dat do kontejneru úložiště objektů blob pro použití se službou Azure HPC Cache. K optimalizaci rychlosti kopírování používá paralelní operace s více vlákny.
Další informace o přesunu dat do úložiště objektů blob pro službu Azure HPC Cache najdete v tématu Přesun dat do služby Azure Blob Storage.
Příklad jednoduché kopie
V klientovi můžete ručně vytvořit vícevláknovou kopii spuštěním více příkazů kopírování najednou na pozadí s předdefinovanými sadami souborů nebo cest.
Příkaz cp systému Linux/UNIX obsahuje argument -p pro zachování vlastnictví a metadat mtime. Přidání tohoto argumentu do níže uvedených příkazů je volitelné. (Přidání argumentu zvyšuje počet volání systému souborů odesílaných z klienta do cílového systému souborů pro úpravy metadat.)
Tento jednoduchý příklad paralelně zkopíruje dva soubory:
cp /mnt/source/file1 /mnt/destination1/ & cp /mnt/source/file2 /mnt/destination1/ &
Po vydání tohoto příkazu jobs příkaz zobrazí, že jsou spuštěna dvě vlákna.
Kopírování dat s předvídatelnými názvy souborů
Pokud jsou názvy souborů předvídatelné, můžete pomocí výrazů vytvořit paralelní vlákna kopírování.
Pokud například adresář obsahuje 1000 souborů, které jsou očíslovány postupně z 0001 do 1000, můžete pomocí následujících výrazů vytvořit 10 paralelních vláken, které každý kopíruje 100 souborů:
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/
Kopírování dat s nestrukturovanými názvy souborů
Pokud struktura pojmenování souboru není předvídatelná, můžete soubory seskupit podle názvů adresářů.
Tento příklad shromažďuje celé adresáře k odeslání příkazům cp, které běží jako úlohy na pozadí.
/root
|-/dir1
| |-/dir1a
| |-/dir1b
| |-/dir1c
|-/dir1c1
|-/dir1d
Po shromáždění souborů můžete spustit příkazy paralelního kopírování, které rekurzivně zkopírují podadresáře a veškerý jejich obsah:
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/ &
When to add mount points
Jakmile budete mít dostatek paralelních vláken směřujících na jeden přípojný bod systému souborů, bude existovat bod, kdy přidání dalších vláken neposkytuje větší propustnost. (Propustnost se bude měřit v souborech za sekundu nebo bajtech za sekundu v závislosti na typu dat.) Nebo co je horší, nadměrné podprocesování může někdy způsobit degradaci propustnosti.
V takovém případě můžete přidat přípojné body na straně klienta do jiných adres připojení služby Azure HPC Cache pomocí stejné cesty připojení vzdáleného systému souborů:
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)
Adding client-side mount points lets you fork off additional copy commands to the additional /mnt/destination[1-3] mount points, achieving further parallelism.
Pokud jsou například vaše soubory velmi velké, můžete definovat příkazy kopírování pro použití odlišných cílových cest, paralelní odesílání dalších příkazů z klienta provádějícího kopírování.
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/ & \
V předchozím příkladu jsou procesy kopírování souborů klientem zaměřeny na všechny tři cílové přípojné body.
Kdy přidat klienty
Jakmile dosáhnete schopností klienta, přidání dalších vláken kopírování nebo přípojných bodů nezvýší počet souborů za sekundu ani bajtů za sekundu. V takovém případě můžete nasadit dalšího klienta se stejnou sadou přípojných bodů, na kterých budou spuštěny vlastní sady procesů kopírování souborů.
Příklad:
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/ &
Vytváření manifestů souborů
Po pochopení výše uvedených přístupů (více vláken kopírování na jeden cíl, více cílů na jednoho klienta, více klientů na zdrojový systém souborů dostupný v síti) zvažte toto doporučení: Sestavte manifesty souborů a použijte je s příkazy kopírování napříč více klienty.
Tento scénář používá příkaz find systému UNIX k vytvoření manifestů souborů nebo adresářů:
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
Přesměrovat tento výsledek na soubor: find . -mindepth 4 -maxdepth 4 -type d > /tmp/foo
Pak můžete iterovat manifest pomocí příkazů BASH ke zjištění počtu souborů a určení velikostí podadresářů:
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
Nakonec musíte pro klienty vytvořit skutečné příkazy pro kopírování souborů.
Pokud máte čtyři klienty, použijte tento příkaz:
for i in 1 2 3 4 ; do sed -n ${i}~4p /tmp/foo > /tmp/client${i}; done
Pokud máte pět klientů, použijte něco takového:
for i in 1 2 3 4 5; do sed -n ${i}~5p /tmp/foo > /tmp/client${i}; done
And for six.... Extrapolate as needed.
for i in 1 2 3 4 5 6; do sed -n ${i}~6p /tmp/foo > /tmp/client${i}; done
Obdržíte N výsledných souborů, každý pro jednoho z vašich N klientů, které obsahují názvy cest k adresářům čtvrté úrovně, získané jako součást výstupu z příkazu find.
Pomocí každého souboru sestavte příkaz pro kopírová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
Výše uvedené vám poskytne N soubory, z nichž každý obsahuje kopírovací příkaz na každém řádku, který lze spustit jako skript BASH na klientu.
Cílem je souběžně spouštět více vláken těchto skriptů na jednotlivých klientech paralelně na více klientech.