OSC-Hokkaido-2018-hayabusa

A83655d3e1a5121d672904aaa1805cb2?s=47 Hiroshi
July 07, 2018

 OSC-Hokkaido-2018-hayabusa

This is the presentation material for OSC Hokkaido 2018

A83655d3e1a5121d672904aaa1805cb2?s=128

Hiroshi

July 07, 2018
Tweet

Transcript

  1. Hayabusa
 ߴ଎ʹશจݕࡧՄೳͳ OSSϩάݕࡧΤϯδϯͷ͝঺հ Ѩ෦ തɿגࣜձࣾϨϐμϜ ݚڀһ OSC 2018 Hokkaido 2018/07/08

  2. ࣗݾ঺հ • ໊લɿѨ෦ ത • ॴଐɿגࣜձࣾϨϐμϜʢݚڀһʣɺίίϯגࣜձࣾʢࣾ௕ิࠤ/ٕज़ݚڀ ॴ ݚڀһʣɺ৘ใ௨৴ݚڀػߏʢڠྗݚڀһʣɺ๺཮ઌ୺Պֶٕज़େֶ Ӄେֶʢത࢜ޙظ՝ఔʣ •

    ͦͷଞɿInterop Tokyo ShowNet NOCϝϯόʔ
  3. ໨࣍ • എܠͱ໨త • Hayabusaʹ͍ͭͯ • ෼ࢄHayabusaͷఏҊʢઃܭͱ࣮૷ʣ • ධՁ •

    ߟ࡯ • ·ͱΊͱࠓޙͷ՝୊ !3
  4. എܠͱ໨త !4

  5. Interop Tokyo ShowNet 2018 • 900Λ௒͑Δ෺ཧɾԾ૝ػث܈ • ΄΅શͯͷػث͕syslogΛૹ৴ • ߏஙظؒʹड৴͢Δsyslogྔ

    • ໿2ສ݅/ඵʢ20k/secʣ • ໿1ԯ̓ઍສ݅/೔ !5
  6. ShowNetʹ͓͚Δϩάͷӡ༻ • େྔͷϩάΛ஝ੵ͢Δ • େྔͷϩά͔Βݕࡧ͢Δ • ΠϯγσϯτରԠͷͨΊʹϩάΛݕࡧ͢Δ • τϥϒϧγϡʔτͷͨΊʹϩάΛݕࡧ͢Δ •

    ϩά͔Β౷ܭ৘ใΛऔಘ͢Δ • ߜΓࠐΜͩݕࡧ৘ใΛ౷ܭ৘ใͱͯ͠දࣔ͢Δ !6
  7. طଘͷղܾࡦ • HadoopΤίγεςϜʢSpark, Impala, Hive, …ʣ • OSSʢElasticsearch + Kibana,

    fluentd, …ʣ • ঎༻ϓϩμΫτʢSplunk, VMware Loginsight, …ʣ • Ϋϥ΢υαʔϏεʢGoogle BigQuery, Treasure Data, …ʣ !7
  8. େ͖ͳ໰୊ • ϩάͷߏ଄Խ͕Ͱ͖ͳ͍ • ػࡐʹ౷Ұੑ͕ͳ͍ɾ࠷৽ͷϑΝʔϜ͗ͯ͢৘ใ͕ͳ͍ • ετϦʔϛϯάॲཧ͕೉͍͠ྲྀྔ • ϩάͷྲྀྔ͕ଟ͗ͯ͢ॲཧ͕௥͍͔ͭͳ͍ •

    όονॲཧ͕௥͍͔ͭͳ͍ • όονॲཧ͕ࢦఆ࣌ؒ಺ʹऴΘΒͳ͍ • ෼ࢄॲཧγεςϜ͕ෳࡶ͗͢Δ • ؅ཧίετ͕ലେ !8
  9. ໨త • ܰྔʹߏஙɾӡ༻͕ߦ͑ΔγεςϜͷ࣮ݱ • γϯϓϧͰεέʔϧΞοϓՄೳͳγεςϜͷ࣮ݱ • ݕࡧੑೳ͕CPUʢίΞ਺ʣੑೳʹൺྫͯ͠ૣ͘ͳΔ • ෳࡶͳ؅ཧػߏΛඋ͑ͳ͍ !9

  10. )BZBCVTBʹ͍ͭͯ !10

  11. Hayabusaͱ͸ʁ • େྔͷϩάΛߴ଎ʹݕࡧ͢Δʢ17ԯϨίʔυͷશจݕࡧ͕5ඵʣ • ελϯυΞϩϯαʔόͰಈ࡞͢Δ • ϚϧνίΞΛ༗ޮʹ࢖͍ɺߴ଎ͳฒྻݕࡧॲཧΛ࣮ݱ͢Δ

  12. StoreEngine • σΟεΫʹॻ͖ࠐ·ΕͨϩάΛߴ଎ʹಡΈࠐΉ • ಡΈࠐΜͩϩάΛSQLite3ͷϑΝΠϧ΁ͱม׵ʢ1ߦ1Ϩίʔυʣ • SQLite3ͷશจݕࡧʹಛԽͨ͠FTS(Full Text Search)ܗࣜͰinsert •

    ࣌ؒ͸σΟϨΫτϦߏ଄ʹରԠ : /targetdir/yyyy/mm/dd/hh/min.db StoreEngine
  13. SearchEngine • GNU ParallelΛ༻͍ͯSQLite3ϑΝΠϧ΁ฒྻݕࡧΛ͔͚Δ $ parallel sqlite3 ::: target files

    ::: “select count(*) from xxx where logs match ‘keyword’;” • ݕࡧ݁ՌΛUNIXύΠϓϥΠϯΛ༻͍ͯɺawk΍countίϚϯυͰूܭ $ parallel sqlite3 ::: target files ::: “select count(*) from xxx where logs match ‘keyword’;” | awk ‘{m+=$1} END{print m;}’ SeachEngine !13
  14. શจݕࡧੑೳ • Apache SparkͱͷൺֱʢελϯυΞϩϯ؀ڥʣ • Apache SparkͱͷൺֱʢSpark x 3୆ +

    HDFS vs Hayabusa x 1୆ʣ Hayabusa͕ ̐ഒߴ଎ Hayabusa͕ 27ഒߴ଎
  15. OSSͱͯ͠ެ։ • GitHubʹͯެ։ • https://github.com/hirolovesbeer/hayabusa !15

  16. Hayabusaͷ໰୊఺ • ελϯυΞϩϯ؀ڥ • ੑೳΛ্͛Δʹ͸εέʔϧΞοϓ͔͠ͳ͍ • εέʔϧΞοϓίετ • ෼ࢄॲཧγεςϜͱͷࠩ •

    ن໛͕େ͖͘ͳΕ͹෼ࢄॲཧγεςϜͷॲཧ଎౓͸଎͘ͳΔ • Hayabusa͸͍͔ͭੑೳ͕ൈ͔ΕΔ !16
  17. ෼ࢄ)BZBCVTBͷఏҊʢઃܭͱ࣮૷ʣ !17

  18. ໨త • HayabusaΛ෼ࢄॲཧγεςϜ΁ͱਐԽͤ͞ॲཧΛεέʔϧΞ΢τͤ͞Δ • ελϯυΞϩϯͷੑೳ͸ੜ͔͠ଓ͚Δ • ෼ࢄॲཧγεςϜͰ͸͋Δ͕γϯϓϧͳઃܭΛࢤ͢ • σʔλΛෳ੡͢Δ͜ͱͰ଱ো֐ੑΛߴΊΔ !18

  19. GNU ParallelͷϦϞʔτ࣮ߦ • ཧ૝ : GNU ParallelͷϦϞʔτ࣮ߦΛར༻͢Ε͹෼ࢄ࣮ߦ͸Մೳ $ time parallel

    —controlmaster -S host1,host2,host3 sqlite3 ::: … • ݱ࣮ : sshͷΦʔόϔου͕͔͔Γॲཧ͕஗Ԇ ϗετ͕૿͑Δͱॲཧ͕࣌ؒ૿͑Δ
  20. ఏҊख๏ • ෼ࢄݕࡧ • ࣮ߦ͢ΔݕࡧॲཧΛRPCͱͯ͠Hayabusa΁ૹΓࠐΉ • ݁ՌΛRPCͷϨεϙϯεͱͯ͠ड͚औΓूܭ͢Δ • ฒྻ஝ੵ •

    શͯͷϗετ΁ಉҰͷϦΫΤετ͕ಧ͍ͯ΋ಉ݁͡ՌΛฦ͢Α͏ʹ͢Δ • ࣄલʹશॲཧϗετ΁ͱϩάσʔλΛෳ੡͢Δ !20
  21. ෼ࢄHayabusaΞʔΩςΫνϟશ༰

  22. ฒྻ஝ੵ • syslogΛෳ਺ϗετ΁ͱෳ੡͢Δ • શϗετͰಉҰͷsyslogΛड৴ • UDP SamplicatorʢOSSʣͷར༻ • syslogύέοτͷෳ੡ͱసૹ

    • ෳ੡ॲཧͷίΞεέʔϧԽ • UDP SmaplicatorͷϚϧνϓϩηεԽ !22 syslogͷෳ੡
  23. UDP SamplicatorͷϚϧνϓϩηεԽ • ϘτϧωοΫʹͳΓ͕ͪͳϓϩηεΛίΞεέʔϧ • SO_REUSEPORTΛར༻ͨ͠ϚϧνϓϩηεԽ • ͜ΕʹΑΓUDP 514ϙʔτ͕ෳ਺ϓϩηεͰγΣΞ͞ΕΔ socketΦϓγϣϯͷ௥Ճ

    ۉ౳ʹsyslogసૹͷෛՙ͕ όϥϯε͞ΕΔ !23
  24. ෼ࢄݕࡧ • RPC • Producer / ConsumerϞσϧͷ࠾༻ • ࣮૷ •

    ZeroMQͷPush / Pullύλʔϯ • ϦΫΤετͷϩʔυόϥϯε • Push / Pullύλʔϯ͸ۉҰʹϦΫΤετΛϗετ΁෼഑͢Δ ZeroMQͷPush / Pullύλʔϯ !24
  25. ෼ࢄݕࡧ • ZeroMQΫϥΠΞϯτ • VentilatorͱSinkͷ໾ׂ • ZeroMQϫʔΧ • ड͚औͬͨॲཧϦΫΤετ
 Λ࣮ߦͯ݁͠ՌΛฦ͢

    !25
  26. ॲཧϦΫΤετ • ϦΫΤετ $ parallel sqlite3 ::: target files :::

    “select count(*) from xxx where logs match ‘keyword’;” | awk ‘{m+=$1} END{print m;}’ ੨ࣈ : GNU ParallelͷίϚϯυΛ֤ॲཧϗετ΁ૹΓࠐΉ ੺ࣈ : ΫϥΠΞϯτϗετͰ·ͱΊ͋͛Δ !26
  27. ΄΅ຊ෺ͳٙࣅίʔυ • ΫϥΠΞϯτ • Worker ࣮ߦίϚϯυ ίϚϯυΛ ϫʔΧ΁ૹ৴ ίϚϯυΛ࣮ߦ ݁ՌΛΫϥΠΞϯτૹ৴

    ݁ՌΛड͚λʔϛφϧ΁දࣔ !27
  28. ධՁ !28

  29. ࣮ݧ؀ڥ • Amazon Web Service (AWS) • EC2Πϯελϯε : c4.4xlarge

    • vCPU : Xeon E5-2666 v3 @ 2.90GHz x 16 cores • ϝϞϦ : 30GB • σΟεΫʢEBSʣ : SSD 8GB (OS) + SSD 50GB (Data) • OS : Ubuntu 16.04.3 LTS (Xenial Xerus) !29
  30. ෼ࢄݕࡧ • ݕࡧͷ৚݅ • 1೔෼ͷσʔλʹରͯ͠100ճϦΫΤετΛ࣮ߦ͢Δ • 1೔෼ͷσʔλϑΝΠϧ਺͸60෼ʢ60ϑΝΠϧʣ x 24࣌ؒ =

    1,440ϑΝΠϧ • 1ϑΝΠϧ͋ͨΓͷϨίʔυ਺͸10ສ݅ʢ1,440 x 10ສʹ1ԯ4400ສϨίʔυʣ • 100ճ෼ͷϦΫΤετͰ͸144ԯϨίʔυ͕ର৅ͱͳΔ • ࣮ߦ͢ΔSQLจ͸ҎԼͰશจݕࡧͱΧ΢ϯτ • select count(*) from syslog where logs match ‘keyword’; !30
  31. ෼ࢄݕࡧʢϗετεέʔϧΞ΢τʣ • ϗετΛ1୆͔Β10୆΁૿Ճͤ͞Δ • 1୆Ͱ249ඵ͔Β10୆Ͱ39ඵ·Ͱ୹ॖʢ10ճࢼߦฏۉʣ

  32. ෼ࢄݕࡧʢϗετεέʔϧΞ΢τʣ • ϗετΛ1୆͔Β10୆΁૿Ճͤ͞Δ • 1୆Ͱ249ඵ͔Β10୆Ͱ39ඵ·Ͱ୹ॖʢ10ճࢼߦฏۉʣ Ϋϥ΢υ؀ڥ͸ෆ҆ఆ ʢϕετΤϑΥʔτʣ

  33. ෼ࢄݕࡧʢWorkerεέʔϧΞ΢τʣ • ϗετ10୆ɺ͔ͭ1୆͋ͨΓͷϫʔΧ਺Λ1͔Β16·Ͱ૿Ճͤ͞Δ • 1ϗετ1 worker 249ඵ͔Β10ϗετ10 workerͰ6.8ඵ·Ͱ୹ॖ ͜ͷลΓ͕࠷଎஋ *0ڝ߹͕ى͖Δ͔Β͔


    ଎౓͔ΘΒͣ
  34. ݁Ռͷ·ͱΊ • ॲཧੑೳ • ϗετ10୆ͷ৔߹ : ϗετ1୆ͷ10ഒૣ͘ͳΔʢ249ඵ -> 39ඵʣ •

    ϗετ10୆ͰϫʔΧ਺Λ૿Ճ : ૯ϫʔΧ਺10ʙ160Ͱ 249ඵ -> 6.8ඵ • ϨίʔυΛϑϧεΩϟϯˍશจݕࡧͨ݁͠Ռ • 144ԯϨίʔυ͔ΒඞཁͳσʔλΛൈ͖ग़͢ͷʹ໿6.8ඵ·Ͱߴ଎Խ • 10୆ͷϗετͰ໿36ഒͷߴ଎ԽΛ࣮ݱ !34
  35. Amazon Elastic MapReduceͱͷൺֱ • Amazon EMR : Πϯελϯε͸Hayabusaͱಉ͡c4.4xlarge • ߏ੒͸1Ϛελʔϊʔυ

    + 10 ίΞϊʔυ • σʔλ΁ͷΞΫηε • EMR͔ΒAmazon S3΁μΠϨΫτʹ
 ΞΫηε • શจݕࡧͷํ๏ • ϚελʔϊʔυͷPySpark͔Βߦ͏ JNQPSUUJNF GSPNQZTQBSLTRMJNQPSU42-$POUFYU TRM$POUFYU42-$POUFYU TD  MJOFTTDUFYU'JMF TBCFXPSLTTECFODINBSLMPH pMFTLL MPH  MJOFTDBDIF  GPSJJOSBOHF   TUBSUUJNFUJNF <MJOFTpMUFS MBNCEBTOPDJO T DPVOU GPSJJOSBOHF  >FMBQTFE@UJNFUJNFUJNF  TUBSUQSJOUFMBQTFE@UJNF 1Z4QBSLͰ࣮ߦ͢Δίʔυ
  36. Amazon Elastic Mapreduceͱͷൺֱ • ࣮ߦ݁Ռ • 10୆ͷߏ੒Ͱ໿17ഒHayabusaͷํ͕ߴ଎ʹಈ࡞

  37. ߟ࡯ !37

  38. ݕࡧͷεέʔϧΞ΢τ • 144ԯ͔ΒඞཁͳσʔλΛൈ͖ग़͢ͷʹ໿6.8ඵ·Ͱߴ଎Խ • 2೥લͷBigQueryͷϑϧεΩϟϯ͕120ԯϨίʔυͰ໿5ඵ • 10୆ͷϗετͰ໿36ഒͷߴ଎ԽΛ࣮ݱ • BigQuery͸Կඦ୆ɺԿઍ୆ͷϗετ͕ಉ࣌ʹಈ͍͍ͯΔ͔ෆ໌ •

    Amazon Elastic MapReduceͱͷൺֱ • 10୆ͷߏ੒Ͱ໿17ഒHayabusaͷํ͕ߴ଎ʹશจݕࡧՄೳ • γεςϜͷίετΛߟ͑ͨ৔߹ • ϦʔζφϒϧͰߴੑೳͳ෼ࢄݕࡧॲཧ͕࣮ݱͰ͖ͨ !38
  39. ஝ੵͷฒྻԽ • syslogͷෳ੡ͷ໰୊఺ • େྔͷσʔλʢύέοτʣͷෳ੡ͰଳҬΛѹഭ͢Δ • ຊདྷͰ͋Ε͹HDFSͷΑ͏ʹ෼ࢄϑΝΠϧγεςϜΛ࢖͏΂͖ • ϝλσʔλػߏΛܦ༝ͯ͠σʔλʹΞΫηε͢ΔͨΊຊ࣭తʹ஗͘ͳΔ •

    ෼ࢄϑΝΠϧγεςϜ͸ͱͯ΋೉͍͠ʢҰͭͷݚڀ෼໺ʣ • γϯϓϧ͞ͷ௥ٻͷ݁Ռ • อ࣋σʔλ͕ػثͷނোͰফࣦͨ͠ͱͯ͠΋ෳ੡͕࢒ΔɾނোػΛ֎͚ͩ͢ • ෼ࢄϑΝΠϧγεςϜͷΑ͏ʹ࠶഑ஔॲཧ͕ෆཁ !39
  40. γϯϓϧͳઃܭʹΑΔӡ༻ͷ؆ུԽ • ෼ࢄݕࡧ • Procedure / ConsumerϞσϧͰ࣮ݱ • ϓϩηε࣮ߦεέδϡʔϥ͸GNU Parallelʹґଘ

    • ෳࡶͳ෼ࢄγεςϜΛ࢖Θͳ͍ར఺ • τϥϒϧ೺Ѳͷߴ଎Խ • γεςϜӡ༻ෛՙͷܰݮ !40
  41. ߴ଎Խͷ؊ • ׂΓ੾Γઃܭ • ϦτϥΠॲཧ/Τϥʔॲཧ͸ະ࣮૷ • εέδϡʔϥ • ZeroMQͱGnu Parallelʹ͓೚ͤ

    • ετϨʔδ • ෼ࢄอଘͤͣ͞ʹෳ੡Λอ࣋
  42. ϋʔυ΢ΣΞʹґଘ͢Δ଎౓ • CPU Core଎౓ • ૣ͚Ε͹ૣ͍΄Ͳྑ͍ • Coreͷ਺ΑΓΫϩοΫ਺͕ͦͦ͜͜ૣ͍ํ͕଎౓͕ग़Δ͜ͱ΋͋Δ • σΟεΫ଎౓

    • SSD΍NVMeʢͦΓΌૣ͍ʹܾ·͍ͬͯΔʣ • I/OੑೳΛҾ͖ग़͢
  43. ଞͷγεςϜͱͷൺֱ • શจݕࡧͰApache Sparkͱൺֱͨ͠ • Elasticsearchͱͷൺֱ͸ʁ • Ͳ͏΍ͬͯൺ΂Δʁ • Τϯδϯͷ଎౓ʁʢElasticsearch͸ͱͯ΋ૣ͍ʣ

    • ݺͼग़͠APIͷ଎౓͸Ճຯ͢ΔʁʢREST APIݺͼग़͠͸ͱͯ΋஗͍ʣ • Write & Read • ॻ͖ͳ͕ΒಡΈࠐΜͩ৔߹͸ʁ
  44. ·ͱΊͱࠓޙͷ՝୊ !44

  45. ·ͱΊ • Hayabusaͷ෼ࢄγεςϜԽͷઃܭͱ࣮૷ • 144ԯϨίʔυͷsyslogϑϧεΩϟϯˍશจݕࡧΛ໿6.8ඵͰ࣮ݱ • ϚϧνϕϯμػثΛର৅ͱͨ͠ɺେྔͷෆἧ͍ͳϩάΛߴ଎ʹݕࡧՄೳ • τϥϒϧγϡʔτɾΠϯγσϯτϨεϙϯεΛஶ͘͠୹ॖ͢ΔՄೳੑ •

    γϯϓϧͳ෼ࢄॲཧߏ଄ʹΑΔ؅ཧͷ༰қੑ !45
  46. ࠓޙͷ՝୊ • ଞͷιϑτ΢ΣΞͱͷൺֱʢBigQuery, ElasticSearch, Splunkʣ • HayabusaͱଞͷΞϓϦέʔγϣϯͱͷ༥߹ʢΞϊϚϦݕ஌ͳͲʣ • Hayabusaͱ౷ܭॲཧϥΠϒϥϦ΍ػցֶशϥΠϒϥϦͱͷ݁߹ •

    ෼ࢄϑΝΠϧγεςϜɾ෼ࢄετϨʔδͷ࣮૷ !46
  47. ँࣙ • ຊݚڀͷҰ෦͸ɺࠃཱݚڀ։ൃ๏ਓՊֶٕज़ৼڵػߏʢJSTʣͷݚڀ੒Ռ ൃలࣄۀʮઓུత૑଄ݚڀਪਐࣄۀʢCRESTʣJPMJCR1783ʯͷࢧԉʹ ΑͬͯߦΘΕͨ

  48. None