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
Apache Beam Go SDK 触ってみた話
Search
apstndb
March 25, 2018
Programming
1
1k
Apache Beam Go SDK 触ってみた話
Open Go Friday #2 で話した資料
2018年3月時点の master ブランチを触ってみた話です。
apstndb
March 25, 2018
Tweet
Share
More Decks by apstndb
See All by apstndb
GKE/Kubernetes の Service はどう動いているのか
apstndb
18
9.7k
Other Decks in Programming
See All in Programming
状態と共に暮らす:ステートフルへの挑戦
ypresto
3
1k
Jakarta EE Meets AI
ivargrimstad
0
490
By the way Google Cloud Next 2025に行ってみてどうだった
ymd65536
0
110
KANNA Android の技術的課題と取り組み
watabee
0
150
DevOpsDaysTokyo2025社内副業で他部門へ_越境_して見えた価値再定義最大1か月のリードタイムを10分に短縮したDevOps実践.pdf
susumutomita
0
110
iOSアプリで測る!名古屋駅までの 方向と距離
ryunakayama
0
130
タイムゾーンの奥地は思ったよりも闇深いかもしれない
suguruooki
1
780
PHPバージョンアップから始めるOSSコントリビュート / how2oss-contribute
dmnlk
1
1.1k
Deoptimization: How YJIT Speeds Up Ruby by Slowing Down / RubyKaigi 2025
k0kubun
1
1.6k
個人開発の学生アプリが企業譲渡されるまで
akidon0000
0
1.1k
Bedrock × Confluenceで簡単(?)社内RAG
iharuoru
1
100
AIコーディングの理想と現実
tomohisa
33
36k
Featured
See All Featured
Building a Modern Day E-commerce SEO Strategy
aleyda
40
7.2k
Imperfection Machines: The Place of Print at Facebook
scottboms
267
13k
Why Our Code Smells
bkeepers
PRO
336
57k
A designer walks into a library…
pauljervisheath
205
24k
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
656
60k
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
160
15k
Bootstrapping a Software Product
garrettdimon
PRO
307
110k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
34
2.9k
Build your cross-platform service in a week with App Engine
jlugia
230
18k
How STYLIGHT went responsive
nonsquared
100
5.5k
Understanding Cognitive Biases in Performance Measurement
bluesmoon
29
1.6k
The Power of CSS Pseudo Elements
geoffreycrofte
75
5.8k
Transcript
Apache Beam Go SDK 触ってみた話 apstndb
Apache Beam とは • Google 発のバッチ処理とストリーミング処理の統一モデルである Dataflow モデル を扱う OSS
• フルマネージドなデータ処理サービス Google Cloud Dataflow 実行可能 ◦ そもそも Apache 寄贈前は Dataflow SDK ◦ 他の Runner 上でも実行可能(Spark, Flink, etc...) • 2.4.0 では Java と Python の SDK が含まれる ◦ 2018年3月現在開発が進んでいる目玉は Streaming SQL と Go SDK • Go でもクラウドで分散データ処理が可能になる?
Apache Beam Go SDK のステータス(2018/3現在) - 設計資料 https://s.apache.org/beam-go-sdk-design-rfc - JIRA
の sdk-go コンポーネントとして管理されている - 開発状況 - 長い間 go-sdk ブランチで開発 - Apache Beam 2.4 ブランチが切られてから master にマージ済 - 2.5 でリリース予定? https://github.com/apache/beam/blob/master/sdks/go/README.md
Apache Beam Go SDK のステータス
構成要素 - PCollection - Beam 上でのデータセット - リストのようなもの - PTransform
- PCollection から PCollection を作る操作 - 複数入出力でマージ(JOIN) や分岐も可能 - ParDo は map / flatMap 相当 - 他にも Combine, GroupByKey, Flatten, Partition 等
ソースコードの実例 var input beam.PCollection = beam.Create(s, 1, 2, 3, 4)
var square beam.PCollection = beam.ParDo(s, func(x int) int { return x * x }, input) // int to int var strings beam.PCollection = beam.ParDo(s, strconv.Itoa, square) textio.Write(s, *output, strings) 値の型がない!
Go SDK での実行におけるフェーズ • Compile ◦ 通常の Go のプログラムとしてコンパイルする ◦
型チェックが行われるがジェネリクスがないため大部分は検査できない • Pipeline Construction ◦ Go のプログラム実行時に Beam の実行グラフを生成する ◦ リフレクションでパイプラインの型チェックをする ▪ panic するか err で受け取るかは選択可能 • Runtime ◦ 実行グラフを元に Runner 上で実行する ▪ Cloud Dataflow のジョブ内での処理に対応 ◦ 型チェック済なので安全
実行時に管理される型情報 stringList := beam.CreateList(s, []string{"a", "b", "c"}) fmt.Println("stringList:", stringList.Type()) //
stringList: string intList := beam.CreateList(s, []int{1, 2, 3}) fmt.Println("intList:", intList.Type()) // intList: int convList := beam.ParDo(s, strconv.Itoa, intList) fmt.Println("convList:", convList.Type()) // convList: string convList2 := beam.ParDo(s, strconv.Itoa, stringList) fmt.Println("convList2:", convList2.Type()) // panic
Direct Runnerでの実行 • ローカルで実行可能 • パイプラインのグラフのにおける型情報がデバッグ出力される • 実装済の機能は動く
Cloud Dataflow での実行 • ジョブを発行可能 ◦ グラフが見える • 2018/3 現在の
master は機能せず • 途中から詰まったままになる • 実行状況の詳細も取れない ◦ Currently unsupported らしい
まとめ - Go にも分散処理が来る日は近そう - 脱 Java したい! - エディタでの対応が望まれる(型チェック・補完)
- Go にもやっぱりジェネリクスは欲しいのでは?