Hyppää sisältöön

Welcome to our weekly research support coffee hour on Zoom! Click here for more information.

Warning!

Puhti scratch disk is becoming very full (80+ % ) resulting in performance degradation. Everybody is advised to only keep actively processed data on scratch, all other data should be deleted, transferred to host institute or stored in Lumi-O. No new quota will be granted. Click here for a tool for examining your disk usage.

Ohje Allaksen käyttöön CSC:n supertietokoneilla

CSC:n supertietokoneet Puhti ja Mahti eivät tarjoa pysyvää tallennustilaa tutkimusdatalle. Supertietokoneen omassa tallennuksessa on käytäntö, jonka mukaan käyttämätön data poistetaan, joten data on siirrettävä laskennan jälkeen Altaaseen.

Data, jota täytyy säilyttää pidempään kuin vain muutaman viikon ajan, kannattaa kopioida Allas-objektitallennuspalveluun. Allas tarjoaa alustan, jolla voit säilyttää dataasi niin kauan kuin CSC-projektisi on aktiivinen. Tallennuksen lisäksi Allasta voidaan käyttää datan siirtämiseen eri palvelimien välillä ja datan jakamiseen muiden käyttäjien kanssa.

Yksi Allaksen tärkeimmistä käyttötapauksista on datan säilyttäminen silloin, kun sitä ei käytetä aktiivisesti CSC:n supertietokoneilla. Kun aloitat työskentelyn, tuot datan Allaksesta käyttöön. Ja kun dataa ei enää käytetä aktiivisesti, se voidaan siirtää takaisin Altaaseen.

Jos et ole käyttänyt Allasta aiemmin, aloita lukemalla Allaksen yleisesittely, joka sisältää paljon tärkeitä asioita.

Lisätietoa aiheista:

Datan lataamiseen palveluun tai lataamiseen Allaksesta supertietokoneiden ja Allaksen välillä on paljon erilaisia työkaluja. Voit käyttää Puhdin tai Mahdin selainkäyttöliittymää, komentorivityökaluja tai Python-, R- tai muita työkaluja. Puhdissa ja Mahdissa Allaksen komentorivityökalut ovat CSC:n asentamia ja saatavilla allas-moduulin kautta.

Oletuksena CSC:n laskentaprojekteilla ei ole pääsyä Allakseen. Projektin johtajan täytyy hakea Allas-palvelua erikseen MyCSC:ssä. Allaksen esittelysivulla kerrotaan, miten tämä tehdään, sekä oletuskiintiöistä ja lisätallennustilan hakemisesta.

Esimerkit

Tämä ohje sisältää neljä esimerkkiä Allaksen käytöstä Puhdissa ja Mahdissa. Esimerkit perustuvat interaktiivisesti suoritettuihin komentoihin, joten esimerkit 1, 2 ja 4 soveltuvat vain suhteellisen pienille aineistoille (enintään joitakin satoja gigatavuja). Kolmas esimerkki sopii myös suuremmille aineistoille.

  1. Ensimmäisessä esimerkissä käytetään a-komentoja (a-put, a-get) datan lataamiseen palveluun Mahdista Altaaseen ja sen jälkeen datan lataamiseen Allaksesta Puhtiin.
  2. Toisessa esimerkissä siirretään sama data käyttäen Rclonea.
  3. Kolmas esimerkki keskittyy suurten tiedostojen lataamiseen palveluun Allakseen.
  4. Neljäs esimerkki käsittelee tapausta, jossa kopioitava aineisto sisältää suuren määrän tiedostoja.

a-komennot soveltuvat paremmin tilanteisiin, joissa dataa käytetään pääasiassa CSC:n laskentaympäristössä (Puhti, Mahti). Toinen vaihtoehto, Rclone, sopii hyvin tilanteisiin, joissa dataa käytetään myös CSC:n ulkopuolella.

Esimerkki 1: Allaksen käyttö a-komennoilla

A. Datan lataaminen palveluun Mahdista Altaaseen

a-komennot ovat Allas-kohtaisia työkaluja, joiden avulla Allaksen käyttö on helppo aloittaa. a-komennot arkistoivat ja siirtävät dataa automaattisesti. Voit myös pakata datan ennen tallennusta. Esimerkiksi tekstimuotoisessa datassa pakkaus vähentää tarvittavaa tallennustilaa, mutta toisaalta hidastaa siirtoprosessia hieman. a-komennot ovat hyvä vaihtoehto monenlaiselle datalle, jota käytetään enimmäkseen CSC-ympäristössä.

Tässä esimerkissä meillä on alihakemisto genomes/zebrafish projektin scratch-hakemistossa Mahdissa (/scratch/project_2001659). Hakemisto zebrafish sisältää alla luetellut kahdeksan tiedostoa:

[kkayttaj@mahti-login11 ~]$ ls /scratch/project_2001659/genomes/zebrafish
Danio_rerio.GRCz10.91.1.bt2      Danio_rerio.GRCz10.91.2.bt2  
Danio_rerio.GRCz10.91.3.bt2      Danio_rerio.GRCz10.91.4.bt2  
Danio_rerio.GRCz10.91.rev.1.bt2  Danio_rerio.GRCz10.91.rev.2.bt2  
Danio_rerio.GRCz10.fa            Danio_rerio.GRCz10.fa.fai

Kopioidaksemme tämän hakemiston sisällön Altaaseen asetamme ensin Allas-ympäristön:

module load allas

Sen jälkeen avaamme yhteyden Allakseen komennolla allas-conf. Komento pyytää käyttäjän CSC-salasanaa ja listaa sitten käytettävissä olevat Allas-projektit. Tässä tapauksessa valitsemme project_2001659.

[kkayttaj@mahti-login11 ~]$ allas-conf
Mode swift
Please enter CSC password for account kkayttaj: <password>
Checking projects available for your account.
Please wait.
1) project_2000982     2) project_2001659     3) project_2000136      4) abort allas_conf
Please choose a project by giving an item number from the list above: 2
Configuration will be done for project: project_2001659
Protocols:
  swift
Connection stays active for eight hours.

allas-conf avaa yhteyden määritettyyn Allas-projektiin kahdeksaksi tunniksi. Jos haluamme alkaa käyttää toista projektia, meidän täytyy suorittaa allas-conf uudelleen. Yhdessä shell-istunnossa allas-conf sallii kuitenkin vain yhden Allas-projektin olla aktiivisena kerrallaan. Huomaa, että tietyt työkalut, esimerkiksi rclone, voidaan silti määrittää käyttämään useita Allas-projekteja samanaikaisesti.

Seuraavaksi siirrymme zebrafish-hakemistoon:

cd /scratch/project_2001659/genomes/zebrafish

Voimme nyt ladata tiedostoja palveluun yksi kerrallaan Altaaseen komennolla a-put:

a-put Danio_rerio.GRCz10.fa

Latausprosessin lopussa komento ilmoittaa:

-------------------------------------------------------------------------------
1 files from Danio_rerio.GRCz10.fa uploaded to bucket 2001659-mahti-SCRATCH in Allas as one file: 
2001659-mahti-SCRATCH/genomes/zebrafish/Danio_rerio.GRCz10.fa
-----------------------------------------------------------------

Upload summary:
              Date                      Name  Files Size(kB)         Location in allas
 12.10.20 12:10:50     Danio_rerio.GRCz10.fa      1  1330852 2001659-mahti-SCRATCH/genomes/zebrafish
-----------------------------------------------------------------
OK

Datan siirtäminen Altaaseen tiedosto kerrallaan on hidasta ja tuottaa suuren määrän objekteja. Usein on tehokkaampaa ladata dataa palveluun Allakseen yksi hakemisto kerrallaan ja tallentaa data suurempiin kokonaisuuksiin. Esimerkiksi zebrafish-hakemiston lataamiseksi palveluun siirrymme ensin ylähakemistoon genomes:

cd /scratch/project_2001659/genomes/

Sen jälkeen käytämme a-put-komentoa koko zebrafish-hakemiston lataamiseen palveluun Altaaseen yhtenä objektina:

a-put zebrafish/

Latausprosessin lopussa komento ilmoittaa:

-------------------------------------------------------------------------------
8 files from zebrafish uploaded to bucket 2001659-mahti-SCRATCH in Allas as one tar file: 
2001659-mahti-SCRATCH/genomes/zebrafish.tar
-----------------------------------------------------------------

Upload summary:
              Date                      Name  Files Size(kB)         Location in allas
 12.10.20 14:10:47                 zebrafish      8  3191656 2001659-mahti-SCRATCH/genomes
-----------------------------------------------------------------
OK

Tämän jälkeen meillä on toinen objekti 2001659-mahti-SCRATCH-ämpärissä:

[kkayttaj@mahti-login11 genomes]$ a-list 2001659-mahti-SCRATCH
2001659-mahti-SCRATCH/genomes/zebrafish.tar
2001659-mahti-SCRATCH/genomes/zebrafish/Danio_rerio.GRCz10.fa

Huomaa, että tiedosto Danio_rerio.GRCz10.fa on nyt itse asiassa tallennettu Allakseen kahdesti: sekä yksittäisenä objektina (genomes/zebrafish/Danio_rerio.GRCz10.fa) että osana objektia genomes/zebrafish.tar.

B. Lataaminen Puhtiin

Seuraavaksi lataamme saman datan Puhtiin. Yhdistettyämme Puhtiin siirrymme projektin 2001659 scratch-hakemistoon ja lataamme allas-moduulin:

cd /scratch/project_2001659
module load allas

Tässä tapauksessa haluamme käyttää Allasta projektilla project_2001659, joten voimme antaa projektin nimen argumenttina komennolle allas-conf:

allas-conf project_2001659

Nyt määritysprosessi pyytää vain CSC-salasanan ja muodostaa sitten yhteyden Allakseen projektia 2001659 varten. Koska Puhdin scratch-hakemisto on kaikkien projektin jäsenten yhteinen, luomme käyttäjäkohtaisen alihakemiston kkayttaj:

mkdir -p kkayttaj
cd kkayttaj/

Komennolla a-list voimme nyt nähdä objektit, jotka juuri ladattiin palveluun Mahdista Altaaseen:

[kkayttaj@puhti-login12 kkayttaj]$ a-list
2001659-mahti-SCRATCH
[kkayttaj@puhti-login12 kkayttaj]$ a-list 2001659-mahti-SCRATCH
2001659-mahti-SCRATCH/genomes/zebrafish.tar
2001659-mahti-SCRATCH/genomes/zebrafish/Danio_rerio.GRCz10.fa

Datan paikantaminen on helppoa, koska ämpärissä on vain kaksi objektia, mutta kun Allakseen lisätään enemmän dataa, tietyn tiedoston löytäminen kymmenien ämpärien ja satojen objektien joukosta voi olla vaikeaa. Siinä tapauksessa voit etsiä tiettyä tiedostoa komennolla a-find. Tässä esimerkissä voimme tarkistaa, sisältääkö jokin objekti tiedoston Danio_rerio.GRCz10.fa:

[kkayttaj@puhti-login12 kkayttaj]$ a-find -a Danio_rerio.GRCz10.fa
----------------------------------------------
Checking bucket: 2001659-mahti-SCRATCH
Object: 2001659-mahti-SCRATCH/genomes/zebrafish.tar 
includes 2 file names that that match query: Danio_rerio.GRCz10.fa
Object: 2001659-mahti-SCRATCH/genomes/zebrafish/Danio_rerio.GRCz10.fa
includes 1 file names that that match query: Danio_rerio.GRCz10.fa
------------------------------------------------ 
Query: Danio_rerio.GRCz10.fa
Total of 3 hits were found in 2 objects
-------------------------------------------------

Yllä oleva a-find-raportti kertoo esimerkiksi, että objekti 2001659-mahti-SCRATCH/genomes/zebrafish.tar sisältää kaksi tiedostoa, joiden nimet vastaavat hakua Danio_rerio.GRCz10.fa (toinen tiedosto on Danio_rerio.GRCz10.fa.fai). Huomaa, että a-find löytää osumia vain objekteista, jotka on ladattu palveluun a-put-komennolla.

Seuraavaksi lataamme datan Puhtiin komennolla a-get:

[kkayttaj@puhti-login12 kkayttaj]$ a-get 2001659-mahti-SCRATCH/genomes/zebrafish.tar
Starting to copy data from allas...
Object:
  2001659-mahti-SCRATCH/genomes/zebrafish.tar
copied and uncompressed from allas into:
  zebrafish

Tämän jälkeen Puhdin nykyisessä työhakemistossa on uusi hakemisto zebrafish, joka sisältää tiedostot, jotka aiemmin ladattiin palveluun Mahdista Altaaseen:

[kkayttaj@puhti-login12 kkayttaj]$ ls zebrafish/
Danio_rerio.GRCz10.91.1.bt2      Danio_rerio.GRCz10.91.3.bt2  
Danio_rerio.GRCz10.91.2.bt2      Danio_rerio.GRCz10.91.4.bt2
Danio_rerio.GRCz10.91.rev.1.bt2  Danio_rerio.GRCz10.fa
Danio_rerio.GRCz10.91.rev.2.bt2  Danio_rerio.GRCz10.fa.fai

Esimerkki 2: Allaksen käyttö Rclonella

A. Datan lataaminen palveluun Rclonella

Rclone on tehokäyttäjän työkalu Allakselle. Se sopii hyvin tilanteisiin, joissa data täytyy tallentaa siten, että jokainen tiedosto on erillinen objekti.

Warning

Rclone tarjoaa nopean ja tehokkaan tavan käyttää Allasta, mutta sitä tulee käyttää varovasti, sillä Rclone-toiminnot voivat ylikirjoittaa ja poistaa dataa sekä Allaksessa että paikallisessa levyympäristössä ilmoittamatta tai pyytämättä vahvistusta.

Tässä esimerkissä käytetään samaa dataa kuin edellisessä tapauksessa: Mahdin scratch-hakemistossa meillä on alihakemisto genomes/zebrafish, joka sisältää alla luetellut kahdeksan tiedostoa:

[kkayttaj@mahti-login11 ~]$ ls /scratch/project_2001659/genomes/zebrafish
Danio_rerio.GRCz10.91.1.bt2      Danio_rerio.GRCz10.91.2.bt2  
Danio_rerio.GRCz10.91.3.bt2      Danio_rerio.GRCz10.91.4.bt2  
Danio_rerio.GRCz10.91.rev.1.bt2  Danio_rerio.GRCz10.91.rev.2.bt2  
Danio_rerio.GRCz10.fa            Danio_rerio.GRCz10.fa.fai

Kopioidaksemme tämän hakemiston sisällön Altaaseen asetamme ensin Allas-ympäristön:

module load allas

Sen jälkeen avaamme yhteyden Allakseen komennolla allas-conf. Komento pyytää käyttäjän CSC-salasanaa ja listaa sitten Allas-projektit, joihin käyttäjällä on pääsy. Tässä tapauksessa valitsemme project_2001659:

[kkayttaj@mahti-login11 ~]$ allas-conf
Please enter CSC password for account kkayttaj: <password>
Checking projects available for your account.
Please wait.
1) project_2000982     2) project_2001659     3) project_2000136      4) abort allas_conf
Please choose a project by giving an item number from the list above: 2
Configuration will be done for project: project_2001659
Protocols:
  swift
Connection stays active for eight hours.

Yllä oleva allas-conf-toimenpide määrittää Allas-yhteyden, joka on voimassa kahdeksan tuntia. Seuraavaksi siirrymme genomes-hakemistoon:

cd /scratch/project_2001659/genomes

Edellisessä esimerkissä käytetyn a-put-komennon sijaan käytämme komentoa rclone copyto kopioidaksemme kaikki annetun hakemiston tiedostot Altaaseen. rclone-tapauksessa oletusämpäriä ei ole. Sen sijaan meidän täytyy määrittää ämpäri. Tässä esimerkissä käytämme ämpärin nimeä 2001659-genomes ja määritämme jokaisen objektin nimen alkamaan etuliitteellä zebrafish.

rclone copyto zebrafish/ allas:2001659-genomes/zebrafish

Tiedostojen kopioinnin jälkeen voimme käyttää komentoa rclone ls nähdäksemme, mitä Allakseen on ladattu palveluun:

[kkayttaj@mahti-login11 genomes] rclone ls allas:2001659-genomes/zebrafish
450646234 Danio_rerio.GRCz10.91.1.bt2
334651392 Danio_rerio.GRCz10.91.2.bt2
   187325 Danio_rerio.GRCz10.91.3.bt2
334651387 Danio_rerio.GRCz10.91.4.bt2
450646234 Danio_rerio.GRCz10.91.rev.1.bt2
334651392 Danio_rerio.GRCz10.91.rev.2.bt2
1362788082 Danio_rerio.GRCz10.fa
      715 Danio_rerio.GRCz10.fa.fai

B. Datan lataaminen Puhtiin

Seuraavaksi lataamme saman datan Puhtiin. Yhdistettyämme Puhtiin siirrymme projektin project_2001659 scratch-hakemistoon ja lataamme allas-moduulin:

cd /scratch/project_2001659
module load allas

Tässä tapauksessa haluamme käyttää Allasta projektilla 2001659, joten voimme antaa projektin nimen argumenttina komennolle allas-conf:

allas-conf project_2001659

Nyt määritysprosessi pyytää vain CSC-salasanan ja muodostaa sitten yhteyden Allakseen projektia 2001659 varten. Koska Puhdin scratch-hakemisto on kaikkien projektin jäsenten yhteinen, luomme käyttäjäkohtaisen alihakemiston kkayttaj ja siirrymme sinne:

mkdir -p kkayttaj
cd kkayttaj/

Voimme nyt käyttää komentoa rclone lsd tarkistaaksemme käytettävissä olevat ämpärit Allaksessa:

[kkayttaj@puhti-login12 kkayttaj]$ rclone lsd allas:
  3268222761 2020-10-03 10:01:42         8 2001659-genomes
  2576778428 2020-10-03 10:01:42         4 2001659-mahti-SCRATCH

Nyt näemme kaksi ämpäriä. 2001659-genomes on tässä esimerkissä juuri luotu, kun taas 2001659-mahti-SCRATCH on peräisin edellisestä a-komentoesimerkistä. Seuraavaksi listaamme objektit 2001659-genomes-ämpärissä:

[kkayttaj@puhti-login12 kkayttaj]$ rclone ls allas:2001659-genomes
450646234 zebrafish/Danio_rerio.GRCz10.91.1.bt2
334651392 zebrafish/Danio_rerio.GRCz10.91.2.bt2
   187325 zebrafish/Danio_rerio.GRCz10.91.3.bt2
334651387 zebrafish/Danio_rerio.GRCz10.91.4.bt2
450646234 zebrafish/Danio_rerio.GRCz10.91.rev.1.bt2
334651392 zebrafish/Danio_rerio.GRCz10.91.rev.2.bt2
1362788082 zebrafish/Danio_rerio.GRCz10.fa
      715 zebrafish/Danio_rerio.GRCz10.fa.fa

Lopuksi käytämme komentoa rclone copyto kopioidaksemme datan Allaksesta Puhtiin uuteen hakemistoon zebrafish2:

[kkayttaj@puhti-login12 kkayttaj]$ rclone -P copyto allas:2001659-genomes/zebrafish zebrafish2
Transferred:        3.044 GiB / 3.044 GiB, 100%, 323.600 MBytes/s, ETA 0s
Transferred:            8 / 8, 100%
Elapsed time:        9.6s

[kkayttaj@puhti-login12 kkayttaj]$ ls zebrafish2
Danio_rerio.GRCz10.91.1.bt2      Danio_rerio.GRCz10.91.3.bt2  
Danio_rerio.GRCz10.91.2.bt2      Danio_rerio.GRCz10.91.4.bt2
Danio_rerio.GRCz10.91.rev.1.bt2  Danio_rerio.GRCz10.fa
Danio_rerio.GRCz10.91.rev.2.bt2  Danio_rerio.GRCz10.fa.fai

Esimerkki 3: Suurten tiedostojen lataaminen palveluun Allakseen

Kahdessa edellisessä esimerkissä datan todellinen määrä oli melko kohtuullinen, vain muutamia gigatavuja. Jos yksittäisen datatiedoston koko on satoja gigatavuja tai enemmän, jo muutaman tiedoston siirtäminen voi kestää pidempään kuin token-pohjaisen Allas-tunnistautumisen voimassaoloaika.

Tässä esimerkissä käytämme a-put-komentoa suurten tiedostojen joukon lataamiseen palveluun Mahdista Altaaseen.

Ensimmäinen tehtävä on avata Mahti-yhteys, joka voi pysyä käynnissä pitkään. Tässä esimerkissä käytämme screen-komentoa avataksemme istunnon, joka voidaan jättää käyntiin taustalle:

ssh <username>@mahti.csc.fi
screen

screen-komento käynnistää virtuaalisen istunnon Mahdin kirjautumissolmulla. Voit jättää tämän virtuaalisen screen-istunnon käyntiin taustalle ja kirjautua ulos Mahdista, mutta sinun tulee tarkistaa, millä kirjautumissolmulla (mahti-login[11,12,14,15]) istuntosi on käynnissä, koska sinun täytyy kirjautua samalle solmulle yhdistääksesi myöhemmin uudelleen screen-istuntoosi.

screen-istunnossa lataa ensin allas-moduuli ja käytä allas-conf-komentoa yhteyden muodostamiseen Allakseen.

module load allas
allas-conf -k

Tässä allas-conf-komentoa käytetään valitsimella -k, joka tallentaa CSC-salasanasi ympäristömuuttujaan ($OS_PASSWORD), jotta yhteys Allakseen voidaan myöhemmin määrittää automaattisesti uudelleen ilman, että salasanaa tarvitsee antaa uudestaan.

Allas-yhteyden avaamisen jälkeen siirrymme hakemistoon my_data, jossa meillä on kolme alihakemistoa (50, 90, 100). Listaamme näissä hakemistoissa olevat gzip-pakatut tiedostot:

[kkayttaj@mahti-login11 ~] cd /scratch/project_2001659/my_data
[kkayttaj@mahti-login my_data] ls -lh */*.gz
-rw-rwxr-x 1 kkayttaj csc  45G May  8 12:57 100/uniref100.fasta.gz
-rw-rwxr-x 1 kkayttaj csc  61G Jun  5 13:09 100/uniref100.xml.gz
-rw-rwxr-x 1 kkayttaj csc 589M Jun  5 13:09 50/uniref50.fasta.gz
-rw-rwxr-x 1 kkayttaj csc  17G Jun  5 13:09 50/uniref50.xml.gz
-rw-r-xr-x 1 kkayttaj csc 4.2G Jul  6 09:46 90/uniref90.fasta.gz
-rw-rwxr-x 1 kkayttaj csc  33G Jun  5 13:09 90/uniref90.xml.gz

Seuraavaksi käynnistämme latausprosessin. Tässä tapauksessa emme käytä oletusämpärin nimeä, vaan annamme nimeksi 2001659-uniref:

a-put -b 2001659-uniref */*.gz

Tämä komento lataa yllä luetellut tiedostot palveluun Allakseen. Vaihtoehtoisesti voisimme käynnistää saman latauksen komennolla rclone copy:

for f in */*.gz
do
    rclone copy $f allas:2001659-uniref
done

Voimme jättää istunnon käyntiin taustalle painamalla Ctrl-A D. Nyt voimme kirjautua ulos Mahdista niin, että screen-istunto pysyy aktiivisena käyttämällämme Mahdin kirjautumissolmulla (tässä tapauksessa mahti-login11).

Yhdistääksemme tähän istuntoon uudelleen muodostamme ensin yhteyden siihen Mahdin solmuun, jolla screen-istunto on käynnissä:

ssh <username>@mahti-login11.csc.fi

Sen jälkeen liitämme screen-istunnon uudelleen:

screen -r

Kun a-put-komento on valmis, suoritamme a-check-komennon tarkistaaksemme, että kaikki dataobjektit on luotu. a-check täytyy suorittaa täsmälleen samoilla valitsimilla kuin a-put-komento. Tässä tapauksessa komento olisi siis:

a-check -b 2001659-uniref */*.gz

a-check-komento vertaa palveluun ladattavien kohteiden nimiä niitä vastaaviin objekteihin Allaksessa. Tiedostot tai hakemistot, joille ei löydy kohdeobjektia Allaksesta, raportoidaan ja tallennetaan tiedostoon. Tässä tapauksessa, jos jokin yllä olevan a-put-komennon objekteista puuttuisi, a-check listaisi puuttuvat tiedostot ja hakemistot tiedostoon missing_2001659-uniref_63449 (lopussa oleva numero on vain satunnaisluku).

Puuttuvien kohteiden tiedostoa voidaan sitten käyttää a-put-komennon valitsimella --input-list epäonnistuneen latausprosessin jatkamiseksi:

a-put -b 2001659-uniref --nc --input-list missing_2001659-uniref_63449

Huomaa, että a-check ei tarkista, ovatko objektin todelliset sisällöt oikeita. Se tarkistaa vain objektien nimet, jotka voivat yhtä hyvin olla peräisin jostakin muusta lähteestä.

Esimerkki 4: Monimutkaisten hakemistorakenteiden lataaminen palveluun Allakseen

Jotkin työnkulut ja ohjelmistot luovat monimutkaisia hakemistorakenteita datan tallentamiseen ja hallintaan. Sinulla voi olla hakemistoja, joissa on tuhansia tai jopa miljoonia yksittäisiä tiedostoja. Tällaisten aineistojen kopioiminen Allakseen vie aikaa eikä ole aina suoraviivaista. Järkevin tapa ladata tällaista dataa palveluun riippuu tapauksesta. Tämä esimerkki esittelee muutamia vaihtoehtoja.

Aloitamme avaamalla screen-istunnon Puhdissa ja muodostamalla Allas-yhteyden aivan kuten edellisessä esimerkissä:

ssh <username>@puhti.csc.fi
screen
module load allas
allas-conf -k

Oletetaan, että meillä on hakemistorakenne, joka sisältää kuvia tienpintakameroista kymmenestä sijainnista kymmenen minuutin välein vuosilta 2014–2018. Data sijaitsee hakemistossa road_cameras, jossa jokaisella sijainnilla on oma alihakemistonsa (kymmenen hakemistoa). Kunkin alihakemiston sisällä on toinen alihakemistokerros, yksi jokaiselle vuodelle (viisi alihakemistoa), joista kukin sisältää alihakemistot vuoden jokaiselle päivälle (lisäksi 365 alihakemistoa), joista kukin sisältää 144 pientä kuvatiedostoa.

Esimerkiksi:

road_cameras/site_7/2017/day211/image_654887.jpg

Näin ollen tiedostojen kokonaismäärä hakemistossa road_cameras on 10 * 5 * 365 * 144 = 2 628 000.

Periaatteessa voisimme kopioida kaikki 2,6 miljoonaa tiedostoa erillisinä objekteina Allakseen, mutta siinä tapauksessa data pitäisi jakaa useisiin ämpäreihin, koska yhdessä ämpärissä voi olla enintään 0,5 miljoonaa objektia. Voisit esimerkiksi suorittaa erillisen rclone-komennon jokaiselle site_*-hakemistolle ja sijoittaa kunkin sijainnin datan sijaintikohtaiseen ämpäriin. Esimerkiksi:

rclone copyto road_cameras/site_1 allas:2001659_road_cameras_site_1/

Tällä tavalla loisit kymmenen ämpäriä, joista kukin sisältäisi 262 800 objektia. Tämä lähestymistapa voisi olla tehokkain tapa tallentaa ja käyttää dataa uudelleen, jos tiedät tarvitsevasi pääsyn yksittäisiin kuviin satunnaisesti.

Toisena äärivaihtoehtona voisimme käyttää a-put-komentoa ja kerätä kaiken datan yhdeksi arkisto-objektiksi. Jotta tämä onnistuu, sinun täytyy lisätä valitsin --skip-filelist a-put-komentoon. Oletuksena a-put kerää yksityiskohtaisen metadatan jokaisesta tiedostosta ameta-tiedostoon. Jos tiedostoja on kuitenkin miljoonia, tämän tiedon kerääminen vie paljon aikaa. Jos sinun tarvitsee tietää tiedostojen nimet, voit käyttää valitsinta --simple-fileslist nimien keräämiseen – mutta ei mitään muuta tietoa – metadatatiedostoon. Tämä jo nopeuttaa esikäsittelyä merkittävästi. Tässä tapauksessa nimeäminen on kuitenkin ollut järjestelmällistä, joten tiedostonimien tallentaminen metadatatiedostoihin voidaan jättää kokonaan pois (--skip-filelist), mikä on nopein vaihtoehto.

a-put --skip-filelist road_cameras/

Tämä lähestymistapa tallentaisi kaikki 2,6 miljoonaa tiedostoa yhtenä objektina.

Käytännössä optimaalinen tapa tallentaa data on kuitenkin usein jotakin näiden kahden ääripään väliltä. Kompromissina voisit käyttää pakkaamista hierarkian ylemmällä tasolla. Esimerkiksi:

a-put --skip-filelist road_cameras/site_*

Tämä tuottaisi kymmenen objektia, joista kukin sisältäisi kaikki yhden kamerasijainnin tiedot. Vaihtoehtoisesti voisit arkistoida datan niin, että kunkin kameran kunkin vuoden data kerätään yhdeksi objektiksi:

a-put --skip-filelist road_cameras/site_*/20*

Tämä vaihtoehto tallentaisi datan 50 objektina. Päiväkohtaiset objektit kullekin kameralle voisivat olla käytännöllisin vaihtoehto datan myöhempää käyttöä varten, mutta haittapuolena datan esikäsittely 10 * 5 * 365 = 18250 objektiksi veisi todennäköisesti melko paljon aikaa.

Miljoonien tiedostojen kopioiminen Allakseen vie paljon aikaa menetelmästä riippumatta. Jos olemme käynnistäneet a-put-komennon screen-istunnon sisällä, voimme irrottautua virtuaali-istunnosta painamalla Ctrl-A D, kirjautua ulos Puhdista ja jättää latausprosessin käyntiin päiviksi.

Kun a-put-komento on valmis, suoritamme a-check-komennon tarkistaaksemme, että kaikki dataobjektit on luotu. a-check täytyy suorittaa täsmälleen samoilla valitsimilla kuin a-put-komento. Tässä tapauksessa komento olisi siis:

a-check --skip-filelist road_cameras/site_*/20*

a-check-komento vertaa palveluun ladattavien kohteiden nimiä niitä vastaaviin objekteihin Allaksessa. Tiedostot tai hakemistot, joille ei löydy kohdeobjektia Allaksesta, raportoidaan ja tallennetaan tiedostoon. Tässä tapauksessa, jos jokin yllä olevan a-put-komennon objekteista puuttuisi, a-check listaisi puuttuvat tiedostot ja hakemistot tiedostoon missing_<bucket_name>_<number> (lopussa oleva numero on vain satunnaisluku).

Puuttuvien kohteiden tiedostoa voidaan sitten käyttää a-put-komennon valitsimella --input-list epäonnistuneen latausprosessin jatkamiseksi:

a-put -b 2001659-uniref --nc --input-list missing_<bucket_name>_<number>

Huomaa, että a-check ei tarkista, ovatko objektin todelliset sisällöt oikeita. Se tarkistaa vain objektien nimet, jotka voivat yhtä hyvin olla peräisin jostakin muusta lähteestä.

Suomenkielinen tekoälykäännös

Sisällössä voi esiintyä virheellistä tietoa tekoälykäännöksestä johtuen.

Klikkaa tästä antaaksesi palautetta