በYARN ላይ ስፓርክን በማዋቀር ላይ

ሀብር ሰላም! ትላንትና በ ለ Apache Spark የተወሰነ ስብሰባከ Rambler&Co ሰዎች፣ ይህን መሳሪያ ከማዋቀር ጋር በተገናኘ ከተሳታፊዎች ብዙ ጥያቄዎች ነበሩ። የእሱን ፈለግ ለመከተል እና የእኛን ተሞክሮ ለመካፈል ወሰንን. ርዕሱ ቀላል አይደለም - ስለዚህ በአስተያየቶች ውስጥ የእርስዎን ልምድ እንዲያካፍሉ እንጋብዝዎታለን, ምናልባት እኛ ደግሞ ተረድተን አንድ የተሳሳተ ነገር እንጠቀማለን.

ስፓርክን እንዴት እንደምንጠቀም ትንሽ መግቢያ። የሶስት ወር ፕሮግራም አለን። "ትልቅ የውሂብ ስፔሻሊስት"እና በሁለተኛው ሞጁል ውስጥ ተሳታፊዎቻችን በዚህ መሳሪያ ላይ ይሰራሉ. በዚህ መሠረት የእኛ ተግባር እንደ አዘጋጆች, በእንደዚህ ዓይነት ጉዳይ ውስጥ ጥቅም ላይ የሚውል ክላስተር ማዘጋጀት ነው.

የአጠቃቀማችን ልዩነት በአንድ ጊዜ በስፓርክ ላይ የሚሰሩ ሰዎች ቁጥር ከጠቅላላው ቡድን ጋር እኩል ሊሆን ይችላል. ለምሳሌ፣ በሴሚናር ላይ፣ ሁሉም በአንድ ጊዜ አንድ ነገር ሲሞክር እና ከመምህራችን በኋላ ይደግማል። እና ይሄ ብዙ አይደለም - አንዳንዴ እስከ 40 ሰዎች. ምናልባት በዓለም ላይ እንዲህ ዓይነቱን የአጠቃቀም ጉዳይ የሚያጋጥሙ ብዙ ኩባንያዎች የሉም።

በመቀጠል, የተወሰኑ የማዋቀሪያ መለኪያዎችን እንዴት እና ለምን እንደመረጥን እነግርዎታለሁ.

ከመጀመሪያው እንጀምር። ስፓርክ በክላስተር ላይ ለማስኬድ 3 አማራጮች አሉት፡ ለብቻው፣ ሜሶስን መጠቀም እና YARN መጠቀም። ሦስተኛውን አማራጭ ለመምረጥ ወሰንን ምክንያቱም ለእኛ ትርጉም ያለው ነው. አስቀድመን የሃዱፕ ክላስተር አለን። የእኛ ተሳታፊዎች ስለ አርክቴክቸር ቀድሞውንም በደንብ ያውቃሉ። YARN እንጠቀም።

spark.master=yarn

የበለጠ አስደሳች። እያንዳንዳቸው እነዚህ 3 የማሰማራት አማራጮች 2 የማሰማራት አማራጮች አሏቸው፡ ደንበኛ እና ክላስተር። የተመሰረተ ሰነድ እና በበይነመረቡ ላይ የተለያዩ አገናኞች ደንበኛው ለተግባራዊ ሥራ ተስማሚ ነው ብለን መደምደም እንችላለን - ለምሳሌ በጁፒተር ማስታወሻ ደብተር እና ክላስተር ለምርት መፍትሄዎች የበለጠ ተስማሚ ነው። በእኛ ሁኔታ ፣ በይነተገናኝ ሥራ ላይ ፍላጎት ነበረን ፣ ስለሆነም

spark.deploy-mode=client

በአጠቃላይ፣ ከአሁን በኋላ ስፓርክ በሆነ መንገድ በYARN ላይ ይሰራል፣ ግን ይህ ለእኛ በቂ አልነበረም። ስለ ትልቅ መረጃ ፕሮግራም ስላለን አንዳንድ ጊዜ ተሳታፊዎቹ በተመጣጣኝ የሃብት ክፍፍል ማዕቀፍ ውስጥ የተገኘውን በቂ መጠን አልነበራቸውም። እና ከዚያ በኋላ አንድ አስደሳች ነገር አገኘን - ተለዋዋጭ ሀብቶች ምደባ። በአጭሩ, ነጥቡ ይህ ነው: አስቸጋሪ ስራ ካጋጠመዎት እና ክላስተር ነጻ ከሆነ (ለምሳሌ, በማለዳ), ከዚያ ይህን አማራጭ መጠቀም Spark ተጨማሪ መገልገያዎችን ሊሰጥዎት ይችላል. አስፈላጊነቱ በተንኮል ቀመር መሰረት እዚያ ይሰላል. ወደ ዝርዝሮች አንገባም - በጥሩ ሁኔታ ይሰራል።

spark.dynamicAllocation.enabled=true

ይህን ግቤት አዘጋጅተናል፣ እና ሲጀመር Spark ተበላሽቷል እና አልጀመረም። ትክክል ነው፣ ምክንያቱም ማንበብ ነበረብኝ ሰነዶች የበለጠ በጥንቃቄ. ሁሉም ነገር ደህና እንዲሆን ተጨማሪ መለኪያ ማንቃት እንዳለቦት ይገልጻል።

spark.shuffle.service.enabled=true

ለምን ያስፈልጋል? የእኛ ስራ ብዙ ሀብቶችን በማይፈልግበት ጊዜ ስፓርክ ወደ የጋራ ገንዳ ሊመልሳቸው ይገባል. በማንኛውም MapReduce ተግባር ውስጥ በጣም ብዙ ጊዜ የሚፈጅ ደረጃ የውዝዋዜ ደረጃ ነው። ይህ ግቤት በዚህ ደረጃ ላይ የተፈጠረውን ውሂብ እንዲያስቀምጡ እና ፈፃሚዎቹን እንዲለቁ ያስችልዎታል. እና ፈፃሚው በሠራተኛው ላይ ያለውን ሁሉ የሚያሰላበት ሂደት ነው. የተወሰነ ቁጥር ያለው ፕሮሰሰር ኮር እና የተወሰነ መጠን ያለው ማህደረ ትውስታ አለው።

ይህ ግቤት ታክሏል። ሁሉም ነገር የሚሰራ ይመስላል። ተሳታፊዎች በሚያስፈልጋቸው ጊዜ ተጨማሪ መገልገያዎችን መሰጠታቸው ጎልቶ የሚታይ ሆነ። ግን ሌላ ችግር ተፈጠረ - በአንድ ወቅት ሌሎች ተሳታፊዎች ከእንቅልፋቸው ሲነቁ እና ስፓርክን መጠቀም ይፈልጋሉ ፣ ግን ሁሉም ነገር እዚያ የተጠመደ ነበር ፣ እናም ደስተኛ አልነበሩም። ሊረዱት ይችላሉ። ሰነዶቹን መመልከት ጀመርን። በሂደቱ ላይ ተጽዕኖ ሊያሳርፉ የሚችሉባቸው ብዙ መለኪያዎች አሁንም እንዳሉ ታወቀ። ለምሳሌ, አስፈፃሚው በተጠባባቂ ሞድ ውስጥ ከሆነ, ከየትኛው ጊዜ በኋላ ሀብቶች ከእሱ ሊወሰዱ ይችላሉ?

spark.dynamicAllocation.executorIdleTimeout=120s

በእኛ ሁኔታ, የእርስዎ አስፈፃሚዎች ለሁለት ደቂቃዎች ምንም ነገር ካላደረጉ, እባክዎን ወደ የጋራ ገንዳ ይመልሱዋቸው. ግን ይህ ግቤት ሁል ጊዜ በቂ አልነበረም። ሰውዬው ለረጅም ጊዜ ምንም ነገር ሲያደርግ እንደነበረ ግልጽ ነበር, እና ሀብቶች አልተለቀቁም. ልዩ ልኬትም እንዳለ ተገለጠ - ከየትኛው ሰዓት በኋላ የተሸጎጠ ውሂብን የያዙ አስፈፃሚዎችን ለመምረጥ። በነባሪ፣ ይህ ግቤት ማለቂያ የሌለው ነበር! አስተካክለነዋል።

spark.dynamicAllocation.cachedExecutorIdleTimeout=600s

ያም ማለት የእርስዎ አስፈፃሚዎች ለ 5 ደቂቃዎች ምንም ነገር ካላደረጉ ለጋራ ገንዳ ስጧቸው. በዚህ ሁነታ ለብዙ ተጠቃሚዎች ሃብቶችን የመልቀቅ እና የማውጣት ፍጥነት ጨዋ ሆኗል። የብስጭት መጠን ቀንሷል። ግን የበለጠ ለመሄድ ወሰንን እና በአንድ መተግበሪያ ውስጥ ከፍተኛውን የፈጻሚዎች ብዛት - በመሠረቱ በእያንዳንዱ ፕሮግራም ተሳታፊ።

spark.dynamicAllocation.maxExecutors=19

አሁን፣ በእርግጥ፣ በሌላ በኩል እርካታ የሌላቸው ሰዎች አሉ - “ክላስተር ስራ ፈት ነው፣ እና እኔ 19 አስፈፃሚዎች ብቻ አሉኝ” ግን ምን ማድረግ ትችላለህ? ትክክለኛ ሚዛን እንፈልጋለን። ሁሉንም ሰው ማስደሰት አይችሉም።

እና ከጉዳያችን ዝርዝር ሁኔታ ጋር የተያያዘ አንድ ተጨማሪ ትንሽ ታሪክ። እንደምንም ፣ ብዙ ሰዎች ለተግባራዊ ትምህርት ዘግይተዋል ፣ እና በሆነ ምክንያት ስፓርክ ለእነሱ አልጀመረም። የነፃ ሀብቶችን መጠን ተመልክተናል - እዚያ ያለ ይመስላል። ስፓርክ መጀመር አለበት. እንደ እድል ሆኖ፣ በዚያን ጊዜ ሰነዱ አስቀድሞ የሆነ ቦታ ላይ ወደ ንዑስ ኮርቴክስ ታክሏል፣ እና ሲጀመር ስፓርክ የሚጀምርበትን ወደብ እንደሚፈልግ አስታውሰናል። በክልል ውስጥ ያለው የመጀመሪያው ወደብ ስራ ከበዛበት፣ በቅደም ተከተል ወደ ቀጣዩ ይሸጋገራል። ነፃ ከሆነ, ይይዛል. እና ለዚህ ከፍተኛውን የሙከራ ብዛት የሚያመለክት መለኪያ አለ. ነባሪው 16 ነው. ቁጥሩ በክፍል ውስጥ በቡድናችን ውስጥ ካሉ ሰዎች ቁጥር ያነሰ ነው. በዚህ መሰረት ከ16 ሙከራዎች በኋላ ስፓርክ ተስፋ ቆርጦ መጀመር እንደማልችል ተናገረ። ይህንን ግቤት አስተካክለነዋል።

spark.port.maxRetries=50

በመቀጠል ከጉዳያችን ዝርዝር ጉዳዮች ጋር በጣም ያልተዛመዱ አንዳንድ ቅንብሮችን እነግርዎታለሁ።

ስፓርክን በፍጥነት ለመጀመር በSPARK_HOME የቤት ማውጫ ውስጥ የሚገኘውን የጃርስ ፎልደር በማህደር ማስቀመጥ እና በኤችዲኤፍኤስ ላይ ማስቀመጥ ይመከራል። ያኔ እነዚህን ጃርኮች በሠራተኞች በመጫን ጊዜ አያባክንም።

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

እንዲሁም ለፈጣን ቀዶ ጥገና kryoን እንደ ሴሪያላይዘር እንዲጠቀሙ ይመከራል። ከነባሪው የበለጠ የተመቻቸ ነው።

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

እና በስፓርክ ላይ ብዙ ጊዜ ከማስታወስ የተነሳ የሚበላሽ የረዥም ጊዜ ችግርም አለ። ብዙውን ጊዜ ይህ የሚሆነው ሰራተኞቹ ሁሉንም ነገር አስልተው ውጤቱን ወደ ሾፌሩ በሚልኩበት ጊዜ ነው. ይህንን መለኪያ ለራሳችን ትልቅ አድርገነዋል። በነባሪ፣ 1ጂቢ ነው፣ 3 አድርገነዋል።

spark.driver.maxResultSize=3072

እና በመጨረሻም ፣ እንደ ጣፋጭ ምግብ። ስፓርክን ወደ ስሪት 2.1 በ HortonWorks ስርጭት ላይ እንዴት ማዘመን እንደሚቻል - HDP 2.5.3.0. ይህ የኤችዲፒ እትም ቀድሞ የተጫነውን 2.0 ስሪት ይዟል፣ ግን አንድ ጊዜ ስፓርክ በንቃት እየሰራ መሆኑን ለራሳችን ወስነናል፣ እና እያንዳንዱ አዲስ ስሪት አንዳንድ ስህተቶችን ያስተካክላል እና የ python APIን ጨምሮ ተጨማሪ ባህሪዎችን ይሰጣል ፣ ስለዚህ ምን ማድረግ እንዳለበት ወስነናል መደረግ ያለበት ዝማኔ ነው።

ስሪቱን ከ Hadoop 2.7 ኦፊሴላዊ ድር ጣቢያ አውርዷል። ዚፕውን ከፍተው በኤችዲፒ አቃፊ ውስጥ አስቀመጡት። እንደ አስፈላጊነቱ ሲምሊንኮችን ጫንን። እናስጀምረዋለን - አይጀምርም። በጣም ግልጽ ያልሆነ ስህተት ይጽፋል.

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

ከተጓዝን በኋላ ስፓርክ ሃዱፕ እስኪወለድ ድረስ ላለመጠበቅ እንደወሰነ እና አዲሱን የማልያ ስሪት ለመጠቀም እንደወሰነ አወቅን። በጂአይኤ ውስጥ ስለዚህ ጉዳይ ራሳቸው እርስ በርሳቸው ይከራከራሉ. መፍትሄው ማውረድ ነበር የጀርሲ ስሪት 1.17.1. ይህንን በSPARK_HOME ውስጥ ባለው የጃርስ ፎልደር ውስጥ ያስቀምጡት፣ እንደገና ዚፕ ያድርጉት እና ወደ HDFS ይስቀሉት።

በዚህ ስህተት ዙሪያ ደርሰናል፣ ነገር ግን አዲስ እና ይልቁንም የተሳለጠ ተከሰተ።

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

በተመሳሳይ ጊዜ, ስሪት 2.0 ለማሄድ እንሞክራለን - ሁሉም ነገር ደህና ነው. ምን እየተፈጠረ እንዳለ ለመገመት ይሞክሩ. የዚህን መተግበሪያ ምዝግብ ማስታወሻዎች ተመልክተናል እና እንደዚህ ያለ ነገር አየን።

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

በአጠቃላይ, በሆነ ምክንያት hdp.version አልተፈታም. ከጎግል በኋላ አንድ መፍትሄ አገኘን. በአምባሪ ውስጥ ወደሚገኘው የYARN መቼቶች መሄድ እና ወደ ብጁ ክር ጣቢያ ልኬት ማከል አለብህ፡

hdp.version=2.5.3.0-37

ይህ አስማት ረድቶታል፣ እና ስፓርክ ተነሳ። በርካታ የጁፒተር ላፕቶቦቻችንን ሞከርን። ሁሉም ነገር እየሰራ ነው። ቅዳሜ (ነገ) ለመጀመሪያው የስፓርክ ትምህርት ተዘጋጅተናል!

DUP. በትምህርቱ ወቅት, ሌላ ችግር ታየ. በአንድ ወቅት፣ YARN ለ Spark ኮንቴይነሮችን ማቅረብ አቆመ። በYARN ውስጥ መለኪያውን ማረም አስፈላጊ ነበር, በነባሪነት 0.2:

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

ማለትም በሃብት ክፍፍል ላይ የተሳተፈው 20% ሃብት ብቻ ነው። መለኪያዎችን ከቀየርን በኋላ, YARN ን እንደገና ጫንን. ችግሩ ተፈትቷል እና የተቀሩት ተሳታፊዎች እንዲሁ ብልጭታ አውድ ማካሄድ ችለዋል።

ምንጭ: hab.com

አስተያየት ያክሉ