Pag-configure sa Spark sa YARN

Habr, hello! Kagahapon sa meetup nga gipahinungod sa Apache Spark, gikan sa mga lalaki gikan sa Rambler&Co, adunay daghang mga pangutana gikan sa mga partisipante nga may kalabutan sa pag-configure niini nga himan. Nakahukom mi nga sundon ang iyang mga tunob ug ipaambit ang among kasinatian. Dili sayon ​​ang hilisgutan - mao nga gidapit ka namo nga ipaambit ang imong kasinatian sa mga komentaryo, tingali nakasabot usab kami ug naggamit sa usa ka butang nga sayup.

Usa ka gamay nga pasiuna kung giunsa namon gigamit ang Spark. Adunay kami tulo ka bulan nga programa "Daghang Espesyalista sa Data", ug sa tibuok ikaduhang module ang among mga partisipante nagtrabaho niini nga instrumento. Subay niini, ang among tahas, isip mga organizer, mao ang pag-andam sa cluster para magamit sulod sa maong kaso.

Ang pagkatalagsaon sa among paggamit mao nga ang gidaghanon sa mga tawo nga dungan nga nagtrabaho sa Spark mahimong managsama sa tibuuk nga grupo. Pananglitan, sa usa ka seminar, kung ang tanan magsulay sa usa ka butang sa parehas nga oras ug magbalikbalik pagkahuman sa among magtutudlo. Ug dili kini daghan - usahay hangtod sa 40 ka tawo. Tingali dili daghang mga kompanya sa kalibutan ang nag-atubang sa ingon nga kaso sa paggamit.

Sunod, isulti ko kanimo kung giunsa ug ngano nga gipili namon ang pipila nga mga parameter sa config.

Magsugod ta sa sinugdanan. Ang Spark adunay 3 ka kapilian nga modagan sa usa ka cluster: standalone, gamit ang Mesos, ug gamit ang YARN. Nakahukom kami nga pilion ang ikatulo nga kapilian tungod kay kini makatarunganon alang kanamo. Naa na tay hadoop cluster. Ang among mga partisipante pamilyar na kaayo sa arkitektura niini. Gamiton nato ang YARN.

spark.master=yarn

Dugang nga mas makapaikag. Ang matag usa niining 3 ka opsyon sa pag-deploy adunay 2 ka opsyon sa pag-deploy: kliyente ug cluster. Gibasehan dokumentasyon ug lainlaing mga link sa Internet, makahinapos kita nga ang kliyente angay alang sa interactive nga trabaho - pananglitan, pinaagi sa jupyter notebook, ug ang cluster mas angay alang sa mga solusyon sa produksiyon. Sa among kaso, kami interesado sa interactive nga trabaho, busa:

spark.deploy-mode=client

Sa kinatibuk-an, gikan karon ang Spark sa bisan unsang paagi molihok sa YARN, apan kini dili igo alang kanamo. Tungod kay kami adunay usa ka programa bahin sa dagkong datos, usahay ang mga partisipante kulang sa kung unsa ang nakuha sulod sa balangkas sa usa ka parehas nga paghiwa sa mga kapanguhaan. Ug dayon nakit-an namon ang usa ka makapaikag nga butang - dinamikong alokasyon sa kapanguhaan. Sa laktud, ang punto mao kini: kung ikaw adunay usa ka lisud nga buluhaton ug ang cluster libre (pananglitan, sa buntag), unya ang paggamit niini nga opsyon Spark makahatag kanimo og dugang nga mga kapanguhaan. Ang panginahanglan gikalkula didto sumala sa usa ka maliputon nga pormula. Dili kami moadto sa mga detalye - maayo kini nga molihok.

spark.dynamicAllocation.enabled=true

Gibutang namon kini nga parameter, ug sa pagsugod sa Spark nahagsa ug wala magsugod. Husto, kay kinahanglan nakong basahon kini dokumentasyon mas maampingon. Kini nag-ingon nga aron ang tanan mahimong ok, kinahanglan usab nimo nga i-enable ang usa ka dugang nga parameter.

spark.shuffle.service.enabled=true

Nganong gikinahanglan kini? Kung ang among trabaho wala na nanginahanglan daghang mga kapanguhaan, kinahanglan nga ibalik kini sa Spark sa komon nga pool. Ang pinakadugay nga yugto sa halos bisan unsang buluhaton sa MapReduce mao ang yugto sa Shuffle. Gitugotan ka niini nga parameter nga i-save ang datos nga nahimo sa kini nga yugto ug buhian ang mga tigpatuman sumala niana. Ug ang tigpatuman mao ang proseso nga nagkalkula sa tanan sa trabahante. Kini adunay usa ka piho nga gidaghanon sa mga core sa processor ug usa ka piho nga kantidad sa memorya.

Kini nga parameter gidugang. Morag nagtrabaho ang tanan. Namatikdan nga ang mga partisipante gihatagan gyud ug dugang nga mga kapanguhaan kung gikinahanglan nila kini. Apan mitungha ang laing problema - sa usa ka punto ang ubang mga partisipante nahigmata ug gusto usab nga gamiton ang Spark, apan ang tanan busy didto, ug sila dili malipayon. Makasabot sila. Nagsugod kami sa pagtan-aw sa dokumentasyon. Nahibal-an nga adunay daghang uban pang mga parameter nga magamit aron maimpluwensyahan ang proseso. Pananglitan, kung ang executor naa sa standby mode, pagkahuman sa unsang oras makuha ang mga kapanguhaan gikan niini?

spark.dynamicAllocation.executorIdleTimeout=120s

Sa among kaso, kung wala’y mahimo ang imong mga tigpatuman sulod sa duha ka minuto, palihug ibalik sila sa komon nga pool. Apan kini nga parameter dili kanunay igo. Klaro nga ang tawo wala’y nahimo sa dugay nga panahon, ug ang mga kahinguhaan wala mapagawas. Nahibal-an nga adunay usa usab ka espesyal nga parameter - pagkahuman kung unsang orasa pilion ang mga executors nga adunay sulud nga naka-cache nga datos. Sa kasagaran, kini nga parameter kay walay katapusan! Among gitul-id kini.

spark.dynamicAllocation.cachedExecutorIdleTimeout=600s

Sa ato pa, kung wala’y mahimo ang imong mga executors sulod sa 5 minuto, ihatag sila sa common pool. Sa kini nga mode, ang katulin sa pagpagawas ug pag-isyu sa mga kapanguhaan alang sa daghang mga tiggamit nahimong disente. Ang gidaghanon sa pagkadiskontento mikunhod. Apan nakahukom kami nga mopadayon ug limitahan ang kinatas-ang gidaghanon sa mga tigpatuman matag aplikasyon - sa esensya kada partisipante sa programa.

spark.dynamicAllocation.maxExecutors=19

Karon, siyempre, adunay dili kontento nga mga tawo sa pikas nga bahin - "ang kumpol wala’y trabaho, ug ako adunay 19 ra nga tigpatuman," apan unsa ang imong mahimo? Nagkinahanglan kami usa ka matang sa husto nga balanse. Dili nimo mapalipay ang tanan.

Ug usa pa ka gamay nga istorya nga may kalabutan sa mga detalye sa among kaso. Sa usa ka paagi, daghang mga tawo ang naulahi alang sa usa ka praktikal nga leksyon, ug sa pipila ka hinungdan wala magsugod ang Spark alang kanila. Among gitan-aw ang gidaghanon sa libre nga mga kahinguhaan - kini daw anaa. Kinahanglan magsugod ang spark. Maayo na lang, niadtong panahona ang dokumentasyon nadugang na sa subcortex sa usa ka dapit, ug among nahinumduman nga sa dihang gilusad, ang Spark nangita og usa ka pantalan diin magsugod. Kung ang unang pantalan sa range busy, kini mobalhin ngadto sa sunod nga usa sa han-ay. Kung kini libre, kini makuha. Ug adunay usa ka parameter nga nagpaila sa labing kadaghan nga mga pagsulay alang niini. Ang default mao ang 16. Ang gidaghanon mas gamay kaysa sa gidaghanon sa mga tawo sa among grupo sa klase. Busa, human sa 16 ka pagsulay, si Spark mihunong ug miingon nga dili ko makasugod. Gitul-id namo kini nga parameter.

spark.port.maxRetries=50

Sunod isulti ko kanimo ang bahin sa pipila ka mga setting nga dili kaayo kalabutan sa mga detalye sa among kaso.

Aron masugdan ang Spark nga mas paspas, girekomendar nga i-archive ang jars folder nga nahimutang sa SPARK_HOME home directory ug ibutang kini sa HDFS. Unya dili siya mag-usik ug panahon sa pagkarga niining mga jarnik sa mga trabahante.

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

Girekomenda usab nga gamiton ang kryo isip serializer alang sa mas paspas nga operasyon. Kini mas optimized kay sa default.

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

Ug adunay usa usab ka dugay nga problema sa Spark nga kanunay nga nahagsa gikan sa panumduman. Kasagaran kini mahitabo sa higayon nga ang mga trabahante kalkulado ang tanan ug ipadala ang resulta ngadto sa drayber. Gihimo namo kini nga parameter nga mas dako alang sa among kaugalingon. Sa kasagaran, kini 1GB, gihimo namo kini nga 3.

spark.driver.maxResultSize=3072

Ug sa katapusan, ingon usa ka dessert. Giunsa ang pag-update sa Spark sa bersyon 2.1 sa pag-apod-apod sa HortonWorks - HDP 2.5.3.0. Kini nga bersyon sa HDP naglangkob sa usa ka pre-installed nga bersyon 2.0, apan kami sa makausa nakahukom alang sa among kaugalingon nga ang Spark aktibo nga nag-uswag, ug ang matag bag-ong bersyon nag-ayo sa pipila ka mga bug ug naghatag og dugang nga mga bahin, lakip ang alang sa python API, mao nga nakahukom kami, unsa ang kinahanglan buhaton mao ang usa ka update.

Gi-download ang bersyon gikan sa opisyal nga website alang sa Hadoop 2.7. Unzip kini ug ibutang sa HDP folder. Gi-install namon ang mga symlink kung gikinahanglan. Gilunsad namo kini - wala kini magsugod. Nagsulat usa ka katingad-an nga sayup.

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

Pagkahuman sa pag-googling, nahibal-an namon nga nakahukom si Spark nga dili maghulat hangtod matawo si Hadoop, ug nakahukom nga gamiton ang bag-ong bersyon sa jersey. Sila mismo ang naglalis sa usag usa bahin niini nga hilisgutan sa JIRA. Ang solusyon mao ang pag-download jersey nga bersyon 1.17.1. Ibutang kini sa jars folder sa SPARK_HOME, i-zip kini pag-usab ug i-upload kini sa HDFS.

Nasulbad namo kini nga sayop, apan mitungha ang usa ka bag-o ug mas hapsay.

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

Sa parehas nga oras, gisulayan namon nga ipadagan ang bersyon 2.0 - ok ra ang tanan. Sulayi pagtag-an kung unsa ang nahitabo. Gitan-aw namon ang mga log sa kini nga aplikasyon ug nakita ang usa ka butang nga sama niini:

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

Sa kinatibuk-an, sa pipila ka rason hdp.version wala masulbad. Pagkahuman sa pag-googling, nakit-an namon ang solusyon. Kinahanglan ka nga moadto sa mga setting sa YARN sa Ambari ug magdugang usa ka parameter didto sa custom nga yarn-site:

hdp.version=2.5.3.0-37

Kini nga salamangka nakatabang, ug si Spark milupad. Gisulayan namo ang pipila sa among jupyter nga mga laptop. Ang tanan nagtrabaho. Andam na kami sa unang leksyon sa Spark sa Sabado (ugma)!

DUP. Atol sa leksyon, lain nga problema ang miabut. Sa usa ka punto, ang YARN mihunong sa paghatag og mga sudlanan alang sa Spark. Sa YARN gikinahanglan ang pagtul-id sa parameter, nga sa default mao ang 0.2:

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

Sa ato pa, 20% ra sa mga kahinguhaan ang miapil sa pag-apod-apod sa mga kahinguhaan. Pagkahuman sa pagbag-o sa mga parameter, gi-reload namon ang YARN. Nasulbad ang problema ug ang ubang mga partisipante nakahimo usab sa pagsugod sa konteksto sa spark.

Source: www.habr.com

Idugang sa usa ka comment