Ngonpigurasikeun Spark on BENANG

Habr, hejo! Kamari on meetup dedicated ka Apache Spark, ti guys ti Rambler & Co, aya rada loba patarosan ti pamilon patali Konfigurasi alat ieu. Urang mutuskeun pikeun nuturkeun footsteps sarta babagi pangalaman urang. Topikna henteu gampang - janten kami ngajak anjeun ngabagi pangalaman anjeun dina koméntar, panginten urang ogé ngartos sareng nganggo anu salah.

A bubuka saeutik kana kumaha urang ngagunakeun Spark. Kami ngagaduhan program tilu bulan "Spésialis Big Data", sareng sapanjang modul kadua pamilon urang ngerjakeun alat ieu. Sasuai, tugas urang, salaku panitia, nyaéta nyiapkeun klaster pikeun dianggo dina kasus sapertos kitu.

The peculiarity tina pamakéan urang nyaeta jumlah jalma sakaligus dipake dina Spark bisa sarua jeung sakabéh grup. Contona, dina seminar, nalika dulur nyoba hiji hal dina waktos anu sareng repeats sanggeus guru urang. Sareng ieu henteu seueur - kadang dugi ka 40 urang. Panginten henteu seueur perusahaan di dunya anu nyanghareupan kasus panggunaan sapertos kitu.

Salajengna, abdi bakal ngabejaan ka maneh kumaha jeung naha urang milih parameter config tangtu.

Hayu urang mimitian ti mimiti pisan. Spark gaduh 3 pilihan pikeun ngajalankeun klaster: mandiri, nganggo Mesos, sareng nganggo BENANG. Urang mutuskeun pikeun milih pilihan katilu sabab masuk akal pikeun urang. Urang geus boga kluster hadoop. Pamilon urang parantos terang kana arsitékturna. Hayu urang nganggo BENANG.

spark.master=yarn

Salajengna langkung narik. Masing-masing tina 3 pilihan panyebaran ieu ngagaduhan 2 pilihan panyebaran: klien sareng klaster. Dumasar dokuméntasi sarta sagala rupa Tumbu on Internét, urang bisa disimpulkeun yen klien cocog pikeun karya interaktif - contona, ngaliwatan notebook jupyter, sarta klaster leuwih cocog pikeun solusi produksi. Dina hal urang, urang museurkeun karya interaktif, ku kituna:

spark.deploy-mode=client

Sacara umum, ti ayeuna Spark kumaha bae bakal dianggo dina BENANG, tapi ieu teu cukup keur urang. Kusabab urang boga program ngeunaan data badag, kadang pamilon teu boga cukup naon anu dicandak dina kerangka hiji malah slicing sumberdaya. Teras kami mendakan hiji hal anu pikaresepeun - alokasi sumber daya dinamis. Pondokna, intina nyaéta kieu: upami anjeun ngagaduhan tugas anu sesah sareng kluster gratis (contona, isuk-isuk), teras nganggo pilihan ieu Spark tiasa masihan anjeun sumber tambahan. Kabutuhan diitung aya nurutkeun rumus licik. Kami moal asup kana detil - éta tiasa dianggo saé.

spark.dynamicAllocation.enabled=true

Kami nyetél parameter ieu, sareng nalika ngamimitian Spark nabrak sareng henteu ngamimitian. Éta leres, sabab kuring kedah maca dokuméntasi leuwih taliti. Éta nyatakeun yén supados sadayana ok, anjeun ogé kedah ngaktipkeun parameter tambahan.

spark.shuffle.service.enabled=true

Naha éta diperlukeun? Nalika padamelan urang henteu peryogi deui seueur sumber, Spark kedah ngabalikeunana ka kolam renang umum. Tahap anu paling nyéépkeun waktos dina ampir sadaya tugas MapReduce nyaéta tahap Shuffle. Parameter ieu ngamungkinkeun anjeun pikeun ngahemat data anu dihasilkeun dina tahap ieu sareng ngaleupaskeun pelaksana anu sasuai. Jeung pelaksana nyaéta prosés nu Etang sagalana on worker nu. Cai mibanda sababaraha cores processor sarta jumlah nu tangtu memori.

Parameter ieu geus ditambahkeun. Sagalana sigana jalan. Ieu janten noticeable yén pamilon sabenerna dibere leuwih sumberdaya nalika aranjeunna diperlukeun. Tapi masalah sejen timbul - di sawatara titik pamilon séjén bangun sarta ogé hayang ngagunakeun Spark, tapi sagalana sibuk aya, sarta maranéhanana éta bagja. Aranjeunna tiasa kahartos. Urang mimitian ningali dokuméntasi. Tétéla aya sababaraha parameter séjén anu tiasa dianggo pikeun mangaruhan prosés. Salaku conto, upami pelaksana dina modeu sayaga, saatos sabaraha waktos sumberna tiasa dicandak?

spark.dynamicAllocation.executorIdleTimeout=120s

Dina kasus urang, lamun executors anjeun ngalakukeun nanaon salila dua menit, teras punten balikkeun aranjeunna ka kolam renang umum. Tapi parameter ieu teu salawasna cukup. Ieu jelas yén jalma éta geus lila teu ngalakukeun nanaon, sarta sumberdaya teu dibébaskeun. Tétéla aya ogé parameter husus - sanggeus naon waktos milih executors nu ngandung data sindangan. Sacara standar, parameter ieu teu aya watesna! Urang koreksi deui.

spark.dynamicAllocation.cachedExecutorIdleTimeout=600s

Hartina, lamun executors Anjeun ngalakukeun nanaon pikeun 5 menit, masihan ka kolam renang umum. Dina modeu ieu, laju ngaleupaskeun sareng ngaluarkeun sumber daya pikeun sajumlah ageung pangguna parantos santun. Jumlah discontent geus ngurangan. Tapi kami mutuskeun pikeun langkung jauh sareng ngawatesan jumlah maksimal pelaksana per aplikasi - dasarna per pamilon program.

spark.dynamicAllocation.maxExecutors=19

Ayeuna, tangtosna, aya jalma sugema di sisi séjén - "kluster dianggurkeun, sarta kuring ngan boga 19 executors," tapi naon anjeun tiasa ngalakukeun? Urang kudu sababaraha jenis kasaimbangan bener. Anjeun teu bisa nyieun dulur senang.

Sareng hiji deui carita leutik anu aya hubunganana sareng spésifikasi kasus urang. Kumaha bae, sababaraha urang telat pikeun palajaran praktis, sarta pikeun sababaraha alesan Spark teu ngamimitian pikeun aranjeunna. Urang nempo jumlah sumberdaya bébas - sigana aya. Spark kudu ngamimitian. Untungna, ku waktu éta dokuméntasi geus ditambahkeun kana subcortex wae, sarta kami inget yen nalika diluncurkeun, Spark néangan port nu dimimitian. Lamun port munggaran dina rentang sibuk, éta ngalir ka hareup dina urutan. Upami éta gratis, éta ngarebut. Tur aya parameter nu nunjukkeun jumlah maksimum usaha pikeun ieu. Standarna nyaéta 16. Jumlahna kurang tina jumlah jalma di grup urang di kelas. Sasuai, sanggeus 16 usaha, Spark nyerah sarta ngomong yén kuring teu bisa ngamimitian. Kami geus dilereskeun setelan ieu.

spark.port.maxRetries=50

Salajengna, kuring bakal nyarioskeun ka anjeun ngeunaan sababaraha setélan anu henteu aya hubunganana sareng spésifikasi kasus urang.

Pikeun ngamimitian Spark langkung gancang, disarankeun pikeun ngarsipkeun folder jars anu aya dina diréktori bumi SPARK_HOME teras nahan kana HDFS. Lajeng anjeunna moal runtah waktu loading jarniks ieu ku pagawe.

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

Disarankeun ogé ngagunakeun kryo salaku serializer pikeun operasi gancang. Éta langkung dioptimalkeun tibatan standar.

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

Tur aya ogé masalah lila-ngadeg kalawan Spark nu mindeng ngadat tina memori. Mindeng ieu kajadian di momen nalika pagawe geus diitung sagalana jeung ngirim hasilna ka supir. Urang ngadamel parameter ieu langkung ageung pikeun diri urang sorangan. Sacara standar, éta 1GB, kami ngajantenkeun 3.

spark.driver.maxResultSize=3072

Jeung pamungkas, salaku dessert a. Kumaha carana ngapdet Spark kana versi 2.1 pa distribusi HortonWorks - HDP 2.5.3.0. Vérsi HDP ieu ngandung versi 2.0 tos kapasang, tapi urang sakali mutuskeun pikeun diri urang sorangan yén Spark ngembang rada aktip, sarta unggal versi anyar ngalereskeun sababaraha bug tambah nyadiakeun fitur tambahan, kaasup pikeun API python, sangkan mutuskeun , naon nu kudu dilakukeun nyaéta pembaruan.

Unduh versi tina situs wéb resmi pikeun Hadoop 2.7. Buka zip teras lebetkeun kana polder HDP. Urang dipasang symlinks sakumaha diperlukeun. Urang ngajalankeun éta - éta henteu ngamimitian. Nulis kasalahan pisan aneh.

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

Saatos googling, urang mendakan yén Spark mutuskeun henteu ngantosan dugi Hadoop lahir, sareng mutuskeun nganggo versi jersey énggal. Aranjeunna sorangan ngajawab saling ngeunaan topik ieu di JIRA. Leyuran éta pikeun ngundeur Vérsi jersey 1.17.1. Teundeun ieu dina folder kendi di SPARK_HOME, zip deui jeung unggah ka HDFS.

Urang meunang sabudeureun kasalahan ieu, tapi hiji anyar jeung rada streamlined timbul.

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

Dina waktos anu sami, urang nyobian ngajalankeun versi 2.0 - sadayana henteu kunanaon. Coba nebak naon anu lumangsung. Kami ningali kana log aplikasi ieu sareng ningali sapertos kieu:

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

Sacara umum, pikeun sababaraha alesan hdp.version teu ngabéréskeun. Saatos googling, urang mendakan solusi. Anjeun kedah angkat ka setélan BENANG di Ambari sareng tambahkeun parameter didinya kana situs benang khusus:

hdp.version=2.5.3.0-37

Sihir ieu ngabantosan, sareng Spark angkat. Kami nguji sababaraha laptop jupyter kami. Sagalana jalan. Kami siap pikeun palajaran Spark munggaran dinten Saptu (isukan)!

UPDAT. Salila palajaran, masalah séjén datang ka lampu. Dina sababaraha waktos, BENANG lirén nyayogikeun wadah pikeun Spark. Dina BENANG ieu diperlukeun pikeun ngabenerkeun parameter, nu sacara standar éta 0.2:

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

Hartina, ngan 20% sumberdaya nu ilubiung dina distribusi sumberdaya. Saatos ngarobih parameter, kami ngamuat deui BENANG. Masalahna direngsekeun sareng sesa pamilon ogé tiasa ngajalankeun kontéks spark.

sumber: www.habr.com

Tambahkeun komentar