リブセンスのデータ分析基盤とAirflow

E60aa4f80303f3f386898546ddb3686a?s=47 Livesense Inc.
February 13, 2019

 リブセンスのデータ分析基盤とAirflow

2019/2/13
Data Pipeline Casual Talk
https://dpct.connpass.com/event/114040/

E60aa4f80303f3f386898546ddb3686a?s=128

Livesense Inc.

February 13, 2019
Tweet

Transcript

  1. ςΫϊϩδΧϧϚʔέςΟϯά෦σʔλϓϥοτϑΥʔϜάϧʔϓ Copyright © LIVESENSE Inc. ٢෢ਖ਼࢙ Ϧϒηϯεͷσʔλ෼ੳج൫ͱ "JSGMPX %BUB1JQFMJOF$BTVBM5BML

  2. w ೥ೖࣾ w σʔλ෼ੳج൫ʮ-JWFTFOTF"OBMZUJDTʯͷ ։ൃɺӡ༻Λ΍ͬͯ·͢ w झຯ+Ϧʔά؍ઓ ٢෢ਖ਼࢙ !UBLF@N 

    גࣜձࣾϦϒηϯεςΫϊϩδΧϧϚʔέςΟϯά෦ σʔλϓϥοτϑΥʔϜάϧʔϓ ࣗݾ঺հ
  3. w Ϧϒηϯεͷσʔλ෼ੳج൫ʹ͍ͭͯ w "QBDIF"JSGMPXͱ͸ w ϦϒηϯεͰͷ"JSGMPX׆༻ํ๏ "HFOEB

  4. w ϦϒηϯεͰ͸σʔλऩूσʔλ෼ੳػցֶशͷج൫։ൃΛ ઐ໳ʹ୲౰͢Δ෦ॺ͕ଘࡏ w ෳ਺ͷϝσΟΞΛࢧԉ͢ΔܗͰԣஅ૊৫ͱͯ͠ฤ੒ w σʔλ෼ੳج൫ͷ-JWFTFOTF"OBMZUJDTͱػցֶशج൫ͷ -JWFTFOTF#SBJOΛఏڙ Ϧϒηϯεͷσʔλ෼ੳ

  5. w -JWFTFOTF"OBMZUJDT w Ϧϒηϯεͷσʔλ෼ੳج൫ w "84্ʹߏங w ֤ϝσΟΞͷϩάσʔλͳͲΛऩूɺՃ޻͠3FETIJGU্ʹσʔλΛू໿ w ,1*νΣοΫͷμογϡϘʔυΛ࡞੒ͨ͠ΓΞυϗοΫ෼ੳͷͨΊͷΫ

    ΤϦΛ࣮ߦ w ػցֶशج൫΍ΞτϦϏϡʔγϣϯ෼ੳͷσʔλιʔε w ࣾһ͸୭Ͱ΋42-Λୟ͍ͯ෼ੳͰ͖Δ w -JWFTFOTF#SBJO w Ϧϒηϯεͷػցֶशج൫ w ($1্ʹߏங w -JWFTFOTF"OBMZUJDTͷσʔλΛݩʹɺϞσϧΛੜ੒ w Ϩίϝϯυ΍"#ςετɺଟ࿹όϯσΟοτͳͲϝσΟΞڞ௨Ͱར༻Ͱ͖ ΔػցֶशγεςϜ -JWFTFOTF"OBMZUJDTͱ-JWFTFOTF#SBJO
  6. w ج൫γεςϜͷઃܭɺ࣮૷ɺӡ༻Λߦ͏σʔλΤϯδχΞ w ػցֶशγεςϜͷઃܭɺ࣮૷΍ػցֶशΞϧΰϦζϜͷ࣮૷Λ ߦ͏ɺػցֶशΤϯδχΞ w σʔλूܭ΍෼ੳΛߦ͍ɺ֤ϝσΟΞͷ໰୊ղܾΛਐΊ͍ͯ͘ σʔλΞφϦετ ͱ͸͍͑ɺ͖ͬͪΓͱઢҾ͖͍ͯ͠ΔΘ͚Ͱ͸ͳ͘ʜ w

    σʔλΤϯδχΞ΍ػցֶशΤϯδχΞ΋ूܭ΍෼ੳ΋͢Δ͠ w σʔλΞφϦετ΋ϩδοΫͷ࣮૷΋͢Δ -JWFTFOTF"OBMZUJDTͱ-JWFTFOTF#SBJOʹΑͬͯɺ ࣮૷ɺ෼ੳɺӡ༻ʹ֞ࠜΛ࡞Βͳ͍ɺγʔϜϨεͳ׆༻ ͕࣮ݱͰ͖͍ͯΔ ϝϯόʔߏ੒
  7. ϦϒηϯεͷσʔλͷྲྀΕ

  8. -JWFTFOTF"OBMZUJDTʹ͍ͭͯ 3 F E T I J G U E

    D    Y M B S H F  º   ς ʔϒϧ ਺    Ϩί ʔ υ ਺    ԯ Ϩί ʔ υ ར ༻ ༰ ྔ  5 # ΞΫ ςΟ ϒϢʔ β    ໊ ΞυϗοΫɾΫΤϦ EBZ # *    δϣϒ ɾ Ϋ Τ Ϧ        E B Z Ϧ Ϧ ʔε     ೥   ݄
  9. -JWFTFOTF"OBMZUJDTͷΞʔΩςΫνϟ

  10. -JWFTFOTF"OBMZUJDTͷΞʔΩςΫνϟ ࠓ೔͸͜ͷ࿩Λ͠·͢

  11. w ϫʔΫϑϩʔΛεέδϡʔϦϯάɺϞχλϦϯά͢ΔͨΊͷ πʔϧ w ݩʑ͸"JSCOC͕ࣾ։ൃ͠ɺ"QBDIF4PGUXBSF'PVOEBUJPO ͷΠϯΩϡϕʔγϣϯϓϩάϥϜʹՃೖɻ w τοϓϨϕϧϓϩδΣΫτʹ w 1ZUIPOͰ࣮૷͞Ε͍ͯΔ

    w ($1$MPVE$PNQPTFSͱͯ͠"JSGMPXͷϚωʔδ υαʔϏε։࢝ "QBDIF"JSGMPXͱ͸
  12. w ݩʑɺόονॲཧΛ3VCZͷSBLFͰॻ͍͍ͯͨ ࠓ΋  w ౰࣌ͷεέδϡʔϧ؅ཧ͸DSPO w XIFOFWFSͱ͍͏HFNΛ࢖ͬͯɺλεΫεέδϡʔϧͷ όʔδϣϯ؅ཧ͸͍ͯͨ͠ w

    ͚ͲݟͮΒ͍ͷͰTQSFBETIFFUͰ࣮ߦ࣌ؒͷ؅ཧΛͯ͠ ͍ͨ w ͔͠͠ஈʑλεΫɺόονͷྔ͕૿͖͑ͯͯʜ w ґଘؔ܎΋ෳࡶʹͳ͖ͬͯͯʜ w ఘΊͯɺδϣϒϚωδϝϯτπʔϧͷಋೖΛܾΊͨ   "JSGMPXΛಋೖͨ͠ܦҢ
  13. w δϣϒͷεέδϡʔϦϯά w DSPOܗࣜͰࢦఆՄೳ w λεΫͷґଘؔ܎ΛίʔυͰهड़ w 1ZUIPOͰ%"(΍λεΫΛهड़ w %"(༗ޮඇ८ճάϥϑɻ͜͜Ͱ͸λεΫؒͷ࣮ߦॱ

    ΍ґଘؔ܎Λࣔ͢άϥϑ w 8FC6*ʹΑΔλεΫ΍ϨϙʔτͷϏδϡΞϥΠζ "JSGMPXͰͰ͖Δ͜ͱ
  14. w 1ZUIPOͷίʔυͰهड़ w 0QFSBUPSͰλεΫΛͭͣͭهड़ w CBTIίϚϯυΛ࣮ߦ͢Δ#BTI0QFSBUPSͷྫ λεΫͷهड़ # DAG dag

    = DAG(‘test_dag’, start_date=datetime(2019, 2, 13) # bashίϚϯυλεΫͷྫ test_task = BashOperator( task_id='test_task', bash_command='ls -al’, dag=dag)
  15. w λεΫؒͷґଘؔ܎ΛϏοτγϑτԋࢉࢠΛ࢖ͬͯهड़ λεΫؒͷґଘؔ܎ # DAG dag = DAG(‘test_dag’, start_date=datetime(2019, 2,

    13) # bashίϚϯυλεΫͷྫ task_ls = BashOperator( task_id='task_ls', bash_command='ls -al', dag=dag) task_echo = BashOperator( task_id='task_echo', bash_command='echo "hoge"', dag=dag) task_date = BashOperator( task_id='task_date', bash_command='date "+%F %T"', dag=dag) # λεΫؒͷґଘؔ܎ΛϏοτԋࢉࢠͰهड़ task_ls >> task_echo task_ls >> task_date
  16. %"(5SFF7JFX w %"(ͷλεΫ͝ͱͷεςʔλεҰཡ w ͲͷλεΫ͕ɺ͍ͭͲͷΑ͏ͳεςʔλε͔ͩͬͨҰ໨ྎવ w ࣦഊͨ͠λεΫͷ࠶࣮ߦ΋Մೳ

  17. %"(5BTL%VSBUJPO w %"(ͷλεΫ͝ͱͷ࣮ߦ࣌ؒͷਪҠάϥϑ

  18. %"((BOUU w ࣮ߦ͞Εͨ%"(ͷΨϯτνϟʔτ w 5BTL%VSBUJPOͱ͋ΘͤͯϘτϧωοΫ͕ࢹ֮Խ

  19. Ϧϒηϯεͷ"JSGMPXӡ༻ߏ੒

  20. w 3FETIJGUʹର͢ΔఆظతͳΫΤϦ࣮ߦ w EBJMZͷूܭ࡞ۀͱ͔ w αϚϦςʔϒϧͷੜ੒ͱ͔ w &.3ͷىಈτϦΨ w &.3࣮ߦલͷલॲཧɺޙॲཧΛهड़

    w લॲཧऴྃޙɺ&.3ىಈɺTUFQ௥Ճɺॲཧऴྃ଴ͪɺΫϥε λఀࢭɺޙॲཧͷྲྀΕΛ%"(Ͱهड़ w 3FETIJGUͷΫΤϦͰॻ͘͜ͱ͕ࠔ೉ͳෳࡶͳॲཧΛ&.3Ͱॲ ཧ w (MVFىಈτϦΨ w 3FETIJGU4QFDUSVN༻ʹ1BSRVFUม׵͢Δॲཧ w &.3ಉ༷ɺ(MVF࣮ߦલͷલॲཧɺޙॲཧΛهड़ ͲͷΑ͏ʹ"JSGMPXΛ׆༻͍ͯ͠Δ͔
  21. w ϩδοΫͱ%"(ͷ؅ཧΛ෼͚͍ͯΔ w ͦͷͨΊɺϩδοΫͷςετΛ෼཭࣮ͯ͠ߦͰ͖ΔͨΊɺ ൺֱతճ͠΍͘͢ͳ͍ͬͯΔ w TUBHJOH؀ڥͰΫΤϦͷಈ࡞ςετ w ࣮σʔλΛ࢖ͬͨςετ΍ॏ͍ॲཧͷςετΛ͢Δ৔߹ ͸ɺ3FETIJGUͷεφοϓγϣοτ͔ΒҰ࣌తʹผΫϥε

    λΛཱ࣮ͯͯߦ͢Δ͜ͱ΋͋Δ w Ұํ%"(ͷςετ͸͋·Γ͖ͬͪΓग़དྷ͍ͯͳ͍ʜ w ։ൃ؀ڥ΍TUBHJOHͰ%"(͕ਖ਼ৗʹಈ࡞͍ͯ͠Δ͜ͱΛ ֬ೝ͢Δ͙Β͍ ςετʹ͍ͭͯ
  22. w Τϥʔൃੜ࣌ w ϩδοΫଆΤϥʔൃੜ࣌͸4FOUSZͰΞϥʔτ௨஌ w Πϯϑϥ؂ࢹ͸.BDLFSFM EBUBEPH $MPVE8BUDIΛซ༻ w ҟৗσʔλݕ஌͸SFEBTIͷΞϥʔτػೳ

    w Ξϥʔτ௨஌ઌ͸4MBDLʹू໿ w CPUΛ࢖ͬͯɺSFEBTIͷάϥϑͷεΫϦʔϯγϣοτΛ ग़ྗͰ͖ΔΑ͏ʹͳͬͯΔ ϞχλϦϯά
  23. TMBDLͰSFEBTIͷάϥϑදࣔ

  24. w λεΫͷεέδϡʔϧ΍ґଘؔ܎͕੔ཧͰ͖ͨ w (6*ͰҰ໨ྎવ w ίʔυϕʔεͰ%"(؅ཧ͕Ͱ͖ΔΑ͏ʹͳͬͨ w ࣮ߦ݁Ռɺ࣮ߦ࣌ؒ΋؅ཧͰ͖ΔΑ͏ʹͳͬͨ w DSPOͩͱදݱ͖͠Εͳ͍ෳࡶͳґଘؔ܎΋؅ཧͰ͖ΔΑ͏ʹͳͬͨ

    w λεΫಉ࣮࣌ߦ਺ͷ੍ޚ΋Ͱ͖ΔͷͰɺ3FETIJGUͷෛՙΛߟྀͨ͠ӡ ༻͕Ͱ͖ΔΑ͏ʹͳͬͨ w ࣮ߦ݁Ռͷϩάͷ؅ཧָ͕ʹͳͬͨ w ࠓ·Ͱ͸όοναʔόʹೖͬͯɺ௚઀ϩάϑΝΠϧΛݟΔ͔͠ͳ͔ͬͨ w (6*্Ͱ֬ೝͰ͖ɺো֐ͷݪҼͷௐࠪ΋ָʹͳͬͨ w 8PSLFS͕εέʔϧͰ͖ΔΑ͏ʹͳͬͨ w ͕ɺࠓͷͱ͜Ζؒʹ߹͍ͬͯΔͷͰɺ·ͩͯ͠ͳ͍ "JSGMPXΛಋೖͯ͠Α͔ͬͨ͜ͱ
  25. w όʔδϣϯΞοϓ͕݁ߏ໘౗ w ୯७ʹஔ͖׵͑Ε͹ಈ͘ɺͱ͸͍͔ͳ͍ w ઃఆϑΝΠϧͷ࢓༷͕มΘͬͨΓɺ%#ͷΞοϓσʔτ͕ඞཁͩͬͨΓɺ 0QFSBUPSͷ࢓༷͕มΘͬͨΓʜ w &YFDVUJPO%BUFͱ࣮ࡍͷ࣮ߦ͕࣌ؒͣΕͯΔ w

    &YFDVUJPO%BUF͕ͳͷʹɺ࣮ࡍʹ͸ʹ࣮ߦ ͞ΕͯͨΓ w ଟ෼λΠϜκʔϯॲཧʹ໰୊͕͋ΔΜ͡Όͳ͍͔ͱਪଌ w ͰλΠϜκʔϯ໰୊ղܾͨ͠  w δϣϒͷεέδϡʔϧ؅ཧ͕͢΂ͯղܾͨ͠Θ͚Ͱ͸ͳ͍ w ॏ͍ΫΤϦ͕࣮ߦ͞Ε͕͔͔࣌ؒΔͱɺผͷ%"(ͷ࣮ߦ࣌ؒͱඃΓɺ 3FETIJGUʹෛՙ͕͔͔ΓɺλΠϜΞ΢τ 3FETIJGUͷઃఆ ʹͳͬͯ͠ ·͏͜ͱ΋͋Δ "JSGMPXӡ༻Ͱۤ࿑ͨ͜͠ͱ
  26. w ϦϒηϯεͷσʔλύΠϓϥΠϯͱσʔλ෼ੳج൫ʹ͍ͭͯ ঺հ͠·ͨ͠ w σʔλ෼ੳج൫Ͱ"JSGMPXΛ͔ͭͬͯσʔλϫʔΫϑϩʔΛ ؅ཧ͍ͯ͠·͢ w "JSGMPXΛ࢖͏ͱεέδϡʔϧ΍λεΫͷґଘؔ܎Λ؆୯ʹ ؅ཧ͢Δ͜ͱ͕ग़དྷ·͢ ·ͱΊ

  27. w ϦϒηϯεςΫϊϩδΧϧϚʔέςΟϯά෦ͷ೔ʑͷ׆ಈͰ֫ಘ ͨ͠৘ใΛެ։͍ͯ͠·͢ w IUUQBOBMZUJDTMJWFTFOTFDPKQ w "JSGMPXʹ͍ͭͯ΋هࣄΛެ։͍ͯΔͷͰɺซͤͯ͝ࢀর͍ͩ͘͞ w IUUQBOBMZUJDTMJWFTFOTFDPKQFOUSZ 13-JWFTFOTF%BUB"OBMZUJDT#MPH

  28. ͋ͨΓ·͑Λɺൃ໌͠Α͏ɻ

  29. ͝ਗ਼ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠ɻ