Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Ten artykuł zawiera szczegółowe instrukcje ręcznego kopiowania danych do kontenera usługi Blob Storage do użycia z usługą Azure HPC Cache. Używa ona wielowątowych operacji równoległych do optymalizacji szybkości kopiowania.
Aby dowiedzieć się więcej na temat przenoszenia danych do usługi Blob Storage dla usługi Azure HPC Cache, przeczytaj Przenoszenie danych do usługi Azure Blob Storage.
Przykład prostego kopiowania
Możesz ręcznie utworzyć kopię wielowątkową na kliencie, uruchamiając jednocześnie więcej niż jedno polecenie kopiowania w tle względem wstępnie zdefiniowanych zestawów plików lub ścieżek.
Polecenie systemu Linux/UNIX cp zawiera argument -p umożliwiający zachowanie własności i metadanych mtime. Dodanie tego argumentu do poniższych poleceń jest opcjonalne. (Dodanie argumentu zwiększa liczbę wywołań systemu plików wysyłanych z klienta do docelowego systemu plików w celu modyfikacji metadanych).
Ten prosty przykład kopiuje dwa pliki równolegle:
cp /mnt/source/file1 /mnt/destination1/ & cp /mnt/source/file2 /mnt/destination1/ &
Po wydaniu tego polecenia jobs, polecenie pokaże, że dwa wątki są uruchomione.
Kopiowanie danych z przewidywalnymi nazwami plików
Jeśli nazwy plików są przewidywalne, możesz użyć wyrażeń do tworzenia równoległych wątków kopiowania.
Jeśli na przykład katalog zawiera 1000 plików, które są numerowane sekwencyjnie z 0001 do 1000, możesz użyć następujących wyrażeń, aby utworzyć 10 równoległych wątków, które każdy kopiuje 100 plików:
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/
Kopiowanie danych z nazwami plików bez struktury
Jeśli struktura nazewnictwa plików nie jest przewidywalna, możesz grupować pliki według nazw katalogów.
W tym przykładzie zbierane są całe katalogi do wysyłania do cp poleceń uruchamianych jako zadania w tle:
/root
|-/dir1
| |-/dir1a
| |-/dir1b
| |-/dir1c
|-/dir1c1
|-/dir1d
Po zebraniu plików można uruchamiać równoległe polecenia kopiowania, aby rekursywnie kopiować podkatalogi i całą ich zawartość:
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/ &
Kiedy dodać punkty montowania
Po uruchomieniu wystarczającej liczby równoległych wątków dla pojedynczego docelowego punktu montowania systemu plików, nastąpi moment, w którym dodanie większej liczby wątków nie zwiększy przepustowości. (Przepływność będzie mierzona w plikach/sekundach lub bajtach/sekundach w zależności od typu danych). Co gorsza, nadmierne wątkowanie może czasami spowodować obniżenie przepływności.
W takim przypadku można dodać punkty instalacji po stronie klienta do innych adresów instalacji usługi Azure HPC Cache przy użyciu tej samej ścieżki instalacji zdalnego systemu plików:
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)
Dodanie punktów montowania po stronie klienta umożliwia rozpoczęcie równoległych poleceń kopiowania do dodatkowych /mnt/destination[1-3] punktów montowania, co pozwala osiągnąć większą równoległość.
Jeśli na przykład pliki są bardzo duże, możesz zdefiniować polecenia kopiowania, aby używać odrębnych ścieżek docelowych, wysyłając równolegle więcej poleceń od klienta wykonującego kopię.
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/ & \
W powyższym przykładzie wszystkie trzy punkty instalacji docelowej są objęte procesami kopiowania plików klienta.
Kiedy dodać klientów
Na koniec, gdy osiągniesz maksymalne możliwości klienta, dodanie kolejnych wątków kopiowania lub dodatkowych punktów montowania nie spowoduje zwiększenia liczby plików/s ani bajtów na sekundę. W takiej sytuacji można wdrożyć innego klienta z tym samym zestawem punktów instalacji, które będą uruchamiać własne zestawy procesów kopiowania plików.
Przykład:
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/ &
Tworzenie manifestów plików
Po zrozumieniu powyższych podejść (wiele wątków kopiowania na jedno miejsce docelowe, na klienta przypada wiele miejsc docelowych, wielu klientów w sieciowym systemie plików źródłowym), rozważ następujące zalecenie: Stwórz manifesty plików, a następnie używaj ich z poleceniami kopiowania u wielu klientów.
W tym scenariuszu użyto polecenia UNIX find do utworzenia manifestów plików lub katalogów:
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
Przekieruj ten wynik do pliku: find . -mindepth 4 -maxdepth 4 -type d > /tmp/foo
Następnie można iterować za pośrednictwem manifestu, używając poleceń BASH do zliczenia plików i określenia rozmiarów podkatalogów:
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
Na koniec należy opracować rzeczywiste polecenia kopiowania plików do klientów.
Jeśli masz czterech klientów, użyj następującego polecenia:
for i in 1 2 3 4 ; do sed -n ${i}~4p /tmp/foo > /tmp/client${i}; done
Jeśli masz pięciu klientów, użyj czegoś podobnego do następującego:
for i in 1 2 3 4 5; do sed -n ${i}~5p /tmp/foo > /tmp/client${i}; done
I jeśli chodzi o sześć... Ekstrapoluj zgodnie z potrzebami.
for i in 1 2 3 4 5 6; do sed -n ${i}~6p /tmp/foo > /tmp/client${i}; done
Otrzymasz N plików wynikowych, po jednym dla każdego z twoich N klientów, z nazwami ścieżek do katalogów na czwartym poziomie, uzyskanych jako część danych wyjściowych polecenia find.
Użyj każdego pliku, aby skompilować polecenie kopiowania:
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
Powyższe polecenie da N plików, z których każdy w każdym wierszu ma polecenie kopiowania, które można uruchomić jako skrypt powłoki BASH na kliencie.
Celem jest uruchamianie jednocześnie wielu wątków tych skryptów dla każdego klienta, równolegle na wielu klientach.