{"id":30548,"date":"2019-10-31T21:36:08","date_gmt":"2019-10-31T18:36:08","guid":{"rendered":"https:\/\/prohoster.info\/blog\/konfigurirovanie-spark-na-yarn\/"},"modified":"2019-10-31T21:36:08","modified_gmt":"2019-10-31T18:36:08","slug":"konfigurirovanie-spark-na-yarn","status":"publish","type":"post","link":"https:\/\/prohoster.info\/ro\/blog\/news\/konfigurirovanie-spark-na-yarn","title":{"rendered":"Configurarea Spark pe YARN","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Habr, salut! Ieri, la <noindex><a rel=\"nofollow\" href=\"https:\/\/www.facebook.com\/events\/1825957590998380\/\">mitingul dedicat Apache Spark<\/a><\/noindex>, de la echipa Rambler&amp;Co, au fost destul de multe \u00eentreb\u0103ri din partea participan\u021bilor legate de configurarea acestui instrument. Am decis s\u0103 \u00eemp\u0103rt\u0103\u0219im experien\u021ba noastr\u0103 \u00een aceast\u0103 direc\u021bie. Subiectul nu este simplu \u2014 a\u0219a c\u0103 v\u0103 invit\u0103m s\u0103 \u00eemp\u0103rt\u0103\u0219i\u021bi experien\u021bele voastre \u00een comentarii, poate c\u0103 avem \u0219i noi unele neclarit\u0103\u021bi sau folosim instrumentul gre\u0219it.<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><br \/>\nO mic\u0103 introducere \u2014 cum folosim Spark. Avem un program de trei luni <noindex><a rel=\"nofollow\" href=\"http:\/\/newprolab.com\/ru\/bigdata?utm_source=habr&amp;utm_campaign=spark\">\u201eSpecialist \u00een big data\u201d<\/a><\/noindex>, iar \u00een cadrul celui de-al doilea modul, participan\u021bii no\u0219tri lucreaz\u0103 cu acest instrument. Prin urmare, sarcina noastr\u0103 ca organizatori este s\u0103 preg\u0103tim un cluster pentru a fi utilizat \u00een cadrul acestui caz.<\/p>\n<p>Particularitatea utiliz\u0103rii noastre const\u0103 \u00een faptul c\u0103 num\u0103rul persoanelor care lucreaz\u0103 simultan cu Spark poate fi egal cu \u00eentrega grup\u0103. De exemplu, la seminar, c\u00e2nd toat\u0103 lumea \u00eencearc\u0103 ceva \u0219i repet\u0103 dup\u0103 instructorul nostru. \u0218i nu este deloc pu\u021bin \u2014 uneori aproape 40 de persoane. Probabil nu sunt multe companii \u00een lume care se confrunt\u0103 cu un astfel de scenariu de utilizare.<\/p>\n<p>Mai apoi, voi explica cum \u0219i de ce am ales anumite parametrii pentru configura\u021bie.<\/p>\n<p>S\u0103 \u00eencepem cu \u00eenceputul. Spark poate func\u021biona \u00een 3 moduri pe un cluster: standalone, folosind Mesos \u0219i folosind YARN. Am decis s\u0103 alegem a treia op\u021biune, deoarece era logic pentru noi. Avem deja un cluster Hadoop. Participan\u021bii no\u0219tri sunt deja bine familiariza\u021bi cu arhitectura sa. S\u0103 folosim YARN.<\/p>\n<pre><code class=\"apache\">spark.master=yarn<\/code><\/pre>\n<p>\nApoi devine mai interesant. Fiecare dintre aceste 3 moduri de implementare are 2 variante de deploy: client \u0219i cluster. Bazat pe <noindex><a rel=\"nofollow\" href=\"http:\/\/spark.apache.org\/docs\/latest\/running-on-yarn.html\">documentation<\/a><\/noindex> \u0219i diferitele informa\u021bii de pe internet, se poate concluziona c\u0103 clientul se potrive\u0219te pentru lucrul interactiv \u2014 de exemplu, prin jupyter notebook, iar clusterul este mai potrivit pentru solu\u021bii de produc\u021bie. \u00cen cazul nostru, ne interesa lucrul interactiv, deci:<\/p>\n<pre><code class=\"apache\">spark.deploy-mode=client<\/code><\/pre>\n<p>\n\u00cen esen\u021b\u0103, de acum \u00eenainte, Spark va func\u021biona pe YARN, dar acest lucru nu era suficient pentru noi. Deoarece lucr\u0103m cu date mari, uneori participan\u021bilor le lipsea ceea ce se ob\u021binea \u00een cadrul \u00eemp\u0103r\u021birii uniforme a resurselor. Aici am descoperit un element interesant \u2014 alocarea dinamic\u0103 a resurselor. Pe scurt, ideea este urm\u0103toarea: dac\u0103 ave\u021bi o sarcin\u0103 grea \u0219i clusterul este liber (de exemplu, diminea\u021ba), aceast\u0103 op\u021biune permite Spark-ului s\u0103 v\u0103 ofere resurse suplimentare. Necesitatea este calculat\u0103 dup\u0103 o formul\u0103 complicat\u0103. Nu ne vom aprofunda \u00een detalii \u2014 func\u021bioneaz\u0103 destul de bine.<\/p>\n<pre><code class=\"apache\">spark.dynamicAllocation.enabled=true<\/code><\/pre>\n<p>\nAm setat acest parametru, iar c\u00e2nd am ini\u021biat Spark, acesta a returnat o eroare \u0219i nu s-a pornit. A\u0219a e, pentru c\u0103 ar fi trebuit s\u0103 citim <noindex><a rel=\"nofollow\" href=\"http:\/\/spark.apache.org\/docs\/latest\/configuration.html\">documenta\u021bie<\/a><\/noindex> mai atent. Este indicat c\u0103, pentru ca totul s\u0103 fie \u00een regul\u0103, trebuie s\u0103 activ\u0103m \u00eenc\u0103 un parametru.<\/p>\n<pre><code class=\"apache\">spark.shuffle.service.enabled=true<\/code><\/pre>\n<p>\nDe ce este necesar? Atunci c\u00e2nd jobul nostru nu mai necesit\u0103 at\u00e2tea resurse, Spark ar trebui s\u0103 le returneze \u00een pool-ul comun. Cea mai consumatoare de timp etap\u0103 \u00een aproape orice sarcin\u0103 MapReduce este etapa Shuffle. Acest parametru permite salvarea datelor care se genereaz\u0103 \u00een aceast\u0103 etap\u0103, eliber\u00e2nd astfel executors. Iar executorul este procesul care calculeaz\u0103 totul pe worker. Acesta are un anumit num\u0103r de nuclee de procesor \u0219i o anumit\u0103 cantitate de memorie.<\/p>\n<p>Am ad\u0103ugat acest parametru. Totul p\u0103rea s\u0103 func\u021bioneze. A devenit evident c\u0103 participan\u021bii primeau \u00eentr-adev\u0103r mai multe resurse atunci c\u00e2nd aveau nevoie. Dar a ap\u0103rut o alt\u0103 problem\u0103 \u2014 \u00eentr-un anumit moment, al\u021bi participan\u021bi s-au trezit \u0219i au dorit s\u0103 foloseasc\u0103 Spark, dar totul era ocupat, iar ei erau nemul\u021bumi\u021bi. Ii putem \u00een\u021belege. Am \u00eenceput s\u0103 consult\u0103m documenta\u021bia. Acolo s-a dovedit c\u0103 exist\u0103 \u0219i alte parametere care pot influen\u021ba procesul. De exemplu, dac\u0103 executorul este \u00een modul de a\u0219teptare \u2014 dup\u0103 c\u00e2t timp putem lua resursele \u00eenapoi?<\/p>\n<pre><code class=\"apache\">spark.dynamicAllocation.executorIdleTimeout=120s<\/code><\/pre>\n<p>\n\u00cen cazul nostru \u2014 dac\u0103 executors-urile dvs. nu fac nimic timp de dou\u0103 minute, v\u0103 rug\u0103m s\u0103 le returna\u021bi \u00een pool-ul comun. \u00cens\u0103 nici acest parametru nu era \u00eentotdeauna suficient. Era evident c\u0103 persoana nu mai f\u0103cea nimic de mult\u0103 vreme, dar resursele nu se eliberau. S-a dovedit c\u0103 exist\u0103 un alt parametru special \u2014 dup\u0103 c\u00e2t timp s\u0103 elimin\u0103m executors-urile care con\u021bin date \u00een cache. Implicit, acest parametru era setat pe \u2014 infinity! L-am corectat.<\/p>\n<pre><code class=\"apache\">spark.dynamicAllocation.cachedExecutorIdleTimeout=600s<\/code><\/pre>\n<p>\nAdic\u0103, dac\u0103 executors-urile dvs. nu fac nimic timp de 5 minute, returna\u021bi-le \u00een pool-ul comun. \u00cen acest mod, viteza de eliberare \u0219i alocare a resurselor pentru un num\u0103r mare de utilizatori a devenit satisf\u0103c\u0103toare. Num\u0103rul de nemul\u021bumiri s-a redus. Dar am decis s\u0103 mergem mai departe \u0219i s\u0103 limit\u0103m num\u0103rul maxim de executors pentru o aplica\u021bie \u2014 practic, pentru un singur participant la program.<\/p>\n<pre><code class=\"apache\">spark.dynamicAllocation.maxExecutors=19<\/code><\/pre>\n<p>\nAcum, desigur, au ap\u0103rut nemul\u021bumiri din cealalt\u0103 parte \u2014 \u201cclusterul st\u0103 degeaba, iar eu am doar 19 executors\u201d, dar ce s\u0103 facem \u2014 este nevoie de un echilibru corect. Nu se poate face toat\u0103 lumea fericit\u0103.<\/p>\n<p>\u0218i \u00eenc\u0103 o mic\u0103 poveste legat\u0103 de specificul cazului nostru. La un moment dat, c\u00e2\u021biva oameni au \u00eent\u00e2rziat la exerci\u021biile practice, iar Spark, dintr-un motiv sau altul, nu a pornit. Am verificat cantitatea de resurse disponibile \u2014 p\u0103rea c\u0103 sunt. Spark ar trebui s\u0103 porneasc\u0103. Noroc c\u0103, p\u00e2n\u0103 atunci, documenta\u021bia reu\u0219ise s\u0103 se \u00eenregistreze \u00een subcon\u0219tient \u0219i ne-am amintit c\u0103, la pornirea Spark, acesta caut\u0103 un port pe care s\u0103 porneasc\u0103. Dac\u0103 primul port din interval este ocupat, trece la urm\u0103torul. Dac\u0103 acesta este liber, \u00eel captureaz\u0103. \u0218i exist\u0103 un parametru care indic\u0103 num\u0103rul maxim de \u00eencerc\u0103ri pentru acest lucru. Implicit \u2014 este 16. Num\u0103rul este mai mic dec\u00e2t num\u0103rul de oameni din grupul nostru \u00een timpul lec\u021biei. Prin urmare, dup\u0103 16 \u00eencerc\u0103ri, Spark renun\u021ba \u0219i spunea c\u0103 nu poate s\u0103 porneasc\u0103. Am corectat acest parametru.<\/p>\n<pre><code class=\"apache\">spark.port.maxRetries=50<\/code><\/pre>\n<p>\nMai departe, voi vorbi despre c\u00e2teva set\u0103ri care deja nu sunt foarte legate de specificul cazului nostru.<\/p>\n<p>Pentru o pornire mai rapid\u0103 a Spark, exist\u0103 recomandarea de a arhiva folderul jars, aflat \u00een directorul de acas\u0103 SPARK_HOME, \u0219i de a-l plasa pe HDFS. Astfel, nu va pierde timp desc\u0103rc\u00e2nd aceste fi\u0219iere jar pe workeri.<\/p>\n<pre><code class=\"apache\">spark.yarn.archive=hdfs:\/\/\/tmp\/spark-archive.zip<\/code><\/pre>\n<p>\nDe asemenea, pentru o func\u021bionare mai rapid\u0103, se recomand\u0103 utilizarea serializer-ului kryo. Acesta este mai optimizat dec\u00e2t cel implicit.<\/p>\n<pre><code class=\"apache\">spark.serializer=org.apache.spark.serializer.KryoSerializer<\/code><\/pre>\n<p>\n\u0218i exist\u0103 \u00eenc\u0103 o problem\u0103 veche cu Spark, c\u0103 acesta se opre\u0219te adesea din cauza memoriei. De obicei, aceasta se \u00eent\u00e2mpl\u0103 \u00een momentul \u00een care lucr\u0103torii au terminat toate calculele \u0219i trimit rezultatul c\u0103tre driver. Am crescut acest parametru. Implicit, este de 1GB, noi l-am f\u0103cut de 3GB.<\/p>\n<pre><code class=\"apache\">spark.driver.maxResultSize=3072<\/code><\/pre>\n<p>\n\u0218i, \u00een final, ca un bonus. Cum s\u0103 actualiz\u0103m Spark la versiunea 2.1 pe distribu\u021bia HortonWorks \u2014 HDP 2.5.3.0. Aceast\u0103 versiune HDP con\u021bine o versiune instalat\u0103 a 2.0, dar \u00eentr-o zi am decis c\u0103 Spark se dezvolt\u0103 destul de activ \u0219i fiecare versiune nou\u0103 repar\u0103 anumite erori, plus ofer\u0103 noi func\u021bionalit\u0103\u021bi, inclusiv pentru API-ul Python, a\u0219a c\u0103 am decis c\u0103 este necesar s\u0103 facem un update.<\/p>\n<p>Am desc\u0103rcat versiunea de pe site-ul oficial pentru Hadoop 2.7. Am decomprimat-o, am pus-o \u00een folderul cu HDP. Am creat leg\u0103turi simbolice a\u0219a cum trebuie. Am \u00eencercat s\u0103 o lans\u0103m \u2014 nu s-a pornit. A dat o eroare foarte confuz\u0103.<\/p>\n<pre><code class=\"apache\">java.lang.NoClassDefFoundError: com\/sun\/jersey\/api\/client\/config\/ClientConfig<\/code><\/pre>\n<p>\nC\u0103ut\u00e2nd pe Google, am aflat c\u0103 Spark a decis s\u0103 nu mai a\u0219tepte ca Hadoop s\u0103 ias\u0103 \u0219i a decis s\u0103 foloseasc\u0103 o nou\u0103 versiune de jersey. Ei se ceart\u0103 pe aceast\u0103 tem\u0103 \u00een JIRA. Solu\u021bia a fost \u2014 s\u0103 desc\u0103rc\u0103m <noindex><a rel=\"nofollow\" href=\"https:\/\/mvnrepository.com\/artifact\/com.sun.jersey\/jersey-bundle\/1.17.1\">jersey versiunea 1.17.1<\/a><\/noindex>. S\u0103 o punem \u00een folderul jars \u00een SPARK_HOME, s\u0103 o zip-uim din nou \u0219i s\u0103 o punem pe HDFS.<\/p>\n<p>Am ocolit aceast\u0103 eroare, dar a ap\u0103rut una nou\u0103 \u0219i destul de vag\u0103.<\/p>\n<pre><code class=\"apache\">org.apache.spark.SparkException: Yarn application has already ended! It might have been killed or unable to launch application master<\/code><\/pre>\n<p>\n\u00centre timp, am \u00eencercat s\u0103 lans\u0103m versiunea 2.0 \u2014 totul a fost ok. \u00cencerc\u0103 s\u0103-\u021bi dai seama care e problema. Ne-am uitat \u00een jurnalele acestei aplica\u021bii \u0219i am v\u0103zut ceva de genul:<\/p>\n<pre><code class=\"apache\">\/usr\/hdp\/${hdp.version}\/hadoop\/lib\/hadoop-lzo-0.6.0.${hdp.version}.jar<\/code><\/pre>\n<p>\n\u00cen general, din motive necunoscute, hdp.version nu s-a rezolvat. C\u0103ut\u00e2nd, am g\u0103sit solu\u021bia. Trebuie s\u0103 intri \u00een Ambari \u00een set\u0103rile YARN \u0219i s\u0103 adaugi acolo parametrul \u00een yarn-site personalizat:<\/p>\n<pre><code class=\"apache\">hdp.version=2.5.3.0-37<\/code><\/pre>\n<p>\nAceast\u0103 magie a ajutat, \u0219i Spark a decolat. Am testat c\u00e2teva dintre jupyter-notebook-urile noastre. Totul func\u021bioneaz\u0103. Suntem preg\u0103ti\u021bi pentru prima lec\u021bie de Spark s\u00e2mb\u0103t\u0103 (deja m\u00e2ine)!<\/p>\n<p><b>UPD<\/b>. La lec\u021bie, a ap\u0103rut o alt\u0103 problem\u0103. \u00centr-un anumit moment, YARN a \u00eencetat s\u0103 mai acorde containere pentru Spark. A fost nevoie s\u0103 ajust\u0103m un parametru \u00een YARN, care era implicit 0.2:<\/p>\n<pre><code class=\"apache\">yarn.scheduler.capacity.maximum-am-resource-percent=0.8<\/code><\/pre>\n<p>\nAsta \u00eenseamn\u0103 c\u0103 doar 20% din resurse au fost implicate \u00een distribu\u021bia resurselor. Dup\u0103 ce am modificat parametrii, am repornit YARN. Problema a fost rezolvat\u0103 \u0219i ceilal\u021bi participan\u021bi au putut, de asemenea, s\u0103 porneasc\u0103 contextul Spark.<br \/>\n<br \/>Sursa: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/newprolab\/blog\/327556\/\">habr.com<\/a><\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u0425\u0430\u0431\u0440, \u043f\u0440\u0438\u0432\u0435\u0442! \u0412\u0447\u0435\u0440\u0430 \u043d\u0430 \u043c\u0438\u0442\u0430\u043f\u0435, \u043f\u043e\u0441\u0432\u044f\u0449\u0435\u043d\u043d\u043e\u043c Apache Spark, \u043e\u0442 \u0440\u0435\u0431\u044f\u0442 \u0438\u0437 Rambler&#038;Co, \u0431\u044b\u043b\u043e \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u043c\u043d\u043e\u0433\u043e \u0432\u043e\u043f\u0440\u043e\u0441\u043e\u0432 \u043e\u0442 \u0443\u0447\u0430\u0441\u0442\u043d\u0438\u043a\u043e\u0432, \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u0445 \u0441 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u044d\u0442\u043e\u0433\u043e \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0430. \u0420\u0435\u0448\u0438\u043b\u0438 \u043f\u043e \u0435\u0433\u043e \u0441\u043b\u0435\u0434\u0430\u043c \u043f\u043e\u0434\u0435\u043b\u0438\u0442\u044c\u0441\u044f \u0441\u0432\u043e\u0438\u043c \u043e\u043f\u044b\u0442\u043e\u043c. \u0422\u0435\u043c\u0430 \u043d\u0435\u043f\u0440\u043e\u0441\u0442\u0430\u044f \u2014 \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u0435\u043c \u0434\u0435\u043b\u0438\u0442\u044c\u0441\u044f \u043e\u043f\u044b\u0442\u043e\u043c \u0442\u043e\u0436\u0435 \u0432 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u044f\u0445, \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c, \u043c\u044b \u0442\u043e\u0436\u0435 \u0447\u0442\u043e-\u0442\u043e \u043d\u0435 \u0442\u0430\u043a \u043f\u043e\u043d\u0438\u043c\u0430\u0435\u043c \u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c. \u041d\u0435\u0431\u043e\u043b\u044c\u0448\u0430\u044f \u0432\u0432\u043e\u0434\u043d\u0430\u044f \u2014 \u043a\u0430\u043a \u043c\u044b [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[702],"tags":[],"class_list":["post-30548","post","type-post","status-publish","format-standard","hentry","category-news"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.2.1 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u0425\u0430\u0431\u0440, \u043f\u0440\u0438\u0432\u0435\u0442!\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/ro\/blog\/news\/konfigurirovanie-spark-na-yarn\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.2.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"ro_RO\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47\u041a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 Spark \u043d\u0430 YARN | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u0425\u0430\u0431\u0440, \u043f\u0440\u0438\u0432\u0435\u0442!\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/ro\/blog\/news\/konfigurirovanie-spark-na-yarn\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2019-10-31T18:36:08+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2019-10-31T18:36:08+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47Configurarea Spark pe YARN | ProHoster","description":"Habr, salut!","canonical_url":"https:\/\/prohoster.info\/ro\/blog\/news\/konfigurirovanie-spark-na-yarn","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"ro_RO","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47\u041a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 Spark \u043d\u0430 YARN | ProHoster","og:description":"\u0425\u0430\u0431\u0440, \u043f\u0440\u0438\u0432\u0435\u0442!","og:url":"https:\/\/prohoster.info\/ro\/blog\/news\/konfigurirovanie-spark-na-yarn","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2019-10-31T18:36:08+00:00","article:modified_time":"2019-10-31T18:36:08+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"30548","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":"2026-01-21 01:45:22","breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-03-01 03:33:26","updated":"2026-01-21 01:45:22","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/posts\/30548","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/comments?post=30548"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/posts\/30548\/revisions"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/media?parent=30548"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/categories?post=30548"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/tags?post=30548"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}