Azure HPC Cache-adatok betöltése – manuális másolási módszer
Ez a cikk részletes útmutatást nyújt az adatok azure HPC Cache-hez való manuális másolásához egy Blob Storage-tárolóba. Többszálas párhuzamos műveleteket használ a másolási sebesség optimalizálásához.
Ha többet szeretne tudni az adatok Azure HPC Cache-hez való Blob Storage-ba való áthelyezéséről, olvassa el az Adatok áthelyezése az Azure Blob Storage-ba című cikket.
Egyszerű másolási példa
Többszálas példányt manuálisan is létrehozhat egy ügyfélen, ha egyszerre több másolási parancsot futtat a háttérben előre definiált fájl- vagy elérési utakon.
A Linux/UNIX cp
parancs tartalmazza a tulajdonjog és az időalapú metaadatok megőrzésére vonatkozó argumentumot -p
. Az argumentum hozzáadása az alábbi parancshoz nem kötelező. (Az argumentum hozzáadása növeli az ügyféltől a cél fájlrendszerbe küldött hívások számát metaadatok módosítása céljából.)
Ez az egyszerű példa két fájlt másol párhuzamosan:
cp /mnt/source/file1 /mnt/destination1/ & cp /mnt/source/file2 /mnt/destination1/ &
A parancs kiadása után a jobs
parancs megjeleníti, hogy két szál fut.
Adatok másolása kiszámítható fájlnevekkel
Ha a fájlnevek kiszámíthatók, kifejezésekkel párhuzamos másolási szálakat hozhat létre.
Ha például a címtár 1000 fájlt tartalmaz, amelyek egymás után 0001
1000
sorszámozottak, az alábbi kifejezésekkel 10 párhuzamos szálat hozhat létre, amelyek mindegyike 100 fájlt másol:
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/
Adatok másolása strukturálatlan fájlnevekkel
Ha a fájlelnevezési struktúra nem kiszámítható, címtárnevek szerint csoportosíthatja a fájlokat.
Ez a példa a teljes könyvtárakat gyűjti össze a parancsokra való küldéshez cp
háttérfeladatként futtatva:
/root
|-/dir1
| |-/dir1a
| |-/dir1b
| |-/dir1c
|-/dir1c1
|-/dir1d
A fájlok összegyűjtése után párhuzamos másolási parancsokat futtathat az alkönyvtárak és azok teljes tartalmának rekurzív másolásához:
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/ &
Mikor kell csatlakoztatási pontokat hozzáadni?
Miután elegendő párhuzamos szál fut egy cél fájlrendszer csatlakoztatási ponton, lesz egy pont, ahol további szálak hozzáadása nem ad több átviteli sebességet. (Az átviteli sebesség mértéke fájlokban/másodpercben vagy bájtban/másodpercben történik, az adatok típusától függően.) Vagy ami még rosszabb, a túlfűzés néha az átviteli sebesség romlását okozhatja.
Ha ez történik, ügyféloldali csatlakoztatási pontokat adhat hozzá más Azure HPC Cache-csatlakoztatási címekhez ugyanazzal a távoli fájlrendszer-csatlakoztatási útvonallal:
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)
Az ügyféloldali csatlakoztatási pontok hozzáadásával elágaztathatja a további másolási parancsokat a további /mnt/destination[1-3]
csatlakoztatási pontokra, így további párhuzamosságot érhet el.
Ha például a fájlok nagy méretűek, a másolási parancsokat különböző célelérési útvonalak használatára határozhatja meg, és több parancsot küldhet párhuzamosan a másolatot végrehajtó ügyféltől.
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/ & \
A fenti példában mindhárom cél csatlakoztatási pontot az ügyfélfájl másolási folyamatai célként kezelik.
Mikor kell ügyfeleket felvenni?
Végül, ha elérte az ügyfél képességeit, további másolási szálak vagy további csatlakoztatási pontok hozzáadása nem eredményez további fájlokat/másodperc vagy bájt/másodperc növekedést. Ebben az esetben üzembe helyezhet egy másik ügyfelet ugyanazokkal a csatlakoztatási pontokkal, amelyek saját fájlmásolási folyamatokat futtatnak.
Példa:
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/ &
Fájljegyzékek létrehozása
Miután megismerte a fenti megközelítéseket (célhelyenként több másolási szál, ügyfélenként több célhely, hálózattal elérhető forrás fájlrendszerenként több ügyfél), fontolja meg ezt a javaslatot: Fájljegyzékek létrehozása, majd másolási parancsok használata több ügyfélen keresztül.
Ez a forgatókönyv a UNIX find
paranccsal hoz létre jegyzékfájlokat vagy könyvtárakat:
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
Az eredmény átirányítása egy fájlba: find . -mindepth 4 -maxdepth 4 -type d > /tmp/foo
Ezután végigvezetheti a jegyzéken, bash-parancsokkal megszámlálhatja a fájlokat, és meghatározhatja az alkönyvtárak méretét:
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
Végül a tényleges fájlmásolási parancsokat kell létrehoznia az ügyfeleknek.
Ha négy ügyféllel rendelkezik, használja ezt a parancsot:
for i in 1 2 3 4 ; do sed -n ${i}~4p /tmp/foo > /tmp/client${i}; done
Ha öt ügyféllel rendelkezik, használja a következőhöz hasonlót:
for i in 1 2 3 4 5; do sed -n ${i}~5p /tmp/foo > /tmp/client${i}; done
És hatért... Szükség szerint extrapoláljuk.
for i in 1 2 3 4 5 6; do sed -n ${i}~6p /tmp/foo > /tmp/client${i}; done
A parancs kimenetének részeként beszerzett négyszintű könyvtárak elérési útvonalneveit tartalmazó N-alapú fájlokat kap, egyet az N-ügyfelekhezfind
.
Használja az egyes fájlokat a másolási parancs létrehozásához:
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
A fentiekben soronként egy másolási paranccsal rendelkező N-fájlokat kap, amelyek BASH-szkriptként futtathatók az ügyfélen.
A cél a szkriptek több szálának egyidejű futtatása ügyfélenként párhuzamosan több ügyfélen.