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
250
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
AIで政治は変わるのか? — 中高生と考えたAI時代の民主主義(東海高校サタデープログラム)
eitarosuda
0
340
“全部コピーしない”ファイルデータの活用 : — FSx for ONTAP × S3 Tables × Icebergで作るメタデータカタログ
yoshiki0705
0
200
「軸足」は 固定しなくていい - 熱量と強みで描く、しなやかなキャリアの形
kakehashi
PRO
1
320
WebGIS AI Agentの紹介
_shimizu
0
610
本当の”仕事”を手放せる未来が見えた
mu7889yoon
0
210
小さいから、全部わかる。— 常駐AI "xangi" のすすめ
sugupoko
0
210
起点・思考・出力で分解する 〜PM業務の自動化設計〜
kazu_kichi_67
2
1.2k
Zenoh on Zephyr on LiteX
takasehideki
2
160
水を運ぶ人としてのリーダーシップ
izumii19
4
1.2k
打造你的 AI 工作流:Agent Skill + MCP 實戰工作坊
appleboy
0
310
なぜ人は自分のプロジェクトを 「なんちゃってアジャイル」と 自嘲するのか
kozotaira
0
220
徹底討論!ECS vs EKS!
daitak
3
1.8k
Featured
See All Featured
Building Experiences: Design Systems, User Experience, and Full Site Editing
marktimemedia
0
550
StorybookのUI Testing Handbookを読んだ
zakiyama
31
6.8k
Unsuck your backbone
ammeep
672
58k
The Impact of AI in SEO - AI Overviews June 2024 Edition
aleyda
5
1.1k
Visualization
eitanlees
152
17k
Making Projects Easy
brettharned
120
6.7k
Building Adaptive Systems
keathley
44
3.1k
The Spectacular Lies of Maps
axbom
PRO
1
840
Crafting Experiences
bethany
1
200
Connecting the Dots Between Site Speed, User Experience & Your Business [WebExpo 2025]
tammyeverts
11
960
SEO in 2025: How to Prepare for the Future of Search
ipullrank
3
3.6k
The SEO identity crisis: Don't let AI make you average
varn
0
510
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ʹ͓͍ͯͨ͠΄ ͏͕Α͍ɻ