Delen via


Gegevensopname van Azure HPC Cache - handmatige kopieermethode

Dit artikel bevat gedetailleerde instructies voor het handmatig kopiëren van gegevens naar een Blob Storage-container voor gebruik met Azure HPC Cache. Het maakt gebruik van parallelle bewerkingen met meerdere threads om de kopieersnelheid te optimaliseren.

Lees Gegevens verplaatsen naar Azure Blob Storage voor meer informatie over het verplaatsen van gegevens naar Blob Storage voor uw Azure HPC Cache.

Voorbeeld van eenvoudige kopie

U kunt handmatig een kopie met meerdere threads op een client maken door meer dan één kopieeropdracht tegelijk uit te voeren op de achtergrond tegen vooraf gedefinieerde sets bestanden of paden.

De Linux-/UNIX-opdracht cp bevat het argument -p voor het behouden van eigendom en mtime-metagegevens. Het toevoegen van dit argument aan de onderstaande opdrachten is optioneel. (Als u het argument toevoegt, wordt het aantal aanroepen van het bestandssysteem dat van de client naar het doelbestandssysteem wordt verzonden, verhoogd voor het wijzigen van metagegevens.)

In dit eenvoudige voorbeeld worden twee bestanden parallel gekopieerd:

cp /mnt/source/file1 /mnt/destination1/ & cp /mnt/source/file2 /mnt/destination1/ &

Nadat u deze opdracht hebt uitgegeven, zal de jobs opdracht laten zien dat er twee threads worden uitgevoerd.

Gegevens kopiëren met voorspelbare bestandsnamen

Als uw bestandsnamen voorspelbaar zijn, kunt u expressies gebruiken om parallelle kopieerthreads te maken.

Als uw map bijvoorbeeld 1000 bestanden bevat die opeenvolgend 00011000van elkaar zijn genummerd, kunt u de volgende expressies gebruiken om 10 parallelle threads te maken die elk 100 bestanden kopiëren:

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/

Gegevens kopiëren met niet-gestructureerde bestandsnamen

Als uw bestandsnaamstructuur niet voorspelbaar is, kunt u bestanden groeperen op mapnamen.

In dit voorbeeld worden volledige mappen gebundeld om verzonden te worden naar cp opdrachten die als achtergrondtaken worden uitgevoerd.

/root
|-/dir1
| |-/dir1a
| |-/dir1b
| |-/dir1c
   |-/dir1c1
|-/dir1d

Nadat de bestanden zijn verzameld, kunt u parallelle kopieeropdrachten uitvoeren om de submappen en alle bijbehorende inhoud recursief te kopiëren:

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/ &

Wanneer koppelpunten toevoegen

Nadat u voldoende parallelle threads hebt lopen naar één mount point van het doelbestandssysteem, bereikt u een punt waarop het toevoegen van meer threads niet tot meer doorvoer leidt. (De doorvoer wordt gemeten in bestanden/seconde of bytes per seconde, afhankelijk van uw type gegevens.) Of erger, overthreading kan soms leiden tot een afname van de doorvoer.

Als dit gebeurt, kunt u koppelpunten aan de clientzijde toevoegen aan andere koppeladressen van Azure HPC Cache, met behulp van hetzelfde pad voor het koppelen van het externe bestandssysteem:

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)

Door koppelpunten aan de clientzijde toe te voegen, kunt u extra kopieeropdrachten naar de extra /mnt/destination[1-3] koppelpunten afsplitsen, waardoor verdere parallelle uitvoering wordt bereikt.

Als uw bestanden bijvoorbeeld erg groot zijn, kunt u de kopieeropdrachten definiëren voor het gebruik van afzonderlijke doelpaden, waarbij u meer opdrachten parallel verzendt vanaf de client die de kopie uitvoert.

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/ & \

In het bovenstaande voorbeeld worden alle drie de doelkoppelingspunten gericht op de kopieerprocessen van het clientbestand.

Wanneer clients toevoegen

Als u tenslotte de capaciteiten van de client hebt bereikt, zal het toevoegen van meer kopieerprocessen of extra montagemogelijkheden geen toename in bestandsoverdracht per seconde of byteoverdracht per seconde opleveren. In dat geval kunt u een andere client implementeren met dezelfde set koppelpunten waarop eigen sets bestandskopieprocessen worden uitgevoerd.

Voorbeeld:

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/ &

Bestandsmanifesten maken

Nadat u de bovenstaande benaderingen (meerdere copy-threads per bestemming, meerdere bestemmingen per client, meerdere clients per netwerk toegankelijk bronbestandssysteem) hebt begrepen, kunt u deze aanbeveling overwegen: bestandsmanifesten bouwen en deze vervolgens gebruiken met kopieeropdrachten voor meerdere clients.

In dit scenario wordt de UNIX-opdracht find gebruikt om manifesten van bestanden of mappen te maken:

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

Dit resultaat omleiden naar een bestand: find . -mindepth 4 -maxdepth 4 -type d > /tmp/foo

Vervolgens kunt u het manifest doorlopen met behulp van BASH-opdrachten om bestanden te tellen en de grootte van de submappen te bepalen:

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

Ten slotte moet u de daadwerkelijke opdrachten voor het kopiëren van bestanden naar de clients maken.

Als u vier clients hebt, gebruikt u deze opdracht:

for i in 1 2 3 4 ; do sed -n ${i}~4p /tmp/foo > /tmp/client${i}; done

Als u vijf clients hebt, gebruikt u ongeveer als volgt:

for i in 1 2 3 4 5; do sed -n ${i}~5p /tmp/foo > /tmp/client${i}; done

En voor zes.... Extrapoleer indien nodig.

for i in 1 2 3 4 5 6; do sed -n ${i}~6p /tmp/foo > /tmp/client${i}; done

U krijgt N resulterende bestanden, één voor elk van uw N-clients met de padnamen naar de niveau-vier mappen die zijn verkregen als onderdeel van de uitvoer van de find opdracht.

Gebruik elk bestand om de kopieeropdracht te bouwen:

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

Het bovenstaande geeft u N-bestanden , elk met een kopieeropdracht per regel, die kunnen worden uitgevoerd als een BASH-script op de client.

Het doel is om meerdere threads van deze scripts gelijktijdig per client parallel uit te voeren op meerdere clients.