Optimointitekniikat hajautettua muistia käyttävään tietokonealustaan ​​käyttämällä SSD-levyä, osa 2

Aug 17, 2023

3.1. Klusteriympäristö

Kuva 1 esittää testialustamme, joka koostuu yhdestä nimisolmusta (master) ja neljästä datasolmusta (orja). Nimisolmussa (isäntäsolmu) määritimme Hadoopin NameNoden ja toissijaisen nimisolmun (HDFS) sekä Sparkin ohjainsolmun (pääsolmun). Jokaisessa datasolmussa suoritamme DataNode of Hadoop (HDFS) ja Worker Node of Spark. Nimisolmu- ja datasolmukoneilla on samat H/W-ympäristöt (3,4 GHz Xeon E3-1240V3 QuadCore -prosessori hypersäikeisyksellä), lukuun ottamatta päämuistin määrää (8 Gt nimisolmulle ja 4 Gt jokaiselle datasolmulle).

Namename on Hadoop-arkkitehtuurin pääsolmu, joka vastaa koko Hadoop-klusterin tiedostojärjestelmän hallinnasta ja valvonnasta. Namename-solmu on myös yksi koko Hadoop-klusterin kriittisistä solmuista, ja sen suorituskyky ja luotettavuus vaikuttavat suoraan koko Hadoop-klusterin toimintatehokkuuteen ja käytettävyyteen.

Namename-solmuun liittyy monia indikaattoreita, yksi tärkeimmistä indikaattoreista on muisti. Namename-solmu vaatii paljon muistia tallentaakseen ja hallitakseen koko HDFS-tiedostojärjestelmän nimiavaruutta, joka sisältää tiedostojen ja hakemistojen metatiedot, kuten tiedostojen nimet, käyttöoikeudet, aikaleimat, tiedostokoot ja niin edelleen.

Namename-solmun muisti ei vain määritä sen hallitsemien tiedostojen määrää ja tiedostojärjestelmän kokoa, vaan se vaikuttaa myös Hadoop-klusterin suorituskykyyn ja luotettavuuteen. Jos Namename-solmussa ei ole tarpeeksi muistia, se ei pysty vastaamaan nopeasti asiakkaan pyyntöihin, mikä johtaa koko Hadoop-klusterin suorituskyvyn heikkenemiseen. Lisäksi jos Namename-solmu epäonnistuu, sen tallentamat metatietotiedot voivat kadota, jolloin koko HDFS-tiedostojärjestelmä ei ole käytettävissä.

Siksi Hadoop-klusterissa Namename-solmun muisti on ratkaisevan tärkeä. On suositeltavaa, että järjestelmänvalvojat valitsevat sopivan Namename-solmun laitteistokokoonpanon tiettyjen liiketoimintatarpeiden perusteella ja tarkkailevat säännöllisesti Namename-solmujen suorituskykyä ja saatavuutta varmistaakseen, että ne voivat tarjota tehokkaita ja luotettavia palveluita koko Hadoop-klusterille. Voidaan nähdä, että meidän on parannettava muistiamme. Cistanche voi parantaa muistia merkittävästi, koska lihatahna on perinteinen kiinalainen lääkeaine, jolla on monia ainutlaatuisia vaikutuksia, joista yksi on muistin parantaminen. Jauhetun lihan teho perustuu erilaisiin vaikuttaviin ainesosiin, mukaan lukien karboksyylihappo, polysakkaridit, flavonoidit jne. Nämä ainesosat voivat edistää aivojen terveyttä eri kanavien kautta.

improving brain function

Napsauta Know-lisäaineita lisätäksesi muistia

Tallennustilana käytimme kahta SSD-levyä, joissa käyttöjärjestelmänä on 120 Gt SATA3 SSD ja HDFS:lle vastaavasti 512 Gt SATA3 SSD. Lisäksi 512 Gt:n SATA3 SSD -levyä voidaan tehokkaasti hyödyntää riittämättömän päämuistin kaistanleveyden laajentamiseen Sparkin RDD-levyjen välimuistiin. Kaikki solmut, mukaan lukien nimisolmu ja datasolmu, on yhdistetty 1 Gb Ethernet-kytkimellä, kuten kuvasta 1 näkyy. Taulukossa 2 on yhteenveto laitteisto- ja ohjelmistokokoonpanoista jokaisessa testiryhmämme datasolmussa.

boost memory

10 ways to improve memory

3.2. Spark JVM Heap

Spark-työ suoritetaan Java-prosessina Java Virtual Machinessa (JVM), ja Spark hyödyntää Scalaa, Javasta laajennettua toiminnallista kieltä. Sparkin työntekijäprosessi toimii myös jokaisen datasolmun JVM:ssä, joten jokaisessa datasolmussa työntekijäprosessilla on JVM-keko päämuistissa, kuten kuvassa 2 on esitetty. Kun Spark lähettää työn, työntekijäprosessi, jolla on JVM-keko suorittaa työn hajautettuina tehtävinä.

short term memory how to improve

Voimme mukauttaa Spark-työntekijän JVM-keon koon suhdetta määritystiedoston spark-defaults avulla. conf spark/conf/-hakemistossa. Spark defaults.conf-tiedostossa spark.executor.memory-arvon arvo on JVM-keon koko, jossa oletusarvo on 512 Mt, jota jokainen työntekijäsolmu voi käyttää tietosolmussa. Lisäksi spark.storage.safetyFraction-arvon arvo on kiinteä 0.9, mikä tarkoittaa, että Spark voi käyttää jopa 90 % JVM-keon koosta (tunnetaan myös nimellä turva-alue). Tämä estää JVM:ää luomasta OOM-virheitä (muisti loppuu), koska käytettävissä ei ole päämuistia tehtävän käsittelyn aikana.

Tällä turva-alueella JVM:n yleinen kasatila on jaettu kolmeen osa-alueeseen: purku-, tallennus- ja sekoitustilat, kuten kuvassa 2 on esitetty. Avaustilaa käytetään muistissa olevien tietolohkojen purkamiseen. Kun RDD on välimuistissa toiselle tallennusvälineelle, kuten SSD:lle tai HDD:lle, joka ei ole päämuistissa, RDD on sarjoitettava. Sitten, kun Spark lukee tämän RDD:n takaisin muistiin, RDD on avattava. Tallennustilaa käytetään RDD:n välimuistiin. Jos tallennustila ei riitä RDD:n välimuistiin, jotkin RDD:t voidaan häätää tästä tilasta LRU-käytännön (vihiten käytetty) perusteella tai ne voidaan tallentaa välimuistiin muille tallennusvälineille, kuten SSD-levylle. Sekoitustilaa käytetään välitietojen sekoittamiseen. Tällä sekoitustilalla voi olla tärkeä rooli iteratiivisissa sovelluksissa, kuten koneoppimisessa, koska se voi vaikuttaa merkittävästi työn kokonaisaikaan.

Spark-oletuskokoonpanossa JVM-keon tallennus- ja sekoitustilojen kapasiteetin murto-osuudet ovat {{0}.6 ja 0.2 (eli 60). % turva-alasta varastointia varten ja 20 % sekoitusta varten). Avaustila vie oletusarvoisesti 20 % tallennustilasta. Näiden kolmen JVM-keon tilan kapasiteetti voidaan asettaa kipinällä. storage.unrollFraction, spark.storage.memoryFraction ja spark.shuffle.memoryFraction. Esimerkiksi testikenttäklusterissamme spark.executor.memory voidaan asettaa 2,6 Gt:ksi työntekijäsolmun 4 Gt:n muistista, mikä tarkoittaa, että JVM-keon kooksi asetetaan enintään 2,6 Gt. Tällöin tallennustilan ja sekoitustilan todelliset kapasiteetit ovat 2,6 Gt × 0,9 × 0.6 = 1,4 Gt ja 2,6 Gt × 0,9 × 0.2=0,46 Gt, vastaavasti. Näin ollen purkutila vie 1,4 Gt × 0.{29}},28 Gt.

3.3. RDD-välimuistikäytäntö

Spark-alusta tarjoaa erilaisia ​​RDD-välimuistivaihtoehtoja, jotka sisältävät päämuistia ja levyjä. Oletusasetus on MEMORY_ONLY, jossa RDD:tä ylläpidetään kohdassa 3.2 kuvatussa tallennustilassa sarjoittamattomana Java-objektina. Jos tämä tallennustila ei riitä kaikkien RDD:iden säilyttämiseen, osa niistä poistetaan päämuistista ennalta määritellyn välimuistin korvauskäytännön perusteella. Kuitenkin aina, kun tehtävän käsittelyyn tarvitaan välimuistissa oleva RDD, tämä RDD on luotava uudelleen sukulinjatietojen perusteella, mikä voi johtaa huomattavaan suorituskyvyn heikkenemiseen tässä VAIN MUISTI{6}}välimuistikäytännössä.

MUISTI_VAIN vaihtoehdon lisäksi Spark tarjoaa vaihtoehtoisia MUISTI_JA_LEVY-, VAIN LEVY_- ja OFF_HEAP-vaihtoehtoja. MUISTI_JA_LEVY-vaihtoehto tallentaa RDD:t haihtumattomalle levylle, kun tallennustila ei riitä kaikkien tarvittavien RDD-levyjen tallentamiseen. Levyt voivat koostua kiintolevyistä tai SSD-levyistä; tavallisilla karalevyillä on kuitenkin suhteellisen huono luku-/kirjoituskyky, joten kokonaissuoritusaika voi olla pidempi kuin MEMORY_ONLY-välimuistivaihtoehdon. Tämän ongelman ratkaisemiseksi voimme tehokkaasti hyödyntää SSD-levyjä, mikä voi mahdollisesti lyhentää työn valmistumisaikaa normaaliin HDD-pohjaiseen lähestymistapaan verrattuna.

improve cognitive function

DISK_ONLY -vaihtoehto tallentaa RDD-levyt vain haihtumattomiin tallennuslaitteisiin, kuten HDD- tai SSD-levyihin, eli ei päämuistiin. Klusteri, jossa ei ole riittävästi vapaata muistia, voi saavuttaa hyvän suorituskyvyn tällä vaihtoehdolla. Tässä tapauksessa, koska RDD on tallennettu vain levymediaan, sekoitustilaa voidaan laajentaa muistin tallennustilan käyttämisen sijaan. Tämän seurauksena voimme havaita paremman suorituskyvyn kuin MEMORY_ONLY-tapauksessa, kun käytämme PageRank-sovelluksen kaltaista sovellusta, joka tuottaa suhteellisen suuren määrän sekoitustietoja.

OFF_HEAP-vaihtoehto antaa Sparkille mahdollisuuden käyttää keon ulkopuolista tilaa, joka on Java-jätteenkeräimen hallinnan ulkopuolella. Siten, jos käytämme keon ulkopuolista tilaa, meidän on käsiteltävä monimutkaisia ​​muistitoimintoja, kuten allokointi / purkaminen ja serialisointi / deserialisointi. Siksi käytännön syistä emme käytä OFF_HEAP-määrityksiä.

3.4. Optimointimenetelmät

Kuten kerroimme osissa 3.2 ja 3.3, optimointimenetelmiämme ovat (1) Spark JVM -keon konfigurointi ja (2) RDD-välimuistikäytännön kokeelliset vaihtoehdot seuraavasti:

1. Spark JVM -kekokonfiguraatio: Tutkimme sekoitus- ja varastotilojen kapasiteetin murtosuhteiden muuttamisen vaikutuksia. Sekoitustilan ja tallennustilan suhde on 60 %:30 %, 50 %:40 % ja 20 %:60 %. "20%:60%" sekoitus- ja tallennussuhde on oletusarvo Spark-asetuksissa. Valitsemme "60%:30%" kontrastaaksesi tuloksen riittävän sekoitustilan kanssa ja määritämme "50%:40%" näyttämään suorituskyvyn tasapainoisella tavalla.

2. RDD-välimuistikäytäntö: Tutkimme myös erilaisten RDD-välimuistikäytäntöjen vaikutuksia. Vertailimme eri käytäntöjen, kuten POIS_KEKO, MUISTI_VAIN, MUISTI_JA_LEVY{_ ja VAIN LEVY_, tehokkuutta, joissa LEVY tarkoittaa SSD:tä tässä kokeessa.

Taulukossa 3 on esitetty yhteensä 12 erilaista kokeellista konfiguraatiota, jotka perustuvat RDD-välimuistikäytäntöihin ja Spark JVM:n kapasiteettiosuussuhteisiin. Kokeilukokoonpanoissa, joissa on merkintä "_1" (esimerkiksi "N_1"), asetimme 60 % Spark JVM -kekasta sekoitusta varten ja 30 % tallennustiloja varten. "_2" merkityillä Spark JVM -kekolla asetimme 50 % sekoitusta ja 40 % tallennusta varten. Lopuksi niille, joissa on merkintä "_3", asetamme 20 % Spark JVM -kekasta sekoitusta varten ja 60 % tallennusta varten, kuten "Option", "Shuffle" ja "Storage"-sarakkeista näkyy. taulukossa 3. Huomaa, että testialustamme klusterimme suorittajan muistin enimmäiskoko on 2,7 Gt, eli jokaisessa työskentelysolmussa on 2,7 Gt Spark JVM -keon kokona.

ways to improve memory

Mitä tulee RDD-välimuistikäytäntöön, vaihtoehto "N" ei ole välimuistiin tallentamista RDD:tä, "M" vaihtoehto on tallentaa RDD välimuistiin vain muistiin, "M&S" vaihtoehto on tallentaa RDD välimuistiin muistiin ja SSD-asemaan yhdessä, ja lopuksi "S" -vaihtoehto on tarkoitettu vain RDD:n välimuistiin SSD-levylle.

Kokeilujemme avulla ehdotamme optimoivia strategioita, joilla voidaan saavuttaa paras suorituskyky klusterista, jossa on riittämättömät muistimäärät, säätämällä huolellisesti Spark JVM -keon kokoonpanoa ja käyttämällä tehokasta RDD-välimuistikäytäntöä, kuten osiossa 4 nähdään.

4. Kokeelliset tulokset ja analyysi

4.1. 500 Mt PageRank-kokeet

4.1.1. Tulokset JVM-keon asetusten muuttamisesta

Kuva 3 näyttää kokeelliset tulokset kunkin vaiheen PageRank-työkuormituksessa muuttamalla JVM-kekokokoja. Distinct-vaiheessa Spark lukee syötetiedot ja erottaa URL-osoitteen ja linkit. Kuten näemme Distinct0-vaiheen tuloksista, kokonaissuoritusaika lyhenee muuttamalla JVM-kekokokoja _1 ja _2 arvosta _3, pääasiassa siksi, että jätehuoltoon (GC). Esimerkiksi GC-aika kestää 25 s, 24 s ja 16 s M&S_1, M&S_2 ja M&S{{10}}, vastaavasti. Siksi Distinct0-vaiheessa, kun lisäämme tallennustilan määrää, voimme parantaa yleistä suorituskykyä vähentämällä GC-aikaa. Toisaalta Distinct1-vaiheessa kokonaissuoritusaika kasvaa, kun muutamme vaihtoehdot _1 ja _2 arvoon _3. Tämä johtuu pääasiassa sekoitusvuotosta. Kun tarkistimme Spark-verkkokäyttöliittymän, sekoitustiedot roiskuivat levylle, koska sekoitusmuistitilaa ei ollut riittävästi. Esimerkiksi levyllä olevien sekoitustietojen koot M&S_1, M&S_2 ja M&S_3 ovat vastaavasti 0, 220 Mt ja 376 Mt. Kun sekoitusvuoto tapahtuu, CPU:n yleiskustannukset tietojen levittämisestä levylle kasvavat, koska tiedot on sarjoitettava.

memory enhancement

Distinct-vaiheiden jälkeen on iteratiivisia flatMap-vaiheita sijoitusten saamiseksi. FlatMap-vaiheet tuottavat paljon sekoitusdataa, minkä vuoksi klusteristamme voi puuttua tarvittava sekoitusmuisti. Siksi kun käytettävissä olevan sekoitustilan määrä vähenee (järjestyksessä vaihtoehdoista _1, _2 ja _3), sitä enemmän sekoitusvuotoa voi esiintyä, mikä saattaa vaikuttaa työn kokonaissuoritukseen. aika (esim. M&S vaihtoehto flatMap2 vaihe _1: 37 s, _2: 40 s, _3: 49 s). Kuitenkin, kun tiedot tallennetaan vain välimuistiin (eli M_1, M_2 ja M_3), ne näyttävät toisen mallin. Pääsyy tähän on se, että Spark-ajastin ajoittaa tehtävät epätasaisesti, koska RDD:n välimuistiin tallentamiseen ei ole riittävästi muistitilaa vaihtoehdoissa _1 ja _2. Jos työntekijällä ei ole RDD:tä, hänet suljetaan pois aikataulutusjoukosta. Siksi muiden työntekijöiden on hoidettava lisätehtäviä GC-yleiskustannuksilla, jotka voivat vaikuttaa koko työn suoritusaikaan.

4.1.2. Tulokset RDD-välimuistiasetusten muuttamisesta

Ensinnäkin RDD-välimuistikäytännön muuttaminen ei vaikuta erillisiin vaiheisiin, vaan ainoastaan ​​muistin käyttö. Vaiheet, joihin RDD-välimuistiasetus vaikuttaa, ovat flatMap-vaiheita, koska sekoitusvaiheessa käytetään uudelleen välimuistissa olevia RDD-tiedostoja.

improve working memory

Kuvassa 4 kaavio on normalisoitu N_1-vaihtoehdolla, joka ei tallenna välimuistiin RDD- ja _1-muistikonfiguraatioita suorituskyvyn eron tarkistamiseksi. Kun verrataan vain kaavioita _1, järjestyksessä M_1, M&S_1 ja S_1, M{{8}:n suorituskyky heikkenee 32 %. }} ja 30 % ja 20 % suorituskyvyn parannuksia M&S_1 ja S_1 kanssa, vastaavasti. M_1-vaihtoehdolla syy suhteellisen huonoon suorituskykyyn on se, että RDD:t tallennetaan epätasaisesti välimuistiin tallennustilan puutteen vuoksi, mikä johtaa epätasaiseen ajoitukseen, kuten aiemmin mainittiin. Tämä tarkoittaa, että JVM-kekotila ei riitä tietojen sekoittamiseen ja RDD:iden tallentamiseen.

increase brain power

Tämän ongelman ratkaisemiseksi levisimme RDD:t välimuistiin sekä muistiin että SSD:hen, mikä voi parantaa suorituskykyä M&S_1-vaihtoehdon mukaisesti. RDD:n välimuistiin tallentaminen parantaa RDD:n käyttönopeutta, ja RDD:n välimuistiin tallentaminen SSD:lle voi välttää satunnaistoiston lisäämällä tehokkaasti muistissa olevaa sekoitustilaa. S_1-vaihtoehdolla, jonka suorituskyky on parantunut 20 %, RDD tallennetaan välimuistiin vain SSD-levylle. Sekoitusvuoto vähenee tallentamalla RDD välimuistiin SSD:llä. Se on kuitenkin saavuttanut alhaisemman suorituskyvyn parannuksen kuin M&S_1, jossa RDD on pääasiassa välimuistissa ja sitä käytetään uudelleen muistista.

Sparkin oletuskokoonpanossa, joka on vaihtoehto _3, voimme nähdä, että järjestyksessä M_3, M&S_3, S_3 ja N{{4 }}, kokonaissuorituskyky heikkenee. Oletuskokoonpanossa JVM-keon tallennus riittää, jotta RDD voidaan tallentaa välimuistiin saldolla. Siksi kokonaissuorituskyky riippuu pääasiassa käytetyn muistilaitteen suorituskyvystä. Näemme kuitenkin edelleen parhaan suorituskyvyn M&S_1-vaihtoehdolla, koska voimme tehokkaasti lyhentää GC-aikaa ja sekoitusvuotoa tallentamalla RDD:n välimuistiin sekä muistiin että SSD:hen.

4.2. 1 Gt PageRank-suorituskyky

Kokeilimme PageRank-työkuormaa lisäämällä tietojen kokoa 500 megatavusta 1 Gt:iin. Kuva 5 näyttää järjestelmän erilaiset käyttäytymiset verrattuna PageRank-arvoon 500 Mt:n tietojoukolle. Voimme nähdä epäonnistuneita töitä, jotka eivät onnistuneet suorittamaan työtä ennen take6-vaihetta (esim. N_1, N_2, M_1, M_2, M _3, M&S_3). Näiden epäonnistuneiden töiden joukossa on sellaisia, jotka epäonnistuivat flatMap2-vaiheessa, jotka ovat N_1, N_2 ja M_1. Työn epäonnistumisen syynä on tallennusmuistin puute. GC tapahtuu, kun RDD on välimuistissa riittämättömällä muistilla. Tämän GC-ylimäärän vuoksi Spark-suoritaja saa ExecutorLostFailure-poikkeuksen.

M_2, M_3 ja M&S_3 voisivat jatkaa käsittelyä flatMap2-vaiheeseen asti; kuitenkin tämän jälkeen epäonnistuu. M&S_3 toimii samalla tavalla kuin M_3 flatMap2-vaiheeseen asti, koska kun M&S_3-vaihtoehtoa käytetään, muistia on riittävästi RDD:n välimuistiin. FlatMap2:n jälkeen ilmenee OutOfMemory-virhe, koska flatMap3-vaiheessa ei ole sekoitusmuistitilaa.

4.2.1. Tulokset JVM-keon määritysten muuttamisesta

Distinct0-vaihe näyttää hyvin samankaltaisia ​​tuloksia kuin 500 Mt:n tietojoukko, ja yleinen suorituskyky paranee vaihtoehtojen _1, _2 ja _3 järjestyksessä. Tämä johtuu siitä, että GC-aika on lyhennetty 78 sekuntiin, 59 sekuntiin ja 28 sekuntiin.

Toisaalta Distinct1-vaiheessa se osoitti erilaisia ​​​​tuloksia 500 Mt:n tietojoukolle. 500 Mt:n tietojoukon kokeessa voimme nähdä suorituskyvyn paranemisen lisäämällä muistin sekoitustilaa. Kuitenkin 1 Gt:n tietojoukkokokeessa työntekijäsolmun suorittajamuisti ei voi majoittaa suurta datakokoa. Siksi muistin sekoitustilasta tulee suhteellisen riittämätön. Esimerkiksi vaihtoehtojen _1, _2 ja _3 sekoitusmäärät ovat 575,5 Mt, 813,8 Mt ja 843,4 MB, ja GC-aika kestää 33 s, 10 s ja 8 s, vastaavasti. Kuten aiemmin mainitsimme, kun sekoitusvuoto tapahtuu, RDD on sarjoitettava, jotta suorittimen laskenta voi lisääntyä, mikä voi johtaa yleiseen suorituskyvyn heikkenemiseen.

increase memory power

4.2.2. RDD-välimuistikäytännön muuttamisen tulokset

Suoritusajan analysoimiseksi muuttamalla RDD-välimuistikäytäntöä, kuten näemme kuvasta 6, jätämme pois erilliset vaiheet kuvasta 5. Tämä johtuu siitä, että meidän ei tarvitse analysoida erillisiä vaiheita, koska RDD-välimuistikäytännön muuttamisesta ei aiheudu muutoksia. .

Mielenkiintoista on, että eri JVM-kekokonfiguraatioissa ei tapahdu muutoksia flatMap-vaiheissa, toisin kuin 500 Mt:n tietojoukon tapauksessa. Syynä tähän on se, että sekoitusvuoto tapahtuu kaikissa kokoonpanoissa, koska muistia ei ole riittävästi. Kokonaissuoritusaika muuttamalla RDD-välimuistiasetusta kasvaa järjestyksessä M&S, S, N ja M. (M&S on nopein vaihtoehto.) Vaihtoehdossa N ExecutorLostFailure-virhe ilmenee, koska muistitilaa ei ole riittävästi. Vaihtoehdossa M, kun RDD on välimuistissa, GC overheadia esiintyy, koska muistitila ei riitä. Vaikka RDD olisi välimuistissa, työ epäonnistuu ExecutorLostFailure-virheen vuoksi, joka ilmenee, kun sekoitusmuistitila ei riitä (OutOfMemory).

M&S- ja S-vaihtoehdot voivat olla tehokkaita vaihtoehtoja näin vähäisessä muistitilanteessa. M&S{{0}}-vaihtoehdossa lisäämme RDD:n käytettävyyttä tallentamalla RDD:n välimuistiin sekä muistin että SSD:n avulla. Tämän seurauksena suorituskyky on parantunut samasta syystä kuin 500 Mt:n tietojoukko. Lisäksi SSD:n RDD:n välimuistiin tallentamisesta johtuen sekoitusmuistia on riittävästi. Kuten kuvasta 6 näkyy, M&S_1-vaihtoehdosta tulee nopein vaihtoehto tässä kokeessa (M&S_1:0,6, S_1:0,63, T_1 0,64).

improve short term memory

4.3. TC-kokeiluanalyysi

Kuvassa 7 esitetään tulokset TC (transitive closure) -kokeiluista, joissa käytetään 50,000 reunaa ja 25,000 satunnaisesti generoitua kärkeä sisältäviä syöttötietoja. Iteraatioluku on 10. Iteraatioiden kautta tehtävien määrä kaksinkertaistuu jokaisessa iteraatiossa, jolloin RDD:n koko kasvaa ja myös sekoituslukemisen ja -kirjoituksen määrät kasvavat. Viimeisessä iteraatiossa tehtävien määräksi tulee 4096. Koska iterointivaiheita on enemmän, vaikutus työn kokonaissuoritusaikaan on suurempi, ja viimeinen iterointivaihe on suurin, joka koostuu useista tehtävistä, jotka voivat alentaa yleistä suorituskykyä. .

increase memory

Kuten kuvasta 7 nähdään, suorituskyky paranee järjestyksessä _3, _2 ja _1 vaihtoehdoilla M, M&S ja S, mikä tarkoittaa, että riittävä sekoitus saadaan JVM-keon muisti on hyödyllinen. M-vaihtoehdolla vaihtoehdon _1 tehokkuus on 18 % nopeampi kuin vaihtoehdon _3, kun taas M&S-vaihtoehdossa vaihtoehdon _1 tehokkuus on 3 % nopeampi kuin {{9 }}. S-vaihtoehdossa _1:n suorituskyky on 2 % nopeampi kuin _3.

Kun keskitymme RDD-välimuistin muuttamiseen, vaihtoehdon S_1 suorituskyky on 42 % nopeampi kuin N_1, ja se on myös 31 % nopeampi kuin M_1. Syy työn suoritusajan suorituskyvyn kasvuun riippuu viimeisestä iterointivaiheesta. Avaintekijä, joka vaikuttaa viimeiseen iteraatiovaiheeseen, on satunnaislukulukituksen estoaika. Sekoituslukemisen estoaika ilmenee, kun edellisessä vaiheessa suoritettu RDD luetaan toisesta työntekijäsolmusta verkon kautta suorittajan muistin puutteen vuoksi.

Vaikka jokaisessa tehtävässä on noin 1-2 s suorituskyvyn lisäys satunnaislukulukituksen ratkaisemisen kautta, voimme saavuttaa merkittävän suorituskyvyn, koska viimeisessä tilassa tehtävien määrä on melko suuri (eli 4096). Lisäksi yksi tärkeimmistä työn suoritusaikaan vaikuttavista tekijöistä on laskentavaihe, joka laskee kuinka monta reunaa TC-matriisilla on viimeisessä työssä.

Vaihtoehdolla N, koska laskentavaiheessa ei ole välimuistiin tallennettuja RDD:itä, Spark lukee edellisestä vaiheesta suoritetun sekoitusdatan, mikä kestää 60 s. Lisäksi vaihtoehdossa M RDD:tä ei tallenneta välimuistiin suorittajan muistin puutteen vuoksi. Tämän seurauksena se kestää myös 60 s. M&S- ja S-vaihtoehdoissa RDD voidaan kuitenkin tallentaa välimuistiin muistiin ja SSD-levyyn, joten laskentavaihe kestää vain 2 sekuntia.

4.4. TeraSort Experiment Analysis

Kuva 8 näyttää kokeelliset tulokset TeraSort-benchmarkista, joka käyttää 10 Gt:n tietojoukkoa muuttamalla JVM-keon kokoonpanoa ja RDD-välimuistivaihtoehtoa. Tämä kaavio normalisoituu vaihtoehdolla N_1. Voimme nähdä, että kaikki työn suoritusajat ovat samanlaisia; ero niiden välillä on alle 5 %. TeraSort-työkuormassa ei tapahtunut suorituskyvyn parannuksia tai heikkenemistä kokoonpanojen ja asetusten muuttamisen vuoksi. Lajitteluvaiheessa verkossa tapahtuu muutama sekoitus. Sekoituslukemisen ja -kirjoituksen koot ovat kuitenkin 25 Mt, mikä on melko pieni verrattuna PageRankiin ja TC:hen. Siksi JVM-keon määritys ja RDD-välimuistiasetus eivät vaikuta suorituskykyyn. Lisäksi TeraSort-työkuorma ei koostu iteratiivisista töistä kuten transitiivisessa sulkemisessa, joten RDD-välimuistista ei ole hyötyä edellisessä vaiheessa.

ways to improve brain function

4.5. K-Means Clustering Experiment Analysis

K-means-klusteroinnin normalisoitu työn valmistumisaika 1,5 Gt:n tietojoukolle on esitetty kuvassa 9. K-means-klusteroinnin tarkoitus on löytää tietojoukosta k klusteria etäisyysmittauksen (esim. Euklidinen etäisyys) perusteella. Tässä työkuormassa algoritmi vähentää SSE:tä (sum of squared error) [24] iteroimalla k keskipisteen ja kunkin datapisteen välisen etäisyyden laskennan. Tässä kokeessa toistamme tämän prosessin kahdeksan kertaa. Sekoitettavan datan määrä on minimaalinen, koska edellisestä vaiheesta tarvitaan tiedot kunkin vaiheen keskipisteistä ja SSE:stä. K-means-klusterointityökuormituksessamme satunnaisluku-/kirjoitusdatan enimmäismäärä on 1.0 Mt ja vähimmäismäärä 0.8 Mt. Sekoitusvuotoa ei tapahdu tässä, koska sekoitustila on riittävä kaikissa asetuksissa. Kokeissa, joissa ei ole välimuistivaihtoehtoja, vaihtoehtojen _1, _2 ja _3 välillä ei ole eroa, koska nämä asetukset eivät tallenna välimuistiin mitään RDD:tä, ja kaikissa kolmessa asetuksessa satunnaistoisto tilaa riittää.

improve your memory

Kun välimuistiin tallennetaan RDD:itä päämuistiin tai muistiin ja SSD:hen, mitä enemmän RDD:lle on tallennustilaa, sitä enemmän työn suoritusaika paranee, koska enemmän RDD:itä voidaan tallentaa välimuistiin. Kun verrattiin _vain muistivaihtoehtoa ja muisti_ja_SSD-vaihtoehtoa, muisti_ja_SSD-vaihtoehto osoittivat parempaa suorituskykyä. Tämä johtuu siitä, että muisti_vain -vaihtoehdossa tallennustila ei riitä edes M_3-vaihtoehdossa. Lisäksi RDD-levyjen välimuistiin tallentaminen SSD-levylle ratkaisee tällaisen tallennusmuistin puutteen. Muisti_ja_SSD-asetukset paransivat suorituskykyä keskimäärin 10 % verrattuna pelkkään{10}}muistivaihtoehtoon.

Huomaa, että k-mean-klusterointityökuormitus osoittaa päinvastaista suorituskykyä kuin PageRank ja transitiiviset sulkemistyökuormat, koska satunnaistietojen määrässä on eroja. Keskustelemme tästä tarkemmin seuraavassa alaosassa.

5. Keskustelu ja yhteenveto

5.1. Keskustelu

Analysoimme mahdollisten suorituskyvyn heikkenemisongelmien päätekijöitä työmäärän ja käsittelyvaiheiden ominaisuuden perusteella. Laajat kokeelliset tulokset koskien Spark-alustan suorituskyvyn optimointitekniikoiden soveltamista erilaisiin työkuormiin on koottu seuraavasti:

• Java-roskien keräämisen aiheuttama suorituskyvyn heikkeneminen: PageRank-työkuormassa 500 Mt:n tietojoukon ja 1 Gt:n tietojoukon kanssa GC tapahtuu, kun JVM-keon tallennustila ei riitä RDD:n tallentamiseen. Distinct0-vaiheessa, joka lukee syöttötiedoston HDFS:stä ja tallentaa sen RDD:hen, tapahtuu GC. Laajennamme JVM-keon tallennustilaa konfiguroinnin avulla ratkaistaksemme tämän GC-ongelman. Voimme parantaa suorituskykyä vähentääksemme GC:tä, koska JVM-keon tallennustilaa voidaan laajentaa. Kuvissa 3 ja 5, samalla RDD-välimuistivaihtoehdolla, _3-kokoonpano näyttää parhaan suorituskyvyn Distinct0-vaiheessa. Lisäksi 1 Gt:n tietojoukon PageRankissa jotkin vaihtoehdot epäonnistuvat flatMap-vaiheessa muistin puutteen vuoksi. GC overhead kasvaa niin paljon, että vaihe epäonnistuu tai menee äärettömään silmukkaan. Siksi rakennamme klusterin SSD-levyillä tämän ongelman ratkaisemiseksi. Se osoittaa suorituskyvyn parantumisen ja onnistuu työssä, joka epäonnistui käyttämällä vain muistia, kuten kuvasta 6, M&S_1 ja S_1.

• Suorituskyvyn heikkeneminen sekoitusvuoto: PageRank-työkuormassa 500 Mt:n tietojoukon ja 1 Gt:n tietojoukon flatMap-vaiheessa voimme nähdä, että vaihtoehto M&S_1 näyttää parhaan suorituskyvyn, koska siinä on vähiten sekoitusta. vuoto (Kuva 4: M&S_1 on 30 % nopeampi kuin N_1; Kuva 6: M&S_1 on 40 % nopeampi kuin N_3). PageRankilla on monia sekoitustehtäviä. Siten, kun JVM-keon sekoitustila ei riitä tietojen sekoittamiseen verkon läpi, tapahtuu sekoitusvuoto. Siksi JVM-keon sekoitustilan laajentamisesta tulee suorituskyvyn parantamisen avaintekijä sekoitusvuotojen vähentämiseksi.

Lisäksi voimme parantaa suorituskykyä tallentamalla RDD:n sekä muistille että SSD:lle. Tämä voi saada toimeenpanijan laajentamaan JVM-keon sekoitusmuistia sekoitusvuotojen vähentämiseksi. Jos iteraatioita on enemmän, suorituskyky flatMap-vaiheesta olisi suorituskyvyn parantamisen avainkohta. 1 Gt:n tietojoukon kokeilussa työn suoritusaika S_3 on paras vaihtoehto, koska RDD:t tallennetaan välimuistiin vain SSD-levylle ja suorittimissa on riittävästi kasamuistia. Siten S_3-vaihtoehdossa Distinct-vaiheet ovat nopeampia kuin mikään muu vaihtoehto. Jos iterointiluku kuitenkin kasvaa, flatMap-vaihe vaikuttaa työn suoritusaikaan. Näin ollen M&S_1-vaihtoehto voi saavuttaa erinomaisen suorituskyvyn tässä tapauksessa. Näiden analyysien avulla voimme tunnistaa, että sekoittamisella on keskeinen vaikutus työn valmistumisaikaan. Siksi meidän on laajennettava JVM-keon sekoitusmuistia ja tallennettava RDD välimuistiin sekä muistissa että SSD-levyssä, jotta saadaan tarpeeksi sekoitusmuistitilaa sekoitusvuodon estämiseksi.

• Suorituskyvyn heikkeneminen satunnaistoiston lukitusajan takia: TC-työkuormalla on satunnaistoiston estetty aika. Se tapahtuu, kun vaiheessa on paljon tehtäviä ja jokaisen tehtävän on luettava edellinen RDD verkon kautta. TC-kokeilun tuloksena (kuva 7) M&S-vaihtoehto on nopeampi kuin vaihtoehto M. Samassa RDD-välimuistivaihtoehdossa JVM-keon sekoitustilan laajentaminen on nopeampaa kuin tallennustilan laajentaminen. Syy parantuneeseen suorituskykyyn on se, että JVM-keon sekoitustilaa laajentamalla sekoituslukemisen estoaika pienenee jokaisessa tehtävässä.

5.2. Yhteenveto: Mikä on paras tapa?

Kattavassa koetuloksessa ei ole yhtä parasta järjestelyä kaikkien työkuormien lisäämiseksi, koska jokaisella näistä työkuormista on erilaisia ​​ominaisuuksia, jopa työelämän aikana. Voimme kuitenkin silti ehdottaa, kuinka hajautetun muistin laskenta-alustan kokoonpanot voidaan optimoida ottamalla huomioon eri kohdetyökuormitukset seuraavasti:

• Spark JVM -keon konfiguraatio – sekoitusalue vs. tallennusalue: Neljän eri työkuorman kokeellisten tulosten perusteella voimme havaita suorituskyvyn eroja työkuorman ominaisuuksien mukaan. Esimerkiksi PageRank on tyypillinen esimerkki suuresta sekoitusdatamäärästä, joten enemmän muistin varaaminen sekoitusosalle parantaa yleistä suorituskykyä. Kuitenkin k-means-klusteroinnin tapauksessa mitä enemmän varaamme tallennusmuistiin, toisin kuin sekoitusmuistiin, sitä vähemmän suoritusaikaa tarvitaan. Siksi, jos voimme säätää JVM-muistin varausprosenttia dynaamisesti työkuorman ominaisuuksien mukaan, voimme optimoida kokonaissuoritusajan. Hadoop YARN [25] mahdollistaa töiden osoittamisen erityyppisille klustereille (konfiguraatioille), jotta voimme soveltaa tätä ideaa suurikokoiseen Hadoop-klusteriin, jotta voimme täyttää erityyppisten töiden muistiominaisuudet.

• RDD-välimuistikäytäntö – muisti vs. SSD: Useimmissa tapauksissa SSD-tukimuistin välimuisti näyttää parhaan suorituskyvyn, elleivät kaikki RDD:t mahdu todelliseen päämuistiin. Siksi SSD-avusteinen muistin välimuistikäytäntö voi olla varteenotettava valinta haastaviin työkuormiin, jotka vaativat huomattavia määriä päämuistia, joita mikään klusterin yksittäinen solmu ei pysty täyttämään.

6. Johtopäätökset

Tässä artikkelissa olemme tutkineet pääasiallisia tekijöitä, jotka aiheuttavat Spark-järjestelmän suorituskyvyn heikkenemistä hyödyke-palvelinpohjaisen laskentaklusterin päällä, jossa ei ole riittävästi käytettävissä päämuisteja. Kokeilun ja analyysin jälkeen esitimme vaihtoehtoja, jotka voivat parantaa yleistä suorituskykyä.

Java-roskien kerääminen tapahtuu, kun JVM-keon tallennustila ei riitä fyysisen muistin puutteen vuoksi. Java GC saa tehtävät odottamaan roskien keräämistä, jolloin työn kokonaisaika kasvaa. Sekoitusvuoto tapahtuu, kun JVM-keon sekoitustila on riittämätön sekoitusvaiheen aikana. Shuffle spill lisää suorittimen ylikuormitusta, jotta se suorittaa sarjoituksen välisekoitusdatan levittämiseksi levylle sekoitustilan puutteen vuoksi. TC-työkuormakokeessa satunnaistoiston estetty aika saa tehtävän odottamaan satunnaistietojen lukemista verkon läpi, koska satunnaistoistotilaa ei ole. Kaikki nämä tekijät voivat mahdollisesti pidentää työn valmistumisaikaa, mikä voi vaikuttaa vakavasti Spark-järjestelmän suorituskykyyn.

Näiden ongelmien ratkaisemiseksi rakennamme klusterin SSD-levyllä ja tallennamme RDD:n välimuistiin sekä muistiin että SSD-levyyn erikseen käyttämällä SSD-levyä täydentämään muistin tallennustilaa. Lisäksi säädämme JVM-keon konfiguraatiota sekoitustilan laajentamiseksi. Tämän tuloksena pystyimme parantamaan PageRank-työkuormaa 30 prosenttia ja TC-työkuormaa 42 prosenttia. Olemme havainneet, että sekoitusvuoto voi olla keskeinen suorituskyvyn heikkenemistekijä, ja osoitimme kokeilujen avulla, että useista iteraatioista ja sekoitustöistä koostuvissa työkuormissa sekoitustilan laajentaminen voi parantaa suorituskykyä merkittävästi. Lisäksi havaitsimme, että töiden erilaiset muistin käyttötavat voivat vaikuttaa kokonaissuoritusaikaan riippuen JVM:n tallennus-/sekoitusmuistin prosenttiosuudesta. PageRankin ja k-means-klusteroinnin suorituskykyanalyysin mukaan JVM:n muistin allokointi, joka on hyvin viritetty työkuorman ominaisuuksiin, voi merkittävästi pidentää työn valmistumisaikaa.

Näiden löydösten integroiminen Spark-alustaan ​​olisi yksi tulevaisuuden töistämme. Jos esimerkiksi työkuormia voidaan luonnehtia sekoitusdatan määrillä, optimoitua konfiguraatiota voidaan käyttää automaattisesti nopeuttamaan kohdetyökuormien käsittelyä. Siksi heterogeenisissä palvelinkokoonpanoissa työkuormamuistin käyttöä huomioivan ajoitusjärjestelmän kehittäminen voi parantaa Spark-pohjaisen klusterin yleistä suorituskykyä.

Tekijän panokset:

Conceptualization, JL (Jaehwan Lee); metodologia, JL (Jaehwan Lee) ja JC; ohjelmistot, JC ja JL (Jaehyun Lee); validointi, JC, JL (Jaehyun Lee) ja JL (Jaehwan Lee); tutkinta, JL (Jaehwan Lee) ja J.-SK; resurssit, JL (Jaehwan Lee) ja J.-SK; tietojen kuratointi, JC ja JL (Jaehyun Lee); kirjoittaminen – alkuperäisen luonnoksen valmistelu, JC ja JL (Jaehyun Lee); kirjoittaminen – arvostelu ja editointi, JL (Jaehwan Lee) ja J.-SK; visualisointi, JL (Jaehyun Lee); valvonta, JL (Jaehwan Lee) ja J.-SK; hankehallinto, JL (Jaehwan Lee) ja J.-SK; rahoituksen hankinta, JL (Jaehwan Lee). Kaikki kirjoittajat ovat lukeneet käsikirjoituksen julkaistun version ja hyväksyneet sen.

help with memory

Rahoitus:

Tätä tutkimusta tuki perustieteiden tutkimusohjelma (NRF-2020R1F1A1072696) Korean kansallisen tutkimussäätiön (NRF) kautta, jota rahoitti tiede- ja ICT-ministeriö, Gyeonggin maakunnan GRRC-ohjelma (nro GRRC-KAU{). {5}}B01, "Study on the Video and Space Convergence Platform for 360VR Services") ja ITRC:n (Information Technology Research Center) tukiohjelma (IITP-2021-2018-0-01423).

Institutionaalisen tarkastuslautakunnan lausunto:

Ei sovellettavissa.

Ilmoitettu suostumus:

Ei sovellettavissa.

Tietojen saatavuusilmoitus:

Saatavilla pyynnöstä.

Eturistiriidat:

Kirjoittajat eivät ilmoittaneet eturistiriitaa.


Viitteet

1. Dean, J.; Ghemawat, S. MapReduce: Yksinkertaistettu tietojenkäsittely suurilla klustereilla. Commun. ACM 2008, 51, 107–113. [CrossRef]

2. Apache Hadoop -projekti: avoimen lähdekoodin ohjelmisto luotettavaan, skaalautuvaan ja hajautettuun tietotekniikkaan. Saatavilla verkossa: https: //hadoop.apache.org/ (käytetty 10. syyskuuta 2021).

3. Shvachko, K.; Kuang, H.; Radia, S.; Chansler, R. Hadoop-hajautettu tiedostojärjestelmä. Proceedings of the 2010 IEEE 26th symposium on massa storage systems and technology (MSST), Incline Village, NV, USA, 3.–7.5.2010; s. 1–10.

4. Zaharia, M.; Chowdhury, M.; Franklin, MJ; Shenker, S.; Stoica, I. Spark: Klusterilaskenta työsarjoilla. HotCloud 2010, 10, 95.

5. Outerhout, K.; Rasti, R.; Ratnasamy, S.; Shenker, S.; Chun, BG Suorituskyvyn ymmärtäminen data-analytiikkakehyksessä. Proceedings of the 12th USENIX Symposium on Networked Systems Design and Implementation (NSDI), Oakland, CA, USA, 4.–6.5.2015; s. 293–307.

6. Xing, W.; Ghorbani, A. Painotettu PageRank-algoritmi. Proceedings of the IEEE Second Annual Conference on Communication Networks and Services Research, Fredericton, NB, Kanada, 21. toukokuuta 2004; s. 305–314.

7. Chakradhar, ST; Agrawal, VD; Rothweiler, SG Transitiivinen sulkemisalgoritmi testien luomiseen. IEEE Trans. Comput.-Aided Des. Integr. Circuits Syst. 1993, 12, 1015–1028. [CrossRef]

8. O'Malley, O. Terabyte Lajittele Apache Hadoopilla. Yahoo. toukokuu 2008. s. 1–3. Saatavilla verkossa: http://sortbenchmark.org/ YahooHadoop.pdf (käytetty 10. syyskuuta 2021).

9. K-Means Clustering. Saatavilla verkossa: https://en.wikipedia.org/wiki/K-means_clustering (käytetty 10. syyskuuta 2021).

10. Zaharia, M.; Chowdhury, M.; Das, T.; Dave, A.; Ma, J.; McCauly, M.; Franklin, MJ; Shenker, S.; Stoica, I. Kimmoisat hajautetut tietojoukot: Vikasietoinen abstraktio muistin sisäiseen klusterilaskentaan. Proceedings of the 9th USENIX Symposium on Networked Systems Design and Implementation (NSDI), San Jose, CA, USA, 25.–27. huhtikuuta 2012; s. 15–28.

11. Davidson, A.; Tai A. Sekoitussuorituskyvyn optimointi Sparkissa; Tekninen raportti; Berkeley-Sähkötekniikan ja tietojenkäsittelytieteiden laitos, Kalifornian yliopisto: Berkeley, CA, USA, 2013.

12. Nicolae, B.; Costa, CHA; Misale, C.; Katrinis, K.; Park, Y. Mukautuvan I/O:n hyödyntäminen Big Data Analyticsin kollektiivisten tietojen sekoitusmallien optimoimiseksi. IEEE Trans. Parallel Distrib. Syst. 2017, 28, 1663–1674. [CrossRef]

13. Zhang, H.; Cho, B.; Seyfe, E.; Ching, A.; Freedman, MJ Riffle: Optimoitu sekoituspalvelu suuren mittakaavan data-analyysiin. 13. EuroSys-konferenssin julkaisuissa; EuroSys '18; Association for Computing Machinery: New York, NY, USA, 2018. [CrossRef]


For more information:1950477648nn@gmail.com




Saatat myös pitää