Konfigirasyon Spark sou YARN

Habr, alo! Yè sou reyinyon dedye a Apache Spark, soti nan mesye yo nan Rambler & Co, te gen yon anpil nan kesyon patisipan yo ki gen rapò ak konfigirasyon zouti sa a. Nou deside swiv tras li epi pataje eksperyans nou an. Sijè a pa fasil - kidonk nou envite w pataje eksperyans ou nan kòmantè yo, petèt nou menm tou nou konprann epi sèvi ak yon bagay ki mal.

Yon ti entwodiksyon sou fason nou itilize Spark. Nou gen yon pwogram twa mwa "Espesyalis gwo done", epi pandan dezyèm modil la patisipan nou yo ap travay sou enstriman sa a. An konsekans, travay nou an, kòm òganizatè, se prepare gwoup la pou itilize nan yon ka konsa.

Singularité nan itilizasyon nou an se ke kantite moun k ap travay ansanm sou Spark ka egal a tout gwoup la. Pou egzanp, nan yon seminè, lè tout moun eseye yon bagay an menm tan epi repete apre pwofesè nou an. Lè sa a se pa anpil - pafwa jiska 40 moun. Gen pwobableman pa anpil konpayi nan mond lan ki fè fas a tankou yon ka itilize.

Apre sa, mwen pral di w kouman ak poukisa nou chwazi sèten paramèt konfigirasyon.

Ann kòmanse depi nan kòmansman an. Spark gen 3 opsyon pou kouri sou yon gwoup: otonòm, lè l sèvi avèk Mesos, ak lè l sèvi avèk YARN. Nou te deside chwazi twazyèm opsyon a paske li te fè sans pou nou. Nou deja gen yon gwoup Hadoop. Patisipan nou yo deja byen konnen achitekti li yo. Ann sèvi ak FIL.

spark.master=yarn

Pli lwen plis enteresan. Chak nan 3 opsyon deplwaman sa yo gen 2 opsyon deplwaman: kliyan ak gwoup. Baze dokiman ak plizyè lyen sou entènèt la, nou ka konkli ke kliyan se apwopriye pou travay entèaktif - pou egzanp, atravè kaye jupyter, ak grap pi apwopriye pou solisyon pwodiksyon. Nan ka nou an, nou te enterese nan travay entèaktif, kidonk:

spark.deploy-mode=client

An jeneral, depi kounye a Spark pral yon jan kanmenm travay sou YARN, men sa a pa t ase pou nou. Depi nou gen yon pwogram sou gwo done, pafwa patisipan yo pa t 'gen ase nan sa yo te jwenn nan kad yon menm tranche nan resous yo. Lè sa a, nou jwenn yon bagay enteresan - alokasyon resous dinamik. Nan ti bout tan, pwen an se sa a: si ou gen yon travay difisil ak gwoup la gratis (pa egzanp, nan maten an), Lè sa a, lè l sèvi avèk opsyon sa a Spark ka ba ou resous adisyonèl. Nesesite yo kalkile la dapre yon fòmil atizan konn fè. Nou pa pral antre nan detay - li travay byen.

spark.dynamicAllocation.enabled=true

Nou mete paramèt sa a, ak sou demaraj Spark te fè aksidan epi li pa t 'kòmanse. Se vre, paske mwen te oblije li li dokimantasyon plis ak anpil atansyon. Li deklare ke nan lòd pou tout bagay yo dwe ok, ou bezwen tou pèmèt yon paramèt adisyonèl.

spark.shuffle.service.enabled=true

Poukisa li nesesè? Lè travay nou an pa mande anpil resous ankò, Spark ta dwe retounen yo nan pisin komen an. Etap ki pi pran tan nan prèske nenpòt travay MapReduce se etap Shuffle la. Paramèt sa a pèmèt ou sove done ki pwodui nan etap sa a epi lage egzekitè yo kòmsadwa. Ak egzekitè a se pwosesis la ki kalkile tout bagay sou travayè a. Li gen yon sèten kantite nwayo processeur ak yon sèten kantite memwa.

Yo te ajoute paramèt sa a. Tout bagay te sanble travay. Li te vin aparan ke patisipan yo te aktyèlman bay plis resous lè yo te bezwen yo. Men, yon lòt pwoblèm te parèt - nan kèk pwen lòt patisipan yo leve epi tou yo te vle sèvi ak Spark, men tout bagay te okipe la, epi yo pa kontan. Yo ka konprann. Nou te kòmanse gade dokiman an. Li te tounen soti ke gen yon kantite lòt paramèt ki ka itilize enfliyanse pwosesis la. Pou egzanp, si egzekitè a nan mòd sibstiti, apre ki tan yo ka pran resous nan men li?

spark.dynamicAllocation.executorIdleTimeout=120s

Nan ka nou an, si egzekitè ou yo pa fè anyen pou de minit, tanpri retounen yo nan pisin komen an. Men, paramèt sa a pa t toujou ase. Li te klè ke moun nan pa t 'ap fè anyen pou yon tan long, ak resous yo pa te libere. Li te tounen soti ke gen tou yon paramèt espesyal - apre ki tan yo chwazi ègzekutè ki gen done kachèt. Pa default, paramèt sa a te enfini! Nou korije li.

spark.dynamicAllocation.cachedExecutorIdleTimeout=600s

Sa vle di, si egzekitè ou yo pa fè anyen pou 5 minit, ba yo pisin komen an. Nan mòd sa a, vitès la nan divilge ak bay resous pou yon gwo kantite itilizatè yo te vin desan. Kantite mekontantman an diminye. Men, nou deside ale pi lwen epi limite kantite maksimòm egzekitè pou chak aplikasyon - esansyèlman pou chak patisipan nan pwogram.

spark.dynamicAllocation.maxExecutors=19

Koulye a, nan kou, gen moun ki pa satisfè sou lòt bò a - "gwoup la se san fè anyen konsa, epi mwen sèlman gen 19 egzekitè," men ki sa ou ka fè? Nou bezwen kèk kalite balans kòrèk. Ou pa ka fè tout moun kontan.

Ak yon lòt ti istwa ki gen rapò ak spesifik nan ka nou an. Yon jan kanmenm, plizyè moun te an reta pou yon leson pratik, ak pou kèk rezon Spark pa t 'kòmanse pou yo. Nou te gade kantite resous gratis - li sanble la. Spark ta dwe kòmanse. Erezman, nan moman sa a dokiman an te deja ajoute nan subcortex la yon kote, epi nou sonje ke lè te lanse, Spark ap chèche yon pò sou ki kòmanse. Si premye pò a nan seri a okipe, li deplase nan pwochen an nan lòd. Si li gratis, li kaptire. Epi gen yon paramèt ki endike kantite maksimòm tantativ pou sa. Defo a se 16. Nimewo a pi piti pase kantite moun ki nan gwoup nou an nan klas la. An konsekans, apre 16 tantativ, Spark te abandone epi li te di ke mwen pa t 'kapab kòmanse. Nou korije paramèt sa a.

spark.port.maxRetries=50

Apre sa, mwen pral di w kèk paramèt ki pa gen anpil rapò ak spesifik ka nou an.

Pou kòmanse Spark pi vit, li rekòmande pou achiv katab pot ki sitiye nan anyè lakay SPARK_HOME epi mete l sou HDFS. Lè sa a, li pa pral pèdi tan chaje jarnik sa yo pa travayè yo.

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

Li rekòmande tou pou itilize kryo kòm yon serilizer pou operasyon pi vit. Li se pi optimize pase yon sèl la default.

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

Epi gen tou yon pwoblèm ki dire lontan ak Spark ke li souvan aksidan nan memwa. Souvan sa rive nan moman sa a lè travayè yo te kalkile tout bagay epi voye rezilta a bay chofè a. Nou te fè paramèt sa a pi gwo pou tèt nou. Pa default, li se 1GB, nou te fè li 3.

spark.driver.maxResultSize=3072

Epi anfen, kòm yon desè. Ki jan yo mete ajou Spark nan vèsyon 2.1 sou distribisyon HortonWorks - HDP 2.5.3.0. Vèsyon HDP sa a gen yon vèsyon pre-enstale 2.0, men nou yon fwa te deside pou tèt nou ke Spark ap devlope byen aktivman, ak chak nouvo vèsyon ranje kèk ensèk plis bay karakteristik adisyonèl, ki gen ladan pou API a python, se konsa nou deside , sa ki bezwen dwe fè se yon aktyalizasyon.

Telechaje vèsyon an nan sit entènèt ofisyèl la pou Hadoop 2.7. Dekonprime li epi mete l nan katab HDP la. Nou enstale lyen senbolik yo jan sa nesesè. Nou lanse li - li pa kòmanse. Ekri yon erè trè klè.

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

Apre google, nou te jwenn ke Spark deside pa rete tann jiskaske Hadoop te fèt, epi li deside sèvi ak nouvo vèsyon an nan Jersey. Yo menm yo diskite youn ak lòt sou sijè sa a nan JIRA. Solisyon an te telechaje vèsyon jersey 1.17.1. Mete sa a nan katab pot yo nan SPARK_HOME, zip li ankò epi telechaje li sou HDFS.

Nou te rive alantou erè sa a, men yon nouvo e olye rasyonalize te parèt.

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

An menm tan an, nou eseye kouri vèsyon 2.0 - tout bagay se ok. Eseye devine sa k ap pase. Nou gade nan mòso bwa aplikasyon sa a epi nou wè yon bagay tankou sa a:

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

An jeneral, pou kèk rezon hdp.version pa t rezoud. Apre google, nou jwenn yon solisyon. Ou bezwen ale nan anviwònman yo YARN nan Ambari epi ajoute yon paramèt la nan sit koutim fil:

hdp.version=2.5.3.0-37

Majik sa a te ede, ak Spark te ale. Nou teste plizyè nan laptops jupyter nou yo. Tout bagay ap travay. Nou pare pou premye leson Spark Samdi (demen)!

DUP. Pandan leson an, yon lòt pwoblèm te parèt. Nan kèk pwen, YARN sispann bay resipyan pou Spark. Nan YARN li te nesesè yo korije paramèt la, ki pa default te 0.2:

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

Sa vle di, sèlman 20% nan resous te patisipe nan distribisyon resous yo. Apre chanje paramèt yo, nou rechaje FIL. Pwoblèm nan te rezoud ak rès patisipan yo te kapab tou kouri kontèks etensèl.

Sous: www.habr.com

Add nouvo kòmantè