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
940
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.3k
Other Decks in Programming
See All in Programming
初心者のためのRubyKaigi入門/RubyKaigi Introduction
a_matsuda
10
1.8k
Inner Source@DB: Eine Geschichte über Open-Source-Praktiken im DB Konzern
morl99
1
110
Komplexe Oberflächen mit SVG und der Web Animation API
joergneumann
0
690
From Spring Boot 2 to Spring Boot 3 with Java 21 and Jakarta EE
ivargrimstad
0
1.1k
How to improve maintainability and readability of your automated tests? ( #scrumniigata )
teyamagu
PRO
1
110
GitLab CI/CD で C#/WPFアプリケーションのテストとインストーラーのビルド・デプロイを自動化する
hacarus
0
580
Documentation testsの恩恵 / Documentation testing benefits
ssssota
1
530
新宿ダンジョンを可視化してみた
satoshi7190
3
430
Revisiting the Hotwire Landscape after Turbo 8 @ RailsConf 2024, Detroit
marcoroth
3
570
Three ways to use AI on Android: The Good, the Bad and the Ugly
marxallski
0
120
TypeScriptでもLLMアプリケーション開発 / LLM Application In Typescript
rkaga
5
1.3k
Anthropic Cookbook のおすすめレシピ
schroneko
7
1.5k
Featured
See All Featured
Done Done
chrislema
178
15k
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
34
6.1k
Navigating Team Friction
lara
179
13k
Writing Fast Ruby
sferik
622
60k
How to Ace a Technical Interview
jacobian
273
22k
Testing 201, or: Great Expectations
jmmastey
30
6.4k
Dealing with People You Can't Stand - Big Design 2015
cassininazir
358
22k
Bash Introduction
62gerente
605
210k
Unsuck your backbone
ammeep
664
57k
The Straight Up "How To Draw Better" Workshop
denniskardys
228
130k
Building Applications with DynamoDB
mza
88
5.7k
Clear Off the Table
cherdarchuk
85
310k
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 にもやっぱりジェネリクスは欲しいのでは?