rabbit-slide-kou-db-tech-showcase-2021 2021.11.17.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: af08ff6e29276c0cda327c43f7d833a08738a8ccd11e5a93c4304e41e99b69f5
4
+ data.tar.gz: f0fccba09b0522d37017850c039e69bc8c3146a74f4016d45039d90bc37311e3
5
+ SHA512:
6
+ metadata.gz: e0a5bed1cefda29c5b1c83962a9b9cc427edd0e3a50180b55bcfdd9257b46c7b3c17689510b5584b097d9dca64a624998752cbd09ff8aa1afa4bd6ebf5d7714d
7
+ data.tar.gz: 1a5480768dfa2965b820508e860d9ffdd29aef3e0be4beac5be3d43b24c4f82473e05bacb4f8601214d790bc1dc5c5138518fc0a22a78a70b5a10d79675c8226
data/.rabbit ADDED
@@ -0,0 +1,2 @@
1
+ --size 1920,1080
2
+ apache-arrow-flight.rab
data/README.rd ADDED
@@ -0,0 +1,54 @@
1
+ = Apache Arrow Flight – ビッグデータ用高速データ転送フレームワーク
2
+
3
+ ビッグデータは現実的な時間で処理できてこそ活きます。処理時間はデータ処理アルゴリズムの計算量だけで決まり…ません!適切なノードにデータを配置しないとそもそもデータ処理できませんが、大量ノードが協調するビッグデータ処理ではデータ移動コストを無視できません。Apache Arrow Flightを使えばネットワーク帯域限界まで高速にデータ転送できます。
4
+
5
+ このセッションではApache Arrow Flightの仕組みおよび利用例として分散計算プラットフォームApache Arrow Ballistaを紹介します。
6
+
7
+ == ライセンス
8
+
9
+ === スライド
10
+
11
+ CC BY-SA 4.0
12
+
13
+ 原著作者:須藤功平
14
+
15
+ ==== 株式会社クリアコードのロゴ
16
+
17
+ CC BY-SA 4.0
18
+
19
+ 原著作者:株式会社クリアコード
20
+
21
+ ページヘッダーで使っています。
22
+
23
+ ==== Apache Arrow Flightの図
24
+
25
+ Apache License 2.0
26
+
27
+ 原著作者:The Apache Software Foundation
28
+
29
+ ==== Apache Arrow Ballistaのロゴ
30
+
31
+ Apache License 2.0
32
+
33
+ 原著作者:The Apache Software Foundation
34
+
35
+ == 作者向け
36
+
37
+ === 表示
38
+
39
+ rake
40
+
41
+ === 公開
42
+
43
+ rake publish
44
+
45
+ == 閲覧者向け
46
+
47
+ === インストール
48
+
49
+ gem install rabbit-slide-kou-db-tech-showcase-2021
50
+
51
+ === 表示
52
+
53
+ rabbit rabbit-slide-kou-db-tech-showcase-2021.gem
54
+
data/Rakefile ADDED
@@ -0,0 +1,17 @@
1
+ require "rabbit/task/slide"
2
+
3
+ # Edit ./config.yaml to customize meta data
4
+
5
+ spec = nil
6
+ Rabbit::Task::Slide.new do |task|
7
+ spec = task.spec
8
+ spec.files += Dir.glob("images/**/*.*")
9
+ # spec.files -= Dir.glob("private/**/*.*")
10
+ spec.add_runtime_dependency("rabbit-theme-clear-code")
11
+ end
12
+
13
+ desc "Tag #{spec.version}"
14
+ task :tag do
15
+ sh("git", "tag", "-a", spec.version.to_s, "-m", "Publish #{spec.version}")
16
+ sh("git", "push", "--tags")
17
+ end
@@ -0,0 +1,528 @@
1
+ = Apache Arrow Flight
2
+
3
+ : subtitle
4
+ ビッグデータ用高速データ転送フレームワーク
5
+ : author
6
+ 須藤功平
7
+ : institution
8
+ 株式会社クリアコード
9
+ : content-source
10
+ db tech showcase 2021
11
+ : date
12
+ 2021-11-17
13
+ : allotted-time
14
+ 45m
15
+ : theme
16
+ .
17
+
18
+ = モチベーション
19
+
20
+ ビッグデータを\n
21
+ 処理したい!
22
+
23
+ = ビッグデータ処理に必要なもの
24
+
25
+ * 大量データ:データがないと始まらない!
26
+ * 速度:速くないと処理しきれない!
27
+
28
+ = 大量データの収集に必要なもの
29
+
30
+ * データ収集ツール
31
+ * 例:ログ:Fluentd/Fluent Bit
32
+ * ストレージ
33
+ * 例:Amazon S3
34
+ * 効率的なデータフォーマット
35
+ * トレードオフ:空間効率と時間効率
36
+ * 例:CSVよりApache Parquet
37
+
38
+ # image
39
+ # src = images/fluentd-maintenance.png
40
+ # relative-width = 20
41
+ # relative-margin-right = -10
42
+ # align = right
43
+ # vertical-align = top
44
+
45
+ = 高速処理に必要なもの
46
+
47
+ * 高速な分散システム
48
+ * 1台では処理しきれない
49
+ * 高速なアルゴリズムとその実装
50
+ * 個々の処理が速くなると全体も速くなる
51
+
52
+ = 今日注目すること
53
+
54
+ 高速な分散システム
55
+
56
+ = 高速な分散システムに必要なもの
57
+
58
+ * 効率のよいタスク管理
59
+ * より速く処理が終わるようなリソース配分
60
+ * 効率のよいデータ転送
61
+ * ノード間でのデータ交換コストは無視できない
62
+
63
+ = 大量データの交換コスト
64
+
65
+ # image
66
+ # src = https://hannes.muehleisen.org/p852-muehleisen.pdf
67
+ # page = 1
68
+ # relative-width = 50
69
+ # relative-clip-y = 8
70
+ # relative-clip-height = 17
71
+ # align = center
72
+ # vertical-align = top
73
+
74
+ # image
75
+ # src = https://hannes.muehleisen.org/p852-muehleisen.pdf
76
+ # page = 1
77
+ # relative-width = 90
78
+ # relative-clip-x = 50
79
+ # relative-clip-y = 25
80
+ # relative-clip-height = 25
81
+ # align = left
82
+ # vertical-align = bottom
83
+ # relative-margin-top = 1.5
84
+ # relative-margin-left = -20
85
+
86
+ # image
87
+ # src = https://hannes.muehleisen.org/p852-muehleisen.pdf
88
+ # page = 2
89
+ # relative-width = 100
90
+ # relative-clip-x = 50
91
+ # relative-clip-height = 29
92
+ # align = right
93
+ # vertical-align = bottom
94
+ # relative-margin-top = 8
95
+ # relative-margin-right = -10
96
+
97
+ (('tag:right'))
98
+ (('tag:margin-top * 22.5'))
99
+ (('note:((<URL:https://hannes.muehleisen.org/p852-muehleisen.pdf>))'))
100
+
101
+ = 大量データの交換コスト
102
+
103
+ * ボトルネックになりやすい
104
+ (1) シリアライズ・デシリアライズ
105
+ (2) ネットワーク帯域
106
+ * 目指すところ
107
+ * メイン処理がボトルネック\n
108
+ (メイン処理以外が十分速い)
109
+
110
+ # image
111
+ # src = https://hannes.muehleisen.org/p852-muehleisen.pdf
112
+ # page = 2
113
+ # relative-width = 60
114
+ # relative-clip-x = 50
115
+ # relative-clip-height = 24
116
+ # align = right
117
+ # vertical-align = top
118
+ # relative-margin-top = -10
119
+ # relative-margin-right = -17
120
+
121
+ = 解決策
122
+
123
+ Apache Arrow Flight
124
+
125
+ = Apache Arrow Flightと私
126
+
127
+ * Apache ArrowプロジェクトのPMCメンバー
128
+ * (('note:Apache Arrow Flightも開発しているプロジェクト'))
129
+ * (('note:PMC:プロジェクト管理委員会'))
130
+ * コミット数2位
131
+
132
+ # image
133
+ # src = images/contributor.png
134
+ # relative-width = 45
135
+ # align = right
136
+ # vertical-align = bottom
137
+ # relative-margin-top = 10
138
+ # relative-margin-right = -10
139
+
140
+ = Apache Arrow Flight
141
+
142
+ * gRPCベースのデータ転送フレームワーク
143
+ * ポイント
144
+ * 並列転送対応
145
+ * 「効率のよいタスク管理」に有用
146
+ * ストリーム処理対応
147
+ * 「効率のよいタスク管理」に有用
148
+ * シリアライズ・デシリアライズがほぼ不要
149
+ * 「効率のよいデータ転送」に有用
150
+
151
+ = 簡単な使い方
152
+
153
+ # image
154
+ # src = https://arrow.apache.org/img/20191014_flight_simple.png
155
+ # relative-height = 80
156
+
157
+ (('tag:right'))
158
+ (('note:((<URL:https://arrow.apache.org/img/20191014_flight_simple.png>))'))\n
159
+ (('note:Apache License 2.0 - © 2016-2021 The Apache Software Foundation'))
160
+
161
+ = GetFlightInfo
162
+
163
+ * クライアント→サーバー
164
+ * データの取得方法を教えてもらう
165
+ * サーバーはFlightInfoを返す
166
+ * FlightInfoの中身
167
+ * メタデータ:スキーマ・総レコード数…
168
+ * 複数エンドポイント:\n
169
+ データは複数ヶ所に分散しているかもしれない!
170
+
171
+ # image
172
+ # src = https://arrow.apache.org/img/20191014_flight_simple.png
173
+ # relative-width = 20
174
+ # align = right
175
+ # vertical-align = top
176
+ # relative-margin-right = -10
177
+
178
+ = DoGet
179
+
180
+ * クライアント→サーバー
181
+ * データを取得する
182
+ * サーバーはレコードバッチをストリームで返す
183
+ * プロトコルレベルではFlightDataと呼んでいる
184
+ * レコードバッチ
185
+ * データ全体のうちの一部のレコードの集まり
186
+
187
+ # image
188
+ # src = https://arrow.apache.org/img/20191014_flight_simple.png
189
+ # relative-width = 20
190
+ # align = right
191
+ # vertical-align = top
192
+ # relative-margin-right = -10
193
+
194
+ = Apache Arrow Flightが扱うデータ
195
+
196
+ * 型付きのテーブルデータ
197
+ * RDBMSで扱うようなデータ
198
+ * カラムごとに型がある
199
+ * すべてのレコードは同じカラム構成
200
+ * レコードバッチ
201
+ * テーブルデータ内の連続したレコードの集まり
202
+
203
+ # image
204
+ # src = images/record-batch.svg
205
+ # relative-width = 30
206
+ # align = right
207
+ # vertical-align = top
208
+ # relative-margin-right = -10
209
+
210
+ = レコードバッチストリーム
211
+
212
+ # image
213
+ # src = images/record-batch-stream.svg
214
+ # relative-width = 90
215
+
216
+ == スライドプロパティー
217
+
218
+ : enable-title-on-image
219
+ false
220
+
221
+ = なぜストリームが重要か
222
+
223
+ * 大量データを準備ができた順に処理できる
224
+ * 全部準備ができるまで待たなくてよい
225
+ * リソースを有効活用できる
226
+ * レコードバッチのストリームでいいの?
227
+ * レコードのストリーム方がいいんじゃない?
228
+
229
+ = ストリームの単位
230
+
231
+ * レコード
232
+ * レコード単位で処理できる
233
+ * データはレコード単位でまとめる
234
+ * レコードバッチ
235
+ * 複数レコードをまとめて処理できる
236
+ * データをカラム単位でまとめられる
237
+
238
+ # image
239
+ # src = images/columnar.svg
240
+ # relative-width = 30
241
+ # align = right
242
+ # vertical-align = top
243
+ # relative-margin-right = -10
244
+
245
+ = レコードバッチと処理
246
+
247
+ * 複数レコードをまとめて処理
248
+ * SIMDを活用すればレコード単位の処理より高速
249
+ * カラム単位でまとまったデータ
250
+ * 分析処理が高速
251
+ * ビッグデータ処理の多くは分析処理なはず
252
+
253
+ # image
254
+ # src = images/columnar.svg
255
+ # relative-width = 30
256
+ # align = right
257
+ # vertical-align = top
258
+ # relative-margin-right = -10
259
+
260
+ = 詳細
261
+
262
+ # image
263
+ # src = https://slide.rabbit-shocker.org/authors/kou/db-tech-showcase-online-2020/why-apache-arrow-format-is-fast.pdf
264
+ # relative-width = 80
265
+
266
+ (('tag:right'))
267
+ (('note:((<URL:https://slide.rabbit-shocker.org/authors/kou/db-tech-showcase-online-2020/>))'))
268
+
269
+ = 高速な分散システムの実現方法
270
+
271
+ * レコードバッチのストリーム\n
272
+ (('note:ここまでで説明したこと'))
273
+ * 待ち時間を減らせる
274
+ * 受け取ったデータを高速処理できる
275
+ * スケールアウト\n
276
+ (('note:これから説明すること'))
277
+ * データを複数ノードで分散処理
278
+ * それを効率的に扱う
279
+
280
+ = スケールアウト構成例
281
+
282
+ # image
283
+ # src = https://arrow.apache.org/img/20191014_flight_complex.png
284
+ # relative-height = 80
285
+
286
+ (('tag:right'))
287
+ (('note:((<URL:https://arrow.apache.org/img/20191014_flight_complex.png>))'))\n
288
+ (('note:Apache License 2.0 - © 2016-2021 The Apache Software Foundation'))
289
+
290
+ = ポイント1:ムダな転送を回避可能
291
+
292
+ * 多くの分散システム
293
+ * 「コーディネーター」経由で通信
294
+ * ノード→コーディネーター→クライアント
295
+ * Apache Arrow Flight
296
+ * 直接クライアントがデータ取得可能
297
+ * ノード→クライアント
298
+
299
+ # image
300
+ # src = https://arrow.apache.org/img/20191014_flight_complex.png
301
+ # relative-width = 20
302
+ # align = right
303
+ # vertical-align = top
304
+ # relative-margin-right = -10
305
+
306
+ = ポイント2:並列転送可能
307
+
308
+ * 同時に複数ノードからデータ取得可能
309
+ * データごとに異なるエンドポイントだから可能
310
+ * ストリームなので各データを随時処理可能
311
+
312
+ # image
313
+ # src = https://arrow.apache.org/img/20191014_flight_complex.png
314
+ # relative-width = 20
315
+ # align = right
316
+ # vertical-align = top
317
+ # relative-margin-right = -10
318
+
319
+ = 個々のデータ転送も速い
320
+
321
+ * 個々のデータ転送のボトルネック
322
+ * シリアライズ・デシリアライズ
323
+ * どうすれば速くできる?
324
+ * なにもしなきゃいいじゃん!
325
+
326
+ # image
327
+ # src = https://hannes.muehleisen.org/p852-muehleisen.pdf
328
+ # page = 2
329
+ # relative-width = 60
330
+ # relative-clip-x = 50
331
+ # relative-clip-height = 24
332
+ # align = right
333
+ # vertical-align = top
334
+ # relative-margin-top = -10
335
+ # relative-margin-right = -17
336
+
337
+ = なにもしない?
338
+
339
+ * そもそもなぜシリアライズが必要?
340
+ * メモリー上のデータの配置と\n
341
+ 通信時のデータの配置が違うから
342
+ * シリアライズしなくて済むには?
343
+ * メモリー上のデータの配置と\n
344
+ 通信時のデータの配置を同じにすればいい!
345
+
346
+ # image
347
+ # src = https://hannes.muehleisen.org/p852-muehleisen.pdf
348
+ # page = 2
349
+ # relative-width = 60
350
+ # relative-clip-x = 50
351
+ # relative-clip-height = 24
352
+ # align = right
353
+ # vertical-align = top
354
+ # relative-margin-top = -10
355
+ # relative-margin-right = -17
356
+
357
+ = Apache Arrowフォーマット
358
+
359
+ * シリアライズ不要フォーマット
360
+ * メモリー上で効率よくデータを扱える配置
361
+ * データ交換時も↑と同じ配置を使う
362
+ * Apache Arrow Flightが扱うデータは\n
363
+ Apache Arrowフォーマット
364
+ * 個々のデータ転送も速い!
365
+
366
+ # image
367
+ # src = https://hannes.muehleisen.org/p852-muehleisen.pdf
368
+ # page = 2
369
+ # relative-width = 60
370
+ # relative-clip-x = 50
371
+ # relative-clip-height = 24
372
+ # align = right
373
+ # vertical-align = top
374
+ # relative-margin-top = -10
375
+ # relative-margin-right = -17
376
+
377
+ = Apache Arrow Flightのまとめ
378
+
379
+ * 高速データ転送フレームワーク
380
+ * 並列転送対応
381
+ * ストリーム処理対応
382
+ * シリアライズ・デシリアライズがほぼ不要
383
+ * gRPCベース
384
+ * 既存のgRPCライブラリーでも接続可能
385
+ * 専用ライブラリーあり:C, C++, C#, Go, Java, Python, R, Ruby, Rust
386
+
387
+ = Apache Arrow Flightの利用事例
388
+
389
+ (('tag:xx-large'))
390
+ Apache Arrow Ballista
391
+
392
+ # image
393
+ # src = https://raw.githubusercontent.com/apache/arrow-datafusion/master/ballista/ui/scheduler/public/logo512.png
394
+ # relative-width = 20
395
+ # relative-margin-right = -10
396
+ # align = right
397
+
398
+ (('tag:right'))
399
+ (('note:Apache License 2.0 - © 2016-2021 The Apache Software Foundation'))
400
+
401
+ = Apache Arrow Ballista
402
+
403
+ * Rust実装の分散計算プラットフォーム
404
+ * データはApache Arrowフォーマット
405
+ * 通信はgRPCとApache Arrow Flight
406
+
407
+ # image
408
+ # src = https://raw.githubusercontent.com/apache/arrow-datafusion/master/ballista/ui/scheduler/public/logo512.png
409
+ # relative-width = 20
410
+ # relative-margin-right = -10
411
+ # align = right
412
+ # vertical-align = top
413
+
414
+ = アーキテクチャー
415
+
416
+ # image
417
+ # src = https://raw.githubusercontent.com/apache/arrow-datafusion/master/ballista/docs/images/query-execution.png
418
+ # relative-width = 80
419
+ # draw[0] = [rectangle, false, 0.3, 0.5, 0.15, 0.1, "#0041ab", {line_width: 3}]
420
+ # draw[1] = [rectangle, true, 0.05, 0.52, 0.15, 0.07, white]
421
+ # draw[2] = [text, Apache Arrow Flight, 0.05, 0.52, "#0041ab", {size: 25}]
422
+ # draw[3] = [rectangle, false, 0.295, 0.75, 0.15, 0.1, "#0041ab", {line_width: 3}]
423
+ # draw[4] = [rectangle, true, 0.05, 0.76, 0.15, 0.07, white]
424
+ # draw[5] = [text, Apache Arrow Flight, 0.05, 0.76, "#0041ab", {size: 25}]
425
+
426
+ (('tag:right'))
427
+ (('note:Apache License 2.0 - © 2016-2021 The Apache Software Foundation'))
428
+
429
+ = Apache Arrow Ballistaでの使い方
430
+
431
+ * DoGetだけ使っている
432
+ * 処理済みのパーティションを受け取る
433
+ * 大量データになりうる
434
+ * その他の通信は素のgRPC
435
+ * 各Executorへの処理の依頼など
436
+ * 大量データにはならない
437
+
438
+ # image
439
+ # src = https://raw.githubusercontent.com/apache/arrow-datafusion/master/ballista/docs/images/query-execution.png
440
+ # relative-width = 20
441
+ # relative-margin-right = -10
442
+ # align = right
443
+ # vertical-align = top
444
+
445
+ = さらにApache Arrow Flight
446
+
447
+ * 利用可能なリクエスト
448
+ * ミドルウェア
449
+ * 将来の展望
450
+
451
+ = 利用可能なリクエスト1
452
+
453
+ * Handshake
454
+ * 認証
455
+ * ListFlights
456
+ * 利用可能なデータの取得方法一覧を取得
457
+ * GetSchema/DoGetなどで使える
458
+ * GetFlightInfo
459
+ * 指定したデータの取得方法を取得
460
+ * GetSchema/DoGetなどで使える
461
+
462
+ = 利用可能なリクエスト2
463
+
464
+ * GetSchema
465
+ * 指定したデータのスキーマを取得
466
+ * DoGet:指定したデータを取得
467
+ * DoPut:データを送信
468
+ * DoExchange:データを送受信
469
+
470
+ = 利用可能なリクエスト3
471
+
472
+ * DoAction
473
+ * 任意の処理を実行
474
+ * 普通のRPCなので素のgRPCでも十分
475
+ * ListActions
476
+ * 利用可能なアクション一覧を取得
477
+
478
+ = ミドルウェア
479
+
480
+ * プラグインみたいなもの
481
+ * サーバー側・クライアント側両方あり
482
+ * 利用例
483
+ * 認証機能
484
+ * 分散トレーシング機能
485
+
486
+ = 将来の展望1
487
+
488
+ * gRPC以外もサポートするかも
489
+ * (('note:((<URL:https://issues.apache.org/jira/browse/ARROW-13889>))'))
490
+ * メーリングリストで議論中
491
+ * 候補:UCX\n
492
+ (('note:((<URL:https://openucx.org/documentation/>))'))
493
+ * RDMA/GPUなどハードウェアも活用した高速通信
494
+
495
+ = 将来の展望2
496
+
497
+ * Apache Arrow Flight SQLの追加
498
+ * (('note:((<URL:https://issues.apache.org/jira/browse/ARROW-9825>))'))
499
+ * Apache Arrow Flight経由で各種RDBMSとやりとり
500
+ * GetFlightInfoでSQL送信
501
+ * DoGetで結果を受信\n
502
+ * (('note:RDBMSとFlightアダプターの間のシリアライズがボトルネックになりそうな気がするんだけど、RDBMSのプロセス内にFlightアダプターを実装するのかな。。。'))
503
+
504
+ = まとめ
505
+
506
+ * 大量データのやりとりは\n
507
+ シリアライズ・デシリアライズが遅い
508
+ * Apache Arrow Flightでそのコストをなくせる
509
+ * さらに高速に扱う仕組みもある
510
+ * 並列転送やストリーム処理
511
+ * 将来:UCXやFlight SQL
512
+
513
+ = 次のステップ
514
+
515
+ * もっと詳しく知りたくなったから\n
516
+ イベント・社内・…で紹介して!
517
+ * ((<URL:https://www.clear-code.com/contact/>))
518
+ * アンケートに答えてね!
519
+ * ⇗のQRコードあるいは⇓\n
520
+ (('note:((<URL:https://www.clear-code.com/surveys/db-tech-showcase-2021.html>))'))
521
+
522
+ # image
523
+ # src = images/survey-url.svg
524
+ # relative-width = 20
525
+ # relative-margin-right = -10
526
+ # align = right
527
+ # vertical-align = top
528
+
data/config.yaml ADDED
@@ -0,0 +1,28 @@
1
+ ---
2
+ id: db-tech-showcase-2021
3
+ base_name: apache-arrow-flight
4
+ tags:
5
+ - rabbit
6
+ - dbts2021
7
+ - apache_arrow
8
+ presentation_date: 2021-11-17
9
+ presentation_start_time:
10
+ presentation_end_time:
11
+ version: 2021.11.17.0
12
+ licenses:
13
+ - CC-BY-SA-4.0
14
+ - Apache-2.0
15
+ slideshare_id: db-tech-showcase-2021
16
+ speaker_deck_id:
17
+ vimeo_id:
18
+ youtube_id:
19
+ width: 1920
20
+ height: 1080
21
+ source_code_uri: https://gitlab.com/ktou/rabbit-slide-kou-db-tech-showcase-2021
22
+ author:
23
+ markup_language: :rd
24
+ name: 須藤功平
25
+ email: kou@clear-code.com
26
+ rubygems_user: kou
27
+ slideshare_user: kou
28
+ speaker_deck_user: