Sparkを活用した推薦基盤のバッチフレームワーク / Spark

Sparkを活用した推薦基盤のバッチフレームワーク / Spark

内藤 遥
Jun 28, 2019
Data Engineering & Data Analysis WS#8

2016ba6b977a2e6691811fa66d5f4336?s=128

CyberAgent

June 28, 2019
Tweet

Transcript

  1. 4QBSLΛ׆༻ͨ͠ਪનج൫ͷόονϑϨʔϜϫʔΫ ಺౻ ང +VO  %BUB&OHJOFFSJOH%BUB"OBMZTJT84

  2. ࣗݾ঺հ ˔ ಺౻ ང ͳ͍ͱ͏ Α͏ ˔ ೥ ৽ଔೖࣾ ˔

    ٕज़ຊ෦ ळ༿ݪϥϘॴଐ ˔ ΍͍ͬͯΔ͜ͱਪનγεςϜɺݕࡧγεςϜͷ։ൃɺӡ༻ ˔ ޷͖ͳϥʔϝϯ୆࿷·ͥͦ͹ ˔ ޷͖ͳ͓স͍ܳਓͳ͔΍·͖Μʹ܅
  3. ϝσΟΞαʔϏεͱ ਪનج൫ͷόονϑϨʔϜϫʔΫ ਪનδϣϒʹ͍ͭͯ .BUSJY'BDUPSJ[BUJPO Ϩγϐ 5JQT ·ͱΊͱࠓޙͷల๬

  4. ϝσΟΞαʔϏεͱ ਪનج൫ͷόονϑϨʔϜϫʔΫ ਪનδϣϒʹ͍ͭͯ .BUSJY'BDUPSJ[BUJPO Ϩγϐ 5JQT ·ͱΊͱࠓޙͷల๬

  5. ϝσΟΞαʔϏεʹ͓͚Δਪન ˔ "CFNB57ɺ"NFCBϒϩάΛ͸͡Ίͱ͢Δ ༷ʑͳϝσΟΞαʔϏεͷڞ௨ج൫ͷػೳͱͯ͠ఏڙ

  6. ਪનج൫ͷશମ૾ʹ͍ͭͯ ͜͜ͷ෦෼ʹ͍ͭͯ ͓࿩͠·͢ ( ストリーム処理基盤 )

  7. σʔλղੳج൫ 1BUSJPU ˔ )BEPPQϕʔεͷσʔλղੳج൫ ˓ )%'4ɺ:"3/ɺ)JWFɺ)#BTFɺ'MVNFɺ4QBSLɺFUD ˔ ϝσΟΞαʔϏεͷσʔλΛू໿ ಺੡ύοέʔδʹΑΔ)BEPPQσʔλղੳج൫ͷߏஙͱӡ༻ IUUQTXXXTMJEFTIBSFOFUDZCFSBHFOUIBEPPQ

  8. όονϑϨʔϜϫʔΫʹ͍ͭͯ  ˔ ਪનγεςϜͷόονॲཧ͸ఆܕతͳॲཧ͕ଟ͍ ˓ ֶश༻σʔλͷऔಘɺ੔ܗ ˓ Ϟσϧͷֶशɺਪન݁Ռͷ࡞੒ ˓ ਪન݁Ռͷॻ͖ग़͠ͳͲ

    ˔ ৽نαʔϏεͷಋೖίετ΍ӡ༻ίετΛ࡟ݮ͍ͨ͠ όονϑϨʔϜϫʔΫ։ൃͷඞཁੑ
  9. όονϑϨʔϜϫʔΫʹ͍ͭͯ  ˔ 4QBSLΛར༻લఏͰ։ൃ ˓ "QBDIF#FBNΛ࢖ͬͯ෼ࢄॲཧΤϯδϯΛந৅Խ͢Δ͜ͱ΋ ݕ౼͕ͨ͠ɺࡉ͔͍ϓϩύςΟͷઃఆ΍ෳࡶͳॲཧ͕Ͱ͖ͳͦ͏ͩͬͨ ˔ +BWB 4QSJOH#PPU

    ˓ %*ͳͲ࢖͍উखͷྑ͞ ˓ ๛෋ͳ࣮੷
  10. ࣮૷ͷߏ੒ཁૉ  ˔ δϣϒ ˓ Ұ࿈ͷॲཧͷྲྀΕ ˓ όον͸͜ͷ୯ҐͰ࣮ߦ͞ΕΔ ˙ ਪનδϣϒɺϞσϧͷΦϑϥΠϯධՁδϣϒɺʜ

    ˓ ໿ݸ ͷδϣϒ͕ຊ൪؀ڥͰՔಇத ˔ λεΫ ˓ δϣϒͷதʹؚ·ΕΔͻͱ·ͱ·Γͷॲཧͷ୯Ґ ˙ σʔλͷಡΈࠐΈɺਪન݁Ռͷॻ͖ग़͠ɺʜ ˓ λεΫ͝ͱʹ࣮૷Ϋϥε͕ଘࡏ͠ɺઃఆʹΑΔ੾ସ͕Ͱ͖Δ
  11. ࣮૷ͷߏ੒ཁૉ  ˔ Ϩγϐ ˓ ࣮ߦ͢Δδϣϒͷछྨ΍ɺδϣϒ಺ͷ֤छλεΫͷઃఆͳͲɺ δϣϒͷத਎Λܗ੒͢ΔઃఆϑΝΠϧ ˓ :".-ܗࣜͰ؅ཧ ޙड़

  12. ϝσΟΞαʔϏεͱ ਪનج൫ͷόονϑϨʔϜϫʔΫ ਪનδϣϒʹ͍ͭͯ .BUSJY'BDUPSJ[BUJPO Ϩγϐ 5JQT ·ͱΊͱࠓޙͷల๬

  13. ਪનδϣϒσʔλϑϩʔਤ શମ૾ খ͗ͯ͢͞ݟ͑ͳ͍ʂ ˔࣮૷͕੾ସՄೳͳλεΫ ˔δϣϒ૊ΈࠐΈͷλεΫ

  14. ਪનδϣϒσʔλϑϩʔਤ શମ૾

  15. ਪનδϣϒσʔλϑϩʔਤ લ൒ 

  16. ਪનδϣϒσʔλϑϩʔਤ લ൒  ˔ 4QBSL4FTTJPOΛੜ੒ ˓ 4QBSL্ͰΞϓϦέʔγϣϯΛ࣮ߦ͢ΔͨΊͷΤϯτϦʔϙΠϯτ ˓ ࣮ߦ؀ڥ ੾ସՄ

    ˙ :"3/ 1BUSJPU ˙ ϩʔΧϧ
  17. ਪનδϣϒσʔλϑϩʔਤ લ൒  ˔ ֶश༻σʔλͷಡΈࠐΈ ˓ 4QBSL%BUBTFUΛੜ੒ ˓ σʔλιʔε ੾ସՄ

    ˙ 4QBSL42- ˙ )%'4 ˙ 4 ˙ #JH2VFSZ ˙ ʜ
  18. ਪનδϣϒσʔλϑϩʔਤ લ൒  ˔ αʔϏεґଘͷલॲཧΛద༻ ˓ 4QBSL42-Ͱ͸೉͍͠ෳࡶͳॲཧ ˓ αʔϏεͷϚελʔσʔλ ֎෦σʔλ

    ͷ+PJOͳͲ ˔ ਪન݁ՌͷΞΠςϜͷϑΟϧλ৚݅ͷఆٛ ˓ ΞΠςϜͷϑΟϧλ ˙ ৽نʹ௥Ճ͞Ε͔ͯΒ̎िؒҎ಺ͷΞΠςϜ ˙ 17͕Ҏ্ͷΞΠςϜͳͲ ˓ Ϣʔβ UPΞΠςϜͷϑΟϧλ ˙ ϢʔβͷߪೖཤྺͳͲ ˓ ΞΠςϜ UPΞΠςϜͷϑΟϧλ ˙ ͋ΔΞΠςϜʹର͢ΔಉҰδϟϯϧͷΞΠςϜͳͲ ˓ ޙଓͷਪન݁Ռͷੜ੒Ͱద༻͞ΕΔ
  19. ਪનδϣϒσʔλϑϩʔਤ લ൒  ඞཁʹԠͯ͡ϨγϐͷઃఆͰ ֎෦σʔλΛऔಘɺՃ޻Ͱ͖Δ

  20. ਪનδϣϒσʔλϑϩʔਤ લ൒  { "id": "foo", "name": "nameA", "description": "xxx"

    }, ... { "id": "foo" }, { "id": "bar" }, { "id": "hoge" }, ... ["foo", "bar", "hoge",...] 例)
  21. ਪનδϣϒσʔλϑϩʔਤ લ൒  ˔ ਪન݁ՌٴͼϞσϧΛੜ੒ ˓ ΞϧΰϦζϜ͸ 4QBSL.-MJCΛόονϑϨʔϜϫʔΫʹ߹Θͤͯ࢖͍΍͘͢͠ ͨ΋ͷ΍ɺಠ࣮ࣗ૷ͨ͠΋ͷ΋͋Δ ˓

    ΞϧΰϦζϜ ੾ସՄ ˙ .BUSJY'BDUPSJ[BUJPO ޙड़ ˙ 8PSE7FD ˙ *UFNUP*UFN$PMMBCPSBUJWF'JMUFSJOH ˙ ʜ ˔ ඞཁʹԠֶͯ͡शࡁͷϞσϧΛ औಘɾར༻Ͱ͖Δ
  22. ਪનδϣϒσʔλϑϩʔਤ શମ૾

  23. ਪનδϣϒσʔλϑϩʔਤ ޙ൒ 

  24. ਪનδϣϒσʔλϑϩʔਤ ޙ൒  ˔ αʔϏεґଘͷޙॲཧΛద༻ ˓ ਪન݁Ռͷ֤ΞΠςϜʹର͢Δଐੑ৘ใͷ௥ՃͳͲ

  25. ਪનδϣϒσʔλϑϩʔਤ ޙ൒  ˔ ਪન݁Ռͷॻ͖ग़͠ ˓ σʔλετΞ ੾ସՄ ˙ )#BTF

    ˙ )%'4 ˙ ϩʔΧϧ %SJWFSɺσόοά༻ ˙ 4 ˙ #JH2VFSZ ˙ ʜ
  26. ਪનδϣϒσʔλϑϩʔਤ ޙ൒  ˔ ϞσϧσʔλΛඞཁͳσʔλετΞʹॻ͖ग़͢͜ͱ͕Ͱ͖Δ ˓ ϑΝΠϧͱͯ͠ॻ͖ग़͠΍ɺΞΠςϜ͝ͱʹ ,74΁ͷॻ͖ग़͠΋Ͱ͖Δ

  27. ਪનδϣϒσʔλϑϩʔਤ ޙ൒  ˔ Ϟσϧɺٴͼਪન݁Ռͷόʔδϣϯͷߋ৽ ˓ ;PP,FFQFS্Ͱόʔδϣϯ৘ใΛ؅ཧ͓ͯ͠Γɺ όʔδϣϯ͕ߋ৽͞Ε࣍ୈɺ࠷৽ͷόʔδϣϯ৘ใ͕ "1*ʹ௨஌͞ΕΔ

  28. ϝσΟΞαʔϏεͱ ਪનج൫ͷόονϑϨʔϜϫʔΫ ਪનδϣϒʹ͍ͭͯ .BUSJY'BDUPSJ[BUJPO Ϩγϐ 5JQT ·ͱΊͱࠓޙͷల๬

  29. .BUSJY'BDUPSJ[BUJPO  ˔ ϢʔβɾΞΠςϜͷධՁ஋ߦྻΛߦྻ෼ղ͢Δख๏ ˓ ϢʔβɺΞΠςϜͷີϕΫτϧΛಘΔ ˓ ͋ΔϢʔβʹରͯ͠ɺϕΫτϧͷ ಺ੵͷ஋͕େ͖͍ ॱʹΞΠςϜΛਪન

    ˓ ͋ΔΞΠςϜʹରͯ͠ɺϕΫτϧͷ ίαΠϯྨࣅ౓ͷ஋͕େ͖͍ ॱʹ ؔ࿈ΞΠςϜͱͯ͠ਪન ˔ ಋೖ͕͠΍͘͢ɺଟ͘ͷϝσΟΞαʔϏεͰར༻͍ͯ͠Δ
  30. .BUSJY'BDUPSJ[BUJPO  ˔ ҉໧తධՁ Ӿཡཤྺ΍ߪೖཤྺ Λར༻͢Δ৔߹ɺ Ӿཡɺ͓ؾʹೖΓɺߪೖͷΑ͏ʹΞΫγϣϯ͝ͱʹ ධՁ஋ΛώϡʔϦεςΟοΫʹܾΊͯ૊Έ߹ΘͤΔ͜ͱ͕͋Δ ˔ ΦϑϥΠϯͷਫ਼౓ධՁ΍"#ςετͰͷΦϯϥΠϯͷਫ਼౓ධՁΛ௨ͯ͠

    ྑ͍ͱࢥΘΕΔ૊Έ߹ΘͤΛܾఆ
  31. .BUSJY'BDUPSJ[BUJPO  ˔ 4QBSL.--JCͷ "-4.PEFMͰ͸ҎԼͷϝιου͕ఏڙ͞Ε͍ͯΔ ˓ SFDPNNFOE'PS"MM6TFST WҎ߱ ˙ ֤Ϣʔβʹ

    ࢦఆͨ݅͠਺ͷΞΠςϜΛਪન͢Δ ˓ SFDPNNFOE'PS6TFS4VCTFU WҎ߱ ˙ ࢦఆͨ͠Ϣʔβ܈ʹରͯ͠ɺࢦఆͨ݅͠਺ͷΞΠςϜΛਪન͢Δ ͕ɺ͍ͣΕ΋ϑΟϧλΛೖΕΔػೳ͕ͳ͍ͨΊɺࣅͨΑ͏ͳॲཧΛ "-4.PEFMͷ֎ଆͰ࣮૷͠ɺͦͷ෦෼ͰϑΟϧλΛద༻͍ͯ͠Δ
  32. ϝσΟΞαʔϏεͱ ਪનج൫ͷόονϑϨʔϜϫʔΫ ਪનδϣϒʹ͍ͭͯ .BUSJY'BDUPSJ[BUJPO Ϩγϐ 5JQT ·ͱΊͱࠓޙͷల๬

  33. Ϩγϐʹ͍ͭͯྫ

  34. Ϩγϐʹ͍֦ͭͯுػೳ  ˔ Πϯϙʔτػೳ ˓ @JODMVEF ͷΩʔʹରͯ͠ɺ:".-ϑΝΠϧͷύεΛࢦఆ͢Δ ͜ͱͰɺͦͷϑΝΠϧͷઃఆ৘ใΛಡΈࠐΉ͜ͱ͕Ͱ͖Δ

  35. Ϩγϐʹ͍֦ͭͯுػೳ  _include: - config/product/recipe/template.yml … launch: id: yarn properties:

    <<: *spark_yarn_prop_template SFDPNNFOE@TBNQMFZNM launch: id: yarn properties: spark.executor.memory: 10g spark.executor.instances: 10 … _yarn: _template: _properties: &spark_yarn_prop_template spark.executor.memory: 10g spark.executor.instances: 10 … UFNQMBUFZNM
  36. 'SFF.BSLFSʹΑΔςϯϓϨʔτॲཧ  ˔ ਪનόονϑϨʔϜϫʔΫͰ͸ 'SFF.BSLFSͷ ςϯϓϨʔτΤϯδϯΛར༻͓ͯ͠Γɺ42-ϑΝΠϧ΍ Ϩγϐʹॻ͔Εͨม਺ɺΧελϜϝιουʹରͯ͠ ஋Λ୅ೖ͢Δ͜ͱ͕Ͱ͖Δ

  37. SELECT * FROM db WHERE dt = '${dtf('-1d', 'yyyy-MM-dd')}' AND

    service_id = '${.data_model["service.id.ameblo"]}' SELECT * FROM db WHERE dt = '2019-06-27' AND service_id = 'foo' 'SFF.BSLFSʹΑΔςϯϓϨʔτॲཧ  MPBE@TBNQMF@EBUBTRM
  38. 5JQT5PQ.݅ͷਪનΞΠςϜͷநग़ ˔ ๲େͳ/݅ͷΞΠςϜ഑ྻ͔ΒείΞͷߴ͍5PQ.݅ͷ ΞΠςϜΛநग़͢Δॲཧ ˓ ./ ˓ ԼҐͷΞΠςϜ͸ݫີʹιʔτ͢Δඞཁ͸ͳ͍ ˔ )FBQ4PSUΛ࢖͏͜ͱͰɺܭࢉྔΛ

    0 / ʹۙࣅͰ͖Δ ˓ +BWBͷඪ४ιʔτ͸ 5JN4PSU
  39. 5JQT%BUBTFUUP-PDBM*UFSBUPS ʹ͍ͭͯ ˔ %BUBTFUUP-PDBM*UFSBUPS Λ࢖͏ͱɺ ࠷ޙʹ TIVGGMF͕ೖͬͨ͋ͱ͔Β௚ྻͰॲཧ͞ΕΔ ͨΊɺ ௚લʹ໌ࣔతʹ SFQBSUJUJPOͳͲͷ

    TIVGGMFॲཧΛೖΕΔ ඞཁ͕͋Δ
  40. 5JQT,SZPͱ GBTUVUJMͷ 0QFO)BTI.BQʹ͍ͭͯ ˔ αΠζͷඇৗʹେ͖͍ 0QFO)BTI.BQΛ ,SZPͰσγϦΞϥΠζ͢Δͱඇৗʹ஗͘ͳΔ໰୊͕͋Δ ˓ ϋογϡςʔϒϧͷিಥ͕සൃ͢ΔͨΊ ˓

    ࣮૷ͷ໰୊ͱ͍͏ΑΓ͸͓ޓ͍ͷ࢓༷ͷ૬ੑͷ໰୊ ˓ ؆୯ͳରࡦͱͯ͠͸ඪ४ͷ)BTI.BQ΍ GBTUVUJMͷ -JOLFE0QFO)BTI.BQΛ࢖͏ͳͲɾɾ
  41. ϝσΟΞαʔϏεͱ ਪનج൫ͷόονϑϨʔϜϫʔΫ ਪનδϣϒʹ͍ͭͯ .BUSJY'BDUPSJ[BUJPO Ϩγϐ 5JQT ·ͱΊͱࠓޙͷల๬

  42. ·ͱΊͱࠓޙͷల๬ ˔ 4QBSLΛ׆༻ͨ͠ਪનج൫ͷόονϑϨʔϜϫʔΫʹ͍ͭ ͯɺਪનδϣϒͷσʔλϑϩʔਤͳͲΛ;·͑ͯ঺հͨ͠ ˔ ࠓޙͷల๬ ˓ ΦϑϥΠϯਫ਼౓ධՁɺٴͼਫ਼౓ʹؔ͢Δ֤छϝτϦΫεͷ ϨϙʔςΟϯάपΓࣗಈԽ ˓

    ਂ૚ֶशͷಋೖ ˙ 5FOTPS'MPX0O4QBSL ˙ %FFQMFBSOJOHK0O4QBSLͳͲ͋Δ͕ɾɾ
  43. ͝ਗ਼ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠

  44. ਪનͷछྨ छྨ આ໌ ར༻Օॴɺ༻్ Ϣʔβ UPΞΠςϜ Ϣʔβʹରͯ͠ڵຯͷ͋Γͦ͏ͳ ΞΠςϜΛਪન͢Δ ϚΠϖʔδͳͲ ΞΠςϜ

    UPΞΠςϜ ͋ΔΞΠςϜʹରͯؔ͠࿈ͷ͋Δ ΞΠςϜΛਪન͢Δ ΞΠςϜৄࡉϖʔδͳͲ ϥϯΩϯά ԿΒ͔ͷࢦඪʹج͍ͮͯ ΞΠςϜΛϥϯΩϯάԽ͢Δ ϥϯΩϯάϖʔδ ਪન݁Ռ͕ͳ͍ͱ͖ͷ ϑΥʔϧόοΫ༻ͳͲ
  45. छྨ આ໌ 'FUDI σʔλΛऔಘ͠·͢ 'JMUFS σʔλΛϑΟϧλ͠·͢ 5SBOTGPSN σʔλΛม׵͠·͢ $PMMFDU σʔλΛऩू͠·͢

    6QMPBE σʔλΛॻ͖ग़͠·͢ -BVODI 4QBSL4FTTJPOΛ࡞੒͠·͢ 3FBE 4QBSL%BUBTFUΛ࡞੒͠·͢ 4FSWJDF1SPDFTTJOH αʔϏεґଘͷલॲཧ ޙॲཧΛద༻͠·͢ 3FDPNNFOE Ϟσϧٴͼਪન݁ՌΛ࡞੒͠·͢ 8SJUF ਪન݁ՌΛॻ͖ग़͠·͢ λεΫͷछྨ