Konfigurazzjoni ta' Spark fuq YARN

Habr, hello! Ilbieraħ fuq laqgħa ddedikata għal Apache Spark, mill-guys minn Rambler & Co, kien hemm pjuttost ħafna mistoqsijiet mill-parteċipanti relatati mal-konfigurazzjoni ta 'din l-għodda. Iddeċidejna li nimxu fuq il-passi tiegħu u naqsmu l-esperjenza tagħna. Is-suġġett mhuwiex faċli - għalhekk nistednuk taqsam l-esperjenza tiegħek fil-kummenti, forsi aħna wkoll nifhmu u nużaw xi ħaġa ħażina.

Ftit introduzzjoni għal kif nużaw Spark. Għandna programm ta’ tliet xhur “Speċjalista tal-Big Data”, u matul it-tieni modulu l-parteċipanti tagħna jaħdmu fuq dan l-istrument. Għaldaqstant, il-kompitu tagħna, bħala organizzaturi, huwa li nippreparaw il-cluster għall-użu f'każ bħal dan.

Il-partikolarità tal-użu tagħna hija li n-numru ta 'nies li jaħdmu fl-istess ħin fuq Spark jista' jkun ugwali għall-grupp kollu. Pereżempju, f’seminar, meta kulħadd jipprova xi ħaġa fl-istess ħin u jirrepeti wara l-għalliem tagħna. U dan mhux ħafna - kultant sa 40 persuna. Probabbilment m'hemmx ħafna kumpaniji fid-dinja li jiffaċċjaw każ ta' użu bħal dan.

Sussegwentement, ngħidlek kif u għaliex għażilna ċerti parametri tal-konfigurazzjoni.

Nibdew mill-bidu nett. Spark għandu 3 għażliet biex jaħdem fuq cluster: waħdu, bl-użu ta 'Mesos, u bl-użu tal-ĦJUT. Iddeċidejna li nagħżlu t-tielet għażla għax kienet tagħmel sens għalina. Diġà għandna hadoop cluster. Il-parteċipanti tagħna diġà huma familjari sew mal-arkitettura tagħha. Ejja nużaw ĦJUT.

spark.master=yarn

Aktar aktar interessanti. Kull waħda minn dawn it-3 għażliet ta’ skjerament għandha 2 għażliet ta’ skjerament: klijent u cluster. Ibbażat dokumentazzjoni u diversi links fuq l-Internet, nistgħu nikkonkludu li l-klijent huwa adattat għal xogħol interattiv - per eżempju, permezz ta 'jupyter notebook, u cluster huwa aktar adattat għal soluzzjonijiet ta' produzzjoni. Fil-każ tagħna, konna interessati f'xogħol interattiv, għalhekk:

spark.deploy-mode=client

B'mod ġenerali, minn issa 'l quddiem Spark b'xi mod se taħdem fuq YARN, iżda dan ma kienx biżżejjed għalina. Peress li għandna programm dwar il-big data, xi drabi l-parteċipanti ma kellhomx biżżejjed minn dak li nkiseb fil-qafas ta 'tqattigħ uniformi tar-riżorsi. U mbagħad sibna ħaġa interessanti - allokazzjoni dinamika tar-riżorsi. Fil-qosor, il-punt huwa dan: jekk għandek kompitu diffiċli u l-cluster huwa ħieles (per eżempju, filgħodu), allura l-użu ta 'din l-għażla Spark jista' jagħtik riżorsi addizzjonali. Il-ħtieġa hija kkalkulata hemmhekk skond formula għaqlija. Mhux se nidħlu fid-dettalji - taħdem tajjeb.

spark.dynamicAllocation.enabled=true

Aħna waqqafna dan il-parametru, u mal-istartjar Spark ġġarraf u ma bediex. Hekk hu, għax kelli naqrah dokumentazzjoni aktar bir-reqqa. Jiddikjara li sabiex kollox ikun ok, xorta trid tippermetti parametru addizzjonali.

spark.shuffle.service.enabled=true

Għaliex hija meħtieġa? Meta l-impjieg tagħna ma jibqax jeħtieġ daqshekk riżorsi, Spark għandu jirritornahom fil-pool komuni. L-aktar stadju li jieħu ħafna ħin fi kważi kull kompitu MapReduce huwa l-istadju Shuffle. Dan il-parametru jippermettilek li tissejvja d-dejta li tiġi ġġenerata f'dan l-istadju u tirrilaxxa l-eżekuturi kif xieraq. U l-eżekutur huwa l-proċess li jikkalkula kollox fuq il-ħaddiem. Għandu ċertu numru ta 'qlub tal-proċessur u ċertu ammont ta' memorja.

Dan il-parametru ġie miżjud. Kollox deher li jaħdem. Sar notevoli li l-parteċipanti fil-fatt ingħataw aktar riżorsi meta kellhom bżonnhom. Iżda qamet problema oħra - f'xi ħin parteċipanti oħra qamu u riedu wkoll jużaw Spark, iżda kollox kien okkupat hemmhekk, u ma kinux kuntenti. Jistgħu jiġu mifhuma. Bdejna nħarsu lejn id-dokumentazzjoni. Irriżulta li hemm numru ta 'parametri oħra li jistgħu jintużaw biex jinfluwenzaw il-proċess. Pereżempju, jekk l-eżekutur ikun fil-modalità standby, wara liema ħin jistgħu jittieħdu riżorsi minnu?

spark.dynamicAllocation.executorIdleTimeout=120s

Fil-każ tagħna, jekk l-eżekuturi tiegħek ma jagħmlu xejn għal żewġ minuti, imbagħad jekk jogħġbok erġa lura lill-pool komuni. Iżda dan il-parametru mhux dejjem kien biżżejjed. Kien ċar li l-persuna kienet ilha tagħmel xejn, u r-riżorsi ma kinux qed jinħelsu. Irriżulta li hemm ukoll parametru speċjali - wara liema ħin tagħżel eżekuturi li fihom data fil-cache. B'mod awtomatiku, dan il-parametru kien infinità! Aħna kkoreġuha.

spark.dynamicAllocation.cachedExecutorIdleTimeout=600s

Jiġifieri, jekk l-eżekuturi tiegħek ma jagħmlu xejn għal 5 minuti, agħtihom lill-pool komuni. F'dan il-mod, il-veloċità tar-rilaxx u l-ħruġ tar-riżorsi għal numru kbir ta 'utenti saret deċenti. L-ammont ta’ skuntentizza naqas. Iżda aħna ddeċidejna li mmorru aktar u nillimitaw in-numru massimu ta 'eżekuturi għal kull applikazzjoni - essenzjalment għal kull parteċipant fil-programm.

spark.dynamicAllocation.maxExecutors=19

Issa, ovvjament, hemm nies mhux sodisfatti fuq in-naħa l-oħra - "il-grupp huwa inattiv, u għandi biss 19-il eżekutur," imma x'tista 'tagħmel Neħtieġu xi tip ta' bilanċ korrett. Ma tistax tagħmel lil kulħadd kuntent.

U storja żgħira oħra relatata mal-ispeċifiċitajiet tal-każ tagħna. B'xi mod, diversi nies kienu tard għal lezzjoni prattika, u għal xi raġuni Spark ma bdietx għalihom. Ħarsa lejn l-ammont ta’ riżorsi b’xejn – jidher li hemm. L-ispark għandha tibda. Fortunatament, sa dak iż-żmien id-dokumentazzjoni kienet diġà ġiet miżjuda mas-subcortex x'imkien, u ftakarna li meta nibdew Spark, tfittex port li minnha tibda. Jekk l-ewwel port fil-medda huwa okkupat, jimxi lejn dak li jmiss fl-ordni. Jekk huwa b'xejn, jaqbad. U hemm parametru li jindika n-numru massimu ta 'tentattivi għal dan. Id-default huwa 16. In-numru huwa inqas min-numru ta 'nies fil-grupp tagħna fil-klassi. Għaldaqstant, wara 16-il tentattiv, Spark ċeda u qal li ma stajtx nibda. Aħna kkoreġejna dan is-setting.

spark.port.maxRetries=50

Sussegwentement ser ngħidlek dwar xi settings li mhumiex relatati ħafna mal-ispeċifiċitajiet tal-każ tagħna.

Biex tibda Spark aktar malajr, huwa rakkomandat li arkivja l-folder tal-vażetti li jinsab fid-direttorju tad-dar SPARK_HOME u poġġih fuq HDFS. Imbagħad mhux se jaħli ħin jgħabbi dawn il-jarniks mill-ħaddiema.

spark.yarn.archive=hdfs:///tmp/spark-archive.zip

Huwa wkoll rakkomandat li tuża kryo bħala serializzatur għal tħaddim aktar mgħaġġel. Huwa aktar ottimizzat minn dak default.

spark.serializer=org.apache.spark.serializer.KryoSerializer

U hemm ukoll problema li ilha teżisti bi Spark li ħafna drabi tiġġarraf mill-memorja. Ħafna drabi dan jiġri fil-mument meta l-ħaddiema jkunu kkalkulaw kollox u jibagħtu r-riżultat lis-sewwieq. Għamilna dan il-parametru akbar għalina nfusna. B'mod awtomatiku, huwa 1GB, għamilna 3.

spark.driver.maxResultSize=3072

U fl-aħħar, bħala deżerta. Kif taġġorna Spark għall-verżjoni 2.1 fuq id-distribuzzjoni HortonWorks - HDP 2.5.3.0. Din il-verżjoni ta 'HDP fiha verżjoni 2.0 installata minn qabel, iżda darba aħna ddeċidejna għalina nfusna li Spark qed jiżviluppa b'mod pjuttost attiv, u kull verżjoni ġdida tirranġa xi bugs u tipprovdi karatteristiċi addizzjonali, inkluż għall-API python, għalhekk iddeċidejna , x'hemm bżonn li isir huwa aġġornament.

Niżżel il-verżjoni mill-websajt uffiċjali għal Hadoop 2.7. Unzipped u poġġih fil-folder HDP. Installajna s-symlinks kif meħtieġ. Aħna nnieduha - ma tibdax. Jikteb żball stramb ħafna.

java.lang.NoClassDefFoundError: com/sun/jersey/api/client/config/ClientConfig

Wara googling, sirna nafu li Spark iddeċieda li ma jistennewx sakemm Hadoop twieled, u ddeċieda li juża l-verżjoni l-ġdida ta 'jersey. Huma stess jargumentaw ma’ xulxin dwar dan is-suġġett fil-JIRA. Is-soluzzjoni kienet li tniżżel verżjoni tal-flokk 1.17.1. Poġġi dan fil-folder tal-vażetti f'SPARK_HOME, erġa' zip u tella' fuq HDFS.

Dawwarna dan l-iżball, iżda qamet wieħed ġdid u pjuttost razzjonalizzat.

org.apache.spark.SparkException: Yarn application has already ended! It might have been killed or unable to launch application master

Fl-istess ħin, nippruvaw inħaddmu l-verżjoni 2.0 - kollox huwa ok. Ipprova raden x'qed jiġri. Ħarsa fil-ġurnali ta’ din l-applikazzjoni u rajna xi ħaġa bħal din:

/usr/hdp/${hdp.version}/hadoop/lib/hadoop-lzo-0.6.0.${hdp.version}.jar

B'mod ġenerali, għal xi raġuni hdp.version ma ssolvix. Wara google, sibna soluzzjoni. Trid tmur fis-settings tal-ĦJUT f'Ambari u żżid parametru hemmhekk fis-sit tal-ħajt tad-dwana:

hdp.version=2.5.3.0-37

Din il-maġija għenet, u Spark telaq. Ittestjajna bosta mill-laptops jupyter tagħna. Kollox qed jaħdem. Aħna lesti għall-ewwel lezzjoni ta' Spark is-Sibt (għada)!

DUP. Waqt il-lezzjoni ħarġet problema oħra. F'xi punt, YARN waqaf jipprovdi kontenituri għal Spark. Fil-ĦJUT kien meħtieġ li jiġi kkoreġut il-parametru, li awtomatikament kien 0.2:

yarn.scheduler.capacity.maximum-am-resource-percent=0.8

Jiġifieri, 20% biss tar-riżorsi pparteċipaw fid-distribuzzjoni tar-riżorsi. Wara li nbiddlu l-parametri, għamilna mill-ġdid il-ĦJUT. Il-problema ġiet solvuta u l-bqija tal-parteċipanti setgħu wkoll jibdew il-kuntest tal-ispark.

Sors: www.habr.com

Żid kumment