Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Introduction of GCP Dataflow
Search
soymsk
April 12, 2018
Technology
260
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Introduction of GCP Dataflow
(In Japanese)
soymsk
April 12, 2018
More Decks by soymsk
See All by soymsk
[SUSTEN 勉強会]マイナンバーカードの仕組み
soymsk
0
250
Google_Cloud_Next_19_AI_ML_Summary_public.pdf
soymsk
7
2k
DeNAにおけるデータ活用事例 〜移動体データ活用によるサービス創出とその基盤 / Data Driven Service in Taxi hiring app MOV
soymsk
0
420
wavenet
soymsk
0
91
Other Decks in Technology
See All in Technology
Introduction to Bill One Development Engineer
sansan33
PRO
0
470
Contract One Engineering Unit 紹介資料
sansan33
PRO
0
20k
コミュニティから始まった農業IoTとの7年間 ——人との関わりが教えてくれたこと
peacemaker07
0
110
Oracle MCP Servers Explained
thatjeffsmith
0
460
研究開発部の紹介 / Sansan R&D Profile
sansan33
PRO
4
24k
VLMで2.3万枚のPyCon JP写真を検索!
terapyon
1
460
MIXIで活躍できるエンジニアを 若手社員目線で考えてみる
mixi_engineers
PRO
0
150
Claude Teamプランの コスト最適化を考える
rfdnxbro
0
170
Master Dataグループ紹介資料
sansan33
PRO
1
4.8k
属人化を叩き割れ!「制作加速」と「安定化」の矛盾を打破する:8年目プロダクトが辿り着いた「ミスが起こり得ない」アセット制作フローの全貌
gree_tech
PRO
0
450
Head First モブプログラミング / Head First Mobprogramming
takaking22
10
12k
巨大気象データと戦う ― サロゲートモデル学習を高速化する圧縮技術
gpuunite_official
0
260
Featured
See All Featured
16th Malabo Montpellier Forum Presentation
akademiya2063
PRO
0
360
Noah Learner - AI + Me: how we built a GSC Bulk Export data pipeline
techseoconnect
PRO
0
400
Fireside Chat
paigeccino
42
4k
AI Search: Where Are We & What Can We Do About It?
aleyda
0
7.8k
Into the Great Unknown - MozCon
thekraken
41
2.7k
How Fast Is Fast Enough? [PerfNow 2025]
tammyeverts
3
810
The MySQL Ecosystem @ GitHub 2015
samlambert
251
13k
Deep Space Network (abreviated)
tonyrice
0
270
Ten Tips & Tricks for a 🌱 transition
stuffmc
0
170
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
28
3.6k
Thoughts on Productivity
jonyablonski
76
5.3k
Max Prin - Stacking Signals: How International SEO Comes Together (And Falls Apart)
techseoconnect
PRO
0
420
Transcript
Introduction of GCP Dataflow 2018-04 @soymsk
Dataflowͬͯͳʹʁ
None
Կ͕Ͱ͖Δͷʁ
ࢄฒྻॲཧ͕Ͱ͖·͢
ੈͷதʹࢄ͍ͨ͠ͷͨ͘͞Μ͋Δ • σʔλूܭ: Sum, Average, etc.. • σʔλՃ: JSONύʔεɺMapMatch •
I/O: ෳϦιʔεͷೖग़ྗ • ߦྻԋࢉ • ػցֶश:ࢄֶश ( CV, RL)
͜Μͳ͓Έ͕͋Γ·ͤΜ͔ʁ • ࢄॲཧͷ࣮͕͍͠ɻɻ • ࠓόονॲཧ͍͚ͨ͠ͲɺকདྷετϦʔϛϯάॲ ཧ͍ͨ͠ʂ • ࢄॲཧج൫(Hadoop, Yarn, Spark)ͷӡ༻͕ͭΒ
͍ɻɻ
͜Μͳ͓Έ͕͋Γ·ͤΜ͔ʁ • ࢄॲཧͷ࣮͕͍͠ɻɻ • →PythonͰαΫοͱ(※ʣ͔͚·͢ • ࠓόονॲཧ͍͚ͨ͠ͲɺকདྷϦΞϧλΠϜʹॲཧ ͍ͨ͠ʂ • →ಉҰίʔυ(※)
Ͱ όον/ετϦʔϛϯά྆ํಈ͔ͤ ·͢ɻ • ࢄॲཧج൫(Hadoop, Yarn, Spark)ͷӡ༻͕ͭΒ͍ɻɻ • → Fully managed ͳͷͰӡ༻ෆཁ(※) ※: ΄΅
ࢄ vs ฒྻ • ※ఆٛ໌֬ʹܾ·͍ͬͯ·ͤΜ • ࢄॲཧΛࣗલͰ࣮͢Δ͜ͱෆՄೳʹ͍ۙ • ނোɺ௨৴ःஅ͕͋Γ͏ΔΫϥελ্ͰॲཧΛҡ࣋͢Δʹɾɾɾʁ •
࠶࣮ߦʁ • ҟͳΔεϖοΫͷෳϚγϯ্ͰɺదʹෛՙΛࢄͤ͞Δʹɾɾɾʁ • దͳεέδϡʔϦϯά • ୭্͕هΛΔͷ͔ɾɾɾʁ • Ϛελʔ ←ɹϚελʔ͕͓ͪͨΒʁ • ϚϧνϚελʔʁ • Ϛελʔબग़ΞϧΰϦζϜɺίϯηϯαεΞϧΰϦζϜ(Raft, Paxos) • http://block-chain.jp/blockchain/distributed-consensus-algorithm-protocol/ ฒྻ 1BSBMMFM ࢄʢ%JTUSJCVUFE ఆٛ˞ ୯ҰϚγϯ্Ͱฒྻॲཧ ෳϚγϯ্Ͱฒྻॲཧ ࣮ݱํ๏ ɾϚϧνϓϩηεԽ ɾϚϧνεϨουԽ ɾ$16໋ྩ ɾࣗલͰ࣮ ɾʮࢄॲཧج൫ʯ্Ͱ࣮
ࢄॲཧج൫ ετϦʔϛϯά όον
ࢄॲཧج൫ • ಘҙͳ͜ͱ͕ͦΕͧΕҟͳΔ • όον͔ετϦʔϛϯά͔ • ࣮ݴޠ(Java, Python) • ͲͷϨΠϠʔΛ୲͢Δ͔
• Ϋϥελཧ·ͰҰ؏ͯ͠Δ • Ϋϥελཧผͷίϯϙʔωϯτʹҕৡ͢Δ( on YARN) • ϑϨʔϜϫʔΫ͝ͱʹ࣮ํ๏͕ҟͳΔͷͰɺֶशίετ͕͔͔Γɺ ίʔυͷՄൖੑͳ͍ɻ • ӡ༻͕େม • ίʔυͷσόοά͢Βେมͳͷʹɺج൫ͷϝϯςඞཁ
ͦ͜Ͱ
Dataflow(Apache Beam)ͱ • GCP্ͷϑϧϚωʔδυࢄॲཧαʔϏε • PythonɺJavaɺ(Scala)ɺ(Go)Ͱ࣮Մೳ • Implement once ,
Run on any runtimes. • ϑϨʔϜϫʔΫࣗମApache Beamͱ͍͏໊લͰ࣮͕ ެ։͞Ε͍ͯΔɻ • Apache BeamͰ࣮͢Εɺ͍ΖΜͳϥϯλΠϜ্Ͱ࣮ ߦՄೳ • Dataflowɺ࣮ʮApache Beam͕ಈ࡞͢ΔϥϯλΠ Ϝʯͷ̍ͭɺͱ͍͏Ґஔ͚ͮ
Apache Beam • Apache BeamͰɺॲཧ༰Λఆٛ͢Δ͚ͩ • ॲཧͷ࣮ߦͷํϥϯλΠϜͷ • Apache BeamϥϯλΠϜೖྗσʔλΛநԽͯ͘͠
ΕΔ
Apache Beam Concept • ॲཧΛؔͱͯ͠ఆٛ͠ɺचͭͳ͗ʹ࣮ • PCollection: ύΠϓϥΠϯؒσʔλΛϥοϓͨ͠Φϒ δΣΫτ •
Transform: σʔλॲཧ(Pythonؔʣɻࢄͷ࠷খ୯Ґ
όονॲཧΛྫʹղઆ͠·͢
Hands-on
I/O Language File-based Messaging Database Java Beam Java supports Apache
HDFS, Amazon S3, Google Cloud Storage, and local filesystems. FileIO (general-purpose reading, writing, and matching of files) AvroIO TextIO TFRecordIO XmlIO TikaIO Amazon Kinesis AMQP Apache Kafka Google Cloud PubSub JMS MQTT Apache Cassandra Apache Hadoop InputFormat Apache HBase Apache Hive (HCatalog) Apache Solr Elasticsearch (v2.x and v5.x) Google BigQuery Google Cloud Bigtable Google Cloud Datastore Google Cloud Spanner JDBC MongoDB Redis Python Beam Python supports Google Cloud Storage and local filesystems. avroio textio tfrecordio vcfio Google BigQuery Google Cloud Datastore
Transforms %BUB ParDo(Map) %BUB GroupBy %BUB %BUB %BUB Side Input
%BUB %BUB 1 1 N M Multiple Output %BUB %BUB %BUB Combine %BUB %BUB N 1
Streaming? • ೖྗΛMessagingαʔϏε(PubSub, Kafka)ʹม͑Δͩ ͚ͰɺࣗಈతʹετϦʔϛϯάॲཧͱͯ͠ಈ࡞͢Δɻ • Transformόονॲཧͱશ͘ಉ͡ͰOK • ೖग़ྗ͕1:1ͷॲཧ͜Ε͚ͩ •
→ Aggregation(GroupBy)͢Δʹɻɻʁ
Windowing • StreamingͱBatchͷॲཧΛநԽ͢ΔΈͱͯ͠ ʮBounded dataʯʮUnbounded dataʯ ͱ͍͏֓೦͕͋Δ • Bounded …
σʔλͷ࠷ॳͱ࠷ޙ͕ఆٛ͞Ε͍ͯΔ(όο νʣ • Unbounded …࠷ޙ͕ະఆʢετϦʔϛϯά) • Boundedͳσʔλ GroupByͰ͖Δɻ
Windowing • Unbounded dataBounded dataʹม͢ΕΑ͍ɻ • σʔλΛ͚۠ͯ͠Bounded ʹ͢ΔΈ͕ ʮWindowingʯ •
࣮ɺόονॲཧɺσʔλΛͯ͢ ʮGlobalWindowʯͱ͍͏̍ͭͷWindowͷσʔλ ʹର͢ΔετϦʔϛϯάͱಉٛͱߟ͑Δ͜ͱ͕Ͱ͖Δɻ
Windowing • Sliding time windowͰ͍͍ͩͨΓ͍ͨ͜ͱͰ͖Δ • 5ຖʹɺ30ؒͷσʔλͷฏۉΛग़͢ɺͳͲɻ window (෯:60s, Φϑηοτ:
30s)
DataflowͷϋϚΓͲ͜Ζ
ᶃϩʔΧϧͰಈ͍ͨͷʹɺ Dataflow্Ͱಈ͔ͳ͍
ߟ͑ΒΕΔͱ͜Ζ • ࢄڥͰɺϝϞϦۭؒҰڞ༗͞Εͳ͍ • εςʔτϑϧͳϩδοΫ͕ඞཁ • ϫʔΧʔؒͷঢ়ଶཧ֎෦ίϯϙʔωϯτ (memcached, GCS ͳͲ)Λܦ༝͢Δ
• ϫʔΧϦιʔεෆ • Transform1Ϩίʔυ࠷1ճ࣮ߦɻ • ϫʔΧʔ͕མͪͨͱ͖ͳͲɺ࠶࣮ߦ͞ΕΔՄೳੑɻ • ֎෦DBʹϨίʔυॲཧճΛΠϯΫϦϝϯτͯͨ͠Γ ͢ΔͱɺೖྗϨίʔυͱҰக͠ͳ͍Մೳੑ͕͋Δɻ
ߟ͑ΒΕΔͱ͜Ζ2 • Ϟδϡʔϧґଘؔ • σϑΥϧτͰϫʔΧʔʹجຊతͳύοέʔδ͔͠ೖͬͯͳ͍ • pipͰೖΔͷrequirements.txtॻ͍ͯΦϓγϣϯʹࢦఆͯ͠σ ϓϩΠ͢Δ͚ͩɻ • ࣗͰ࡞ͬͨϞδϡʔϧsetup.pyΛ༻ҙ͠ɺύοέʔδԽ͕ඞ
ཁɻ • όΠφϦ(lib)ͷՃἚͷಓ • DataflowͷϫʔΧʔChromeOSΆ͍(Ubuntuͷѥछ) • apt͔ͭ͑Δ͕ɺखݩͷlibಈ͔ͳ͍ • buildίʔυΛsetupʹࠐΉ
ᶄͳ͔͍ͥ
Dataflowνϡʔχϯά • νϡʔχϯά߲ଟ͘ͳ͍ • Ϧʔδϣϯ(σʔλ, ΠϯελϯεͳΔۙ͘͘) • ΠϯελϯελΠϓ x ʮ࠷େϫʔΧʔʯ
• جຊɺUIΛݟͳ͕Β٧·͍ͬͯΔͱ͜ΖͷίʔυΛվળɻ • ೖྗ/ग़ྗ͕ϘτϧωοΫʹͳΔ͔ʁ • PubSubͷQuotaΛ͋͛Δ • GCSͷϑΝΠϧΛେྔʹಡΈࠐΉͱ͔ͬͨɻ • Combine͔ͯ͠ΒಡΈࠐΉ • ࠷ۙվળ͞Εͨʁ
νϡʔχϯά - Fusion - • ༥߹(Fusion) • DataflowɺύΠϓϥΠϯͷߏΛղੳͯ͠ɺෳͷ TransformΛ༥߹ͯ̍ͭ͠ͷTransformͱ࣮ͯ͠ߦ͢ΔΈ ͕ೖ͍ͬͯΔɻ
• Fusion͞ΕͨTransformɺϥούʔͷPCollection͕࣮ମԽ ͞ΕͣɺೖྗσʔλΛͦͷ··࣍ͷTransformʹྲྀ͢ͷͰɺύ ϑΥʔϚϯε্͕͕Δɻ • Fusion͞ΕͨҰ࿈ͷTransformɺ̍ͭͷTransformͱ࣮ͯ͠ ߦ͞ΕΔɻ
νϡʔχϯά - Fusion - Word Countͷྫ ֤εςοϓ͝ͱʹதؒσʔλʢ1$PMMFDUJPO ͕ ࣮ମԽ͞ΕΔͷͰߴίετ εςοϓΛ·ͱΊͯɺதؒσʔλͷ࣮ମԽΛল͍ͯߴԽ
νϡʔχϯά - Fusion - • جຊతʹFusionѱ͞Λ͠ͳ͍͕ɺ ʮೖྗϨίʔυʯ<<< ʮग़ྗϨίʔυʯͳParDo ("high fan-
out” ParDo) ͕ೖΔͱɺޙଓͷTransformͰॲཧ͕ͭ·Δɺͱ͍͏ݱ͕͋Δɻ • Fusion͞Εͨ݁ՌɺதؒͷTransform͕ࢄ͞Εͳ͍ɻ ※ೖྗϨίʔυʹΑͬͯ୲worker͕அ͞ΕΔ 5SBOTGPSN 5SBOTGPSN 5SBOTGPSN 5SBOTGPSN 'VTJPOFE5SBOTGPSN ຊདྷҙਤͨ͠ࢄ …. record: 1 record: 10000 record: 1
νϡʔχϯά - Fusion - • ྫ͑ɺϑΝΠϧ໊ͷྻΛೖྗͱ͠ɺϑΝΠϧͷத ͷϨίʔυΛग़ྗ͢ΔΑ͏ͳParDo ةݥ(සग़)ɹ • ճආࡦ
• GroupBy -> UnGroup ͱ͍͏ॲཧΛhigh fan-outͷ ParDoͷޙʹࠐΉ • εςοϓͰग़ྗ͞ΕͨPCollectionΛ࣍ͷεςοϓͷʮSide InputʯʹೖΕ ΔʢSide Inputඞ࣮ͣମԽ͞ΕΔʣ
Prevent Fusion • ΈࠐΈͷϑΝΠϧಡΈࠐΈॲཧʹ͢ͰʹରࡦࡁΈ {
ᶅσόοάͭΒ͍
ࢄฒྻॲཧͷ໋॓Ͱ͢
Dataflow σόοά • ྫ֎࣌ͷελοΫτϨʔεग़ͳ͍ɻ • ֤εςοϓͷதͰCatchͯࣗ͠ྗͰग़͢ • ࣦഊ࣌ͷೖྗσʔλGCSͳͲୀආͤ͞Δ • ҆қʹlogging͢Δͱlog͕େྔʹ(GB୯Ґ)Ͱग़ͯ
དྷΔ •
·ͱΊ • Dataflow(Apache Beam)Google͕ɺཚཱ͢Δࢄॲཧج൫Λ౷ Ұ͢ΔͨΊʹऔΓΜͰ͍ΔΒ͍͠ɻ • ۤ࿑͋Δ͕ɺΦʔτεέʔϧͳͲϚωʔδυࢄॲཧج൫ͱͯ͠ ΄΅།Ұͷબࢶʁ • ϦΞϧλΠϜϩάऩूͱͯ͠PubSub->(DF)->BQ͕σϑΝΫτʹ
ͳΓͭͭ͋Γͦ͏ɻ • Python, Go, JavaͰ࣮Մೳ • ͨͩ͠ɺJava͕Ұ൪҆ఆ͍ͯ͠Δɻ • ಛʹετϦʔϛϯάϞʔυͷ໘ͰJavaʹ͓͍ͯͨ͠΄ ͏͕Α͍ɻ