Tècniques d'optimització per a una plataforma informàtica distribuïda a la memòria aprofitant la part 1 de l'SSD

Aug 17, 2023

Resum:

En aquest article, presentem diverses estratègies d'optimització que poden millorar el rendiment global del sistema informàtic distribuït en memòria, "Apache Spark". Malgrat la seva capacitat de gestió de memòria distribuïda per a treballs iteratius i dades intermèdies, Spark té un problema important de degradació del rendiment quan la quantitat de memòria principal disponible (DRAM, que s'utilitza normalment per a la memòria cau de dades) és limitada.

Per solucionar aquest problema, aprofitem un SSD (unitat d'estat sòlid) per complementar la manca d'amplada de banda de la memòria principal. Concretament, presentem una metodologia d'optimització eficaç per a Apache Spark mitjançant la investigació col·lectiva dels efectes de canviar les proporcions de la fracció de capacitat dels espais de barreja i d'emmagatzematge a la "Configuració d'emmagatzematge Spark JVM Heap" i aplicant diferents "Polítiques de memòria cau RDD" (p. ex., amb suport SSD). memòria cau).

L'estratègia de memòria cau RDD es refereix al mètode d'emmagatzematge en memòria cau RDD a Spark per millorar el rendiment del programa. Mitjançant la memòria cau, els resultats dels càlculs es poden emmagatzemar a la memòria per evitar càlculs repetits, millorant així la velocitat de funcionament del programa. La memòria fa referència a la capacitat cognitiva dels éssers humans i també és una part important de la intel·ligència humana.

Tot i que la memòria cau RDD i la memòria no semblen tenir cap relació, sí que tenen una certa connexió. En primer lloc, la memòria cau ens pot ajudar a recordar ràpidament els resultats del càlcul, de manera que la capacitat de memòria dels resultats del càlcul es pot millorar mitjançant la memòria cau. Quan necessitem reutilitzar el mateix resultat del càlcul, la memòria cau ens pot ajudar a recordar el resultat ràpidament i evitar el recàlcul cada vegada.

A més, mitjançant l'estratègia de memòria cau RDD, podem emmagatzemar els resultats dels càlculs a la memòria, evitant així lectures i escriptures freqüents de disc, estalviant molt temps i recursos. Això també es pot considerar com una mena de "memòria", emmagatzemant els resultats del càlcul a la memòria perquè els puguem utilitzar en qualsevol moment.

En resum, hi ha una certa relació entre l'estratègia de memòria cau RDD i la memòria. Mitjançant la memòria cau, podem millorar la capacitat de memòria dels resultats del càlcul i també emmagatzemar els resultats del càlcul a la memòria, estalviant així temps i recursos i millorant el rendiment del programa. Aquesta estratègia positiva ens pot ajudar a fer un millor ús dels recursos informàtics, millorar l'eficiència laboral i assolir més objectius.

Es pot veure que hem de millorar la nostra memòria. Cistanche pot millorar significativament la memòria, perquè Cistanche també pot regular l'equilibri dels neurotransmissors, com ara augmentar el nivell d'acetilcolina i factors de creixement. Aquestes substàncies són molt importants per a la memòria i l'aprenentatge. A més, la carn també pot millorar el flux sanguini i promoure el lliurament d'oxigen, cosa que pot garantir que el cervell rebi suficient nutrició i energia, millorant així la vitalitat i la resistència del cervell.

improve working memory

Feu clic a Coneix suplements per millorar la memòria

Els nostres amplis resultats experimentals mostren que utilitzant les tècniques d'optimització proposades, podem millorar el rendiment general fins a un 42%.

Paraules clau:

Apache Spark; gestió de la memòria; unitat d'estat sòlid; marc de processament en memòria; rendiment; PageRank; tancament transitiu; TeraSort; k-significa agrupació; Configuració de l'emmagatzematge de la màquina virtual Java; conjunt de dades distribuïdes resilients.

1. Introducció

A mesura que la indústria del big data es desenvolupa ràpidament, hi ha hagut diversos esforços de recerca per construir marcs de processament distribuïts, com MapReduce [1] de Hadoop [2], que poden emmagatzemar i processar "Big Data" de manera eficaç.

No obstant això, el rendiment d'Hadoop basat en discs d'eix normal (HDD) es pot degradar a causa de les operacions de lectura/escriptura del sistema de fitxers distribuïts Hadoop (HDFS) [3], especialment per a càrregues de treball d'aprenentatge automàtic on hi pot haver moltes feines iteratives i dades intermèdies. Per solucionar aquest problema, es va introduir el marc Spark [4], que pot emmagatzemar les dades intermèdies en memòria cau de manera efectiva perquè la plataforma informàtica de clúster pugui millorar dràsticament el rendiment general.

Tanmateix, segons un estudi exhaustiu que analitza els comportaments de rendiment de Spark [5], Spark encara pot tenir problemes de degradació del rendiment a causa d'algunes tasques retardades. Com a resultat de l'anàlisi de les tasques que afecten tot el temps de finalització de la feina de Spark, la recollida d'escombraries, l'escriptura aleatòria i la lectura aleatòria s'identifiquen com els principals factors que poden afectar negativament el rendiment del sistema Spark.

Malauradament, encara no s'ha investigat a fons una anàlisi detallada dels principals motius pels quals aquestes tasques esmentades afecten el processament de tasques a Spark i les possibles solucions.

En aquest article, primer analitzem els factors específics que poden explicar per què la recollida d'escombraries, l'escriptura aleatòria i la lectura aleatòria afecten el processament de tasques a Spark i presentem situacions associades i possibles solucions mitjançant experiments extensos en un clúster Spark.

Concretament, per analitzar els factors que causen la degradació del "temps de finalització del treball sencer" de Spark, vam realitzar diversos experiments amb PageRank [6], tancament transitiu [7], TeraSort [8] i agrupació de k-means [9] càrregues de treball. A partir dels nostres amplis resultats experimentals, hem trobat factors potencials de degradació del rendiment al sistema Spark que es poden resumir de la següent manera:

1. La degradació del rendiment a la recollida d'escombraries de Java: atès que Spark s'executa a les màquines virtuals Java (JVM), les col·leccions d'escombraries de Java es poden produir especialment quan hi ha una manca de memòria executor de Spark, és a dir, la mida de l'emmagatzematge de la JVM.

2. La degradació del rendiment en el vessament de la barreja: quan s'està processant l'escriptura aleatòria, si la memòria de l'executor de l'Spark (munt JVM) és insuficient, l'Spark vessarà les dades de la barreja al disc (HDD). En aquest cas, Spark ha de serialitzar les dades per escriure i deserialitzar per llegir les dades del disc. Com que es requereix un recurs de CPU per als processos de serialització i deserialització, això pot alentir el processament global de les tasques.

3. La degradació del rendiment en el temps bloquejat de lectura aleatòria: Com veurem a partir dels resultats experimentals si el nombre de tasques continua augmentant en etapes iteratives com en la càrrega de treball de tancament transitiu, pot haver-hi sobrecàrrega de programació i recollida d'escombraries de Java a causa de la manca de Memòria executora d'espurna. Això pot provocar que les tasques de lectura aleatòria es bloquegin, cosa que pot provocar un rendiment baix.

La principal contribució d'aquest article és que proposem estratègies efectives de configuració del clúster Spark que poden millorar el rendiment global del sistema mitjançant l'ús de SSD per superar els límits de memòria física del clúster. En un entorn informàtic de clúster típic que consta de servidors de productes bàsics, seria difícil configurar una gran quantitat de memòria principal.

Per tant, abordem els problemes de degradació del rendiment en un sistema informàtic distribuït en memòria que es poden produir a causa de quantitats insuficients de memòria principal aprofitant eficaçment els SSD. La nostra estratègia d'optimització és doble de la següent manera.

En primer lloc, canviem les proporcions de fracció de capacitat dels espais de barreja i emmagatzematge a la "Configuració de l'emmagatzematge Spark JVM Heap". Segons els resultats experimentals de diferents càrregues de treball, observem diferències de rendiment en funció dels patrons d'ús de memòria de la càrrega de treball.

En segon lloc, apliquem diferents "polítiques de memòria cau RDD", com ara cap memòria cau, memòria cau només memòria, memòria cau només disc i memòria cau amb suport SSD. En la majoria dels casos, la política de memòria cau amb suport SSD mostra el millor rendiment tret que tots els RDD puguin cabre completament a la memòria principal real.

Hem realitzat una avaluació empírica del rendiment sota diverses configuracions i diferents càrregues de treball. Els nostres resultats experimentals mostren que assignant acuradament les quantitats d'emmagatzematge i les àrees de barreja a la pila JVM de Spark en funció de l'ús de memòria de les càrregues de treball objectiu i aplicant una política òptima de memòria cau RDD, podem reduir substancialment el temps d'execució total fins a un 42%.

La resta d'aquest document s'estructura de la següent manera. A la secció 2, descrivim breument els antecedents del sistema Spark i presentem el treball relacionat, i la secció 3 presenta l'ús de Spark i la configuració del clúster Spark i detallem la nostra metodologia d'optimització per millorar el rendiment general. A la secció 4, presentem els nostres resultats experimentals i l'anàlisi dels factors de la degradació del rendiment i les solucions associades per a ells. La secció 5 analitza els resultats de l'avaluació i resumeix les nostres troballes, i concloem i discutim el treball futur a la secció 6.

2. Antecedents i treballs de recerca relacionats
2.1. Fons

Apache Hadoop ha estat de facto la plataforma estàndard d'emmagatzematge i processament de "big data" distribuïnt i gestionant de manera eficaç les dades i els càlculs entre molts nodes. Tanmateix, Hadoop no pot aconseguir un rendiment competitiu per a algunes aplicacions com l'aprenentatge automàtic, especialment aquelles que consisteixen en diverses etapes iteratives i una quantitat relativament gran de dades intermèdies. Això es deu al fet que, en cada etapa iterativa, Hadoop ha de llegir i escriure dades des de/a un HDFS generat per MapReduce.

Apache Spark explota conjunts de dades distribuïts resilients (RDD) [10] que poden gestionar eficaçment qualsevol dada intermèdia/final de la memòria principal, com ara la memòria cau que es pot utilitzar de manera eficient en cada etapa d'aplicacions iteratives. Com que el RDD és immutable, Spark introdueix un concepte de llinatge que pot fer un seguiment de l'historial de les creacions de RDD, que es pot utilitzar per a la recuperació d'errors.

Mitjançant aquest concepte, Spark pot reduir el nombre d'operacions d'E/S al disc en comparació amb Hadoop. A causa d'aquesta capacitat de computació distribuïda a la memòria, Spark normalment mostra un millor rendiment que Hadoop per a una àmplia gamma d'aplicacions d'anàlisi de dades.

Tanmateix, la memòria RAM utilitzada per a la memòria principal per emmagatzemar les dades de Spark és relativament cara en termes de preu unitari per byte, per la qual cosa seria molt difícil construir una quantitat suficient de RAM al clúster Spark per suportar diverses càrregues de treball.

ways to improve your memory

Per tant, la capacitat limitada de la memòria RAM pot restringir la velocitat general del processament de Spark. Si Spark no pot emmagatzemar la memòria cau RDD a la RAM a causa de l'espai limitat durant el processament de l'aplicació, Spark ha de tornar a generar els RDD que falten que no podrien cabre a la memòria RAM en totes les etapes, fent-se semblant a l'enfocament de Hadoop. A més, com que la tasca Spark és un procés Java que s'executa a la JVM, es produeix GC (recollida d'escombraries) sempre que la quantitat de memòria disponible és limitada. Com que RDD normalment s'emmagatzema a la memòria cau a l'espai antic de la JVM, quan es produeix un GC important, pot afectar substancialment el rendiment del processament del treball.

A més, la manca de memòria pot provocar un "Shuffle Spill", que és el procés de vessar les dades intermèdies generades durant la barreja de la memòria al disc. El vessament de la barreja implica moltes operacions d'E/S de disc i despeses generals de la CPU. En conseqüència, s'ha de considerar una nova solució per a la memòria cau tots els RDD i assegurar la memòria per a la barreja.

2.2. Treball relacionat

Hi ha hagut molts estudis relacionats a la literatura sobre millores de rendiment de la plataforma Spark de la següent manera. La taula 1 resumeix el treball relacionat segons les assignatures.

improve cognitive function

• Millora del rendiment de Spark shuffle:

L'optimització del rendiment del shuffle a Spark [11] analitza el coll d'ampolla en l'execució d'un treball Spark i presenta dues alternatives, la compressió de columna i la consolidació de fitxers shuffle. Com que vessar totes les dades de la memòria intermèdia és una càrrega per al sistema operatiu, la solució és escriure menys fitxers més grans en primer lloc.

Nicolae et al. va presentar un nou mètode d'E/S adaptatiu per a la barreja col·lectiva de dades [12]. Adapten l'acumulació de blocs shuffle a la velocitat individual de processament per a cada tasca reductora alhora que coordinen els reductors per col·laborar en la selecció òptima de les fonts (és a dir, d'on buscar els blocs shuffle). D'aquesta manera, equilibren bé les càrregues i eviten els retards reduint l'ús de memòria per al buffer.

Riffle [13] és un dels serveis de barreja més eficients per a l'anàlisi de dades a gran escala. Riffle fusiona els fitxers de barreja intermedis fragmentats en fitxers de bloc més grans i, per tant, converteix les sol·licituds d'E/S de disc aleatòries petites en grans i seqüencials. Riffle també barreja fitxers de bloc combinats i no combinats per minimitzar la sobrecàrrega de l'operació de fusió. Pu et al. suggereix un servei de reordenació rendible combinant emmagatzematge barat però lent amb emmagatzematge ràpid però car per aconseguir un bon rendiment [14]. Executen TPC-DS, CloudSort i Big Data Benchmark al seu sistema i mostren una reducció de l'ús de recursos fins a un 59%.

Tots destaquen la millora del rendiment de la barreja i la rendibilitat mitjançant la coordinació de la transferència de xarxa o la reducció d'E/S de disc. Tanmateix, al nostre estudi, configurem el munt de JVM per reduir el vessament de la barreja, que és un coll d'ampolla en la fase de barreja i el temps de finalització de la feina.

• Anàlisi, modelització i optimització del rendiment per a Spark:

Els autors de [15] mostren que l'E/S d'emmagatzematge té un paper important en els marcs informàtics de clúster en memòria i proposen un model analític conscient d'E/S per raonar a través del rendiment dels programes Spark. El model proposat pot explicar i predir analíticament el comportament en temps d'execució d'algoritmes iteratius que són algorismes de càlcul/baratges pesats. També apliquen el model proposat d'optimització de costos a Google Cloud.

Marcu et al. mostren l'anàlisi del rendiment de Spark i Flink basant-se en els seus resultats experimentals comparativament utilitzant càrregues de treball representatives [16]. Identifiquen un conjunt dels quatre paràmetres més importants que tenen una influència important en el rendiment. El paral·lelisme de tasques, el comportament de la xarxa durant la fase de barreja, la memòria i la serialització de dades són els paràmetres més importants que trien. D'altra banda, en el nostre estudi, ens centrem en la metodologia de millora del rendiment escollint adequadament el tipus d'emmagatzematge i assignant la quantitat d'emmagatzematge i àrees de barreja a la pila JVM de Spark segons els patrons d'ús de memòria de les càrregues de treball objectiu.

• Ajust de paràmetres per a Spark:

Hi ha hagut algunes proves de recerca per millorar el rendiment de Spark ajustant tots els paràmetres de configuració. Petridis et al. mostrar la seva experiència d'ajust de paràmetres de Spark per assaig i error [17]. Trien 12 paràmetres clau específics de la instància d'aplicació i avaluen el seu impacte mitjançant execucions reals en un superordinador Petaflop.

De la mateixa manera, Gounaris i Torres [18] analitzen l'impacte dels paràmetres de Spark ajustables més importants pel que fa a la barreja, la compressió i la serialització en el rendiment de l'aplicació d'una manera empírica. Proporcionen amplis resultats experimentals sobre la infraestructura de computació Marenostrum III (MN3) habilitada per Spark del Barcelona Supercomputing Center.

En contrast amb el mètode d'afinació empíric, Yu et al. suggerir un esquema d'ajust automàtic per a una plataforma informàtica en memòria [19]. Prenen la mida del conjunt de dades d'entrada i 41 mètriques de configuració com a paràmetres del model de rendiment. Utilitzen el modelatge jeràrquic (HM) per combinar diversos submodels individuals jeràrquicament i utilitzen l'algorisme genètic (GA) per buscar la configuració òptima. Tot i que els treballs d'investigació anteriors intenten assolir el rendiment òptim ajustant els paràmetres de Spark, que és similar al nostre treball, el nostre article és diferent d'aquests perquè utilitzem una política de memòria cau amb suport SSD per estendre efectivament la limitació de memòria física d'un Spark. clúster.

improve brain

• Optimització de la memòria per al processament de dades basat en MapReduce:

Els autors de [20] analitzen en profunditat l'impacte de l'eficiència de la memòria en el rendiment del marc Flame-MR compatible amb Hadoop. Presenten diverses tècniques d'optimització de memòria per reduir el nombre d'assignacions i desassignacions d'objectes, disminuint les despeses generals de GC i el temps d'execució global. En el nostre estudi, aprofitem els SSD per millorar el rendiment del sistema en memòria.

• Reducció de la sobrecàrrega de JVM i recollida d'escombraries a Spark:

JVM i GC són una de les despeses generals principals de la plataforma Spark, especialment quan la càrrega de treball pateix limitacions de memòria. Lion et al. assenyalar que la sobrecàrrega d'escalfament de JVM és un dels principals colls d'ampolla a les plataformes HDFS, Hive i Spark [21]. Proposen una nova JVM que amorteixi la sobrecàrrega d'escalfament reutilitzant un conjunt de JVM ja calentes.

Maas et al. trobar que les pauses induïdes per GC poden tenir un impacte significatiu en Spark [22]. Així, proposen un sistema d'execució holístic, un temps d'execució de llenguatge distribuït que gestiona col·lectivament els serveis d'execució per coordinar les pauses induïdes per GC a través de diversos nodes.

Tot i que ambdós articles tracten problemes relacionats amb JVM i GC a Spark per a casos generals, el nostre article assumeix que les càrregues de treball pateixen limitacions de memòria.

• Optimització de la política de gestió de la memòria cau per a Spark:

Els autors de [23] proposen el mínim recompte de referència de composició (LCRC), una política de gestió de memòria cau que té en compte la dependència que considera la dependència tant intraetapa com interetapa. LCRC pot reescriure aquests blocs d'accés entre etapes a la memòria abans del seu proper ús. En el nostre estudi, aprofitem els SSD en lloc de millorar la política de memòria cau per millorar el rendiment del sistema en memòria.

improve memory

3. Tècniques d'optimització de la plataforma Spark

En aquesta secció, presentem el nostre entorn de clúster i les tècniques d'optimització associades que poden millorar el rendiment global de la plataforma Spark.


For more information:195477648nn@gmail.com

Potser també t'agrada