rabbit-slide-kou-apache-arrow-tokyo-meetup-2019 2019.12.11.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: b0bbf924ec8f12659502b6b4b4931691530d489efe10a40d33cf9cadbb5162ee
4
+ data.tar.gz: 31de59aaef260dc8e7597536eb3827e0929be1a96538d135d97e595d72f9f661
5
+ SHA512:
6
+ metadata.gz: 2514255bea8bd1702508f1e2a1ead9ea18cd397fed7f349881b5092a31c741aac4bb49e78a3831a75d8fd92829c055e9208ad6ffb7645af7e0d113f5a3cccbb6
7
+ data.tar.gz: 0d9af4b9f23dd7e8f8336be4430d609ad6c6d12b2f5ea6ccee70adfc77165dc5fa7b90363998cb6898d8c015fe73f149603a8ec8b70263bc205930ae51354343
data/.rabbit ADDED
@@ -0,0 +1 @@
1
+ --size 800,450 apache-arrow-2019.rab
data/README.rd ADDED
@@ -0,0 +1,44 @@
1
+ = Apache Arrow 2019
2
+
3
+ 2019年12月時点のApache Arrowの最新情報を紹介します。
4
+
5
+ == ライセンス
6
+
7
+ === スライド
8
+
9
+ CC BY-SA 4.0
10
+
11
+ 原著作者名は以下の通りです。
12
+
13
+ * 須藤功平(またはKouhei Sutou)
14
+
15
+ === 画像
16
+
17
+ ==== クリアコードのロゴ
18
+
19
+ CC BY-SA 4.0
20
+
21
+ 原著作者:株式会社クリアコード
22
+
23
+ ページヘッダーで使っています。
24
+
25
+ == 作者向け
26
+
27
+ === 表示
28
+
29
+ rake
30
+
31
+ === 公開
32
+
33
+ rake publish
34
+
35
+ == 閲覧者向け
36
+
37
+ === インストール
38
+
39
+ gem install rabbit-slide--apache-arrow-tokyo-meetup-2019
40
+
41
+ === 表示
42
+
43
+ rabbit rabbit-slide--apache-arrow-tokyo-meetup-2019.gem
44
+
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("doc/**/*.*")
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,435 @@
1
+ = Apache Arrow 2019\n#ArrowTokyo
2
+
3
+ : author
4
+ 須藤功平
5
+ : institution
6
+ 株式会社クリアコード
7
+ : content-source
8
+ Apache Arrow東京ミートアップ2019
9
+ : date
10
+ 2019-12-11
11
+ : start-time
12
+ 2019-12-11T19:05:00+09:00
13
+ : end-time
14
+ 2019-12-11T19:20:00+09:00
15
+ : theme
16
+ .
17
+
18
+ = Apache Arrowと私
19
+
20
+ * 2016-12-21に最初のコミット
21
+ * 2017-05-10にコミッター
22
+ * 2017-09-15にPMCメンバー
23
+ * 2018-12-06現在コミット数3位(224人中)
24
+ * 2019-12-09現在コミット数2位(348人中)
25
+
26
+ = 今日の目的
27
+
28
+ Apache Arrow\n
29
+ ユーザーを\n
30
+ 増やす
31
+
32
+ = 今日のチャレンジ
33
+
34
+ (('tag:center'))
35
+ (('tag:margin-bottom * 5'))
36
+ こんな人たちもフォローしてユーザーに!
37
+
38
+ * 使ってみたい!
39
+ * でも、自分たちだけじゃ不安…
40
+
41
+ = 対策:みんなで力を合わせる!
42
+
43
+ (('tag:center'))
44
+ (('tag:margin-bottom'))
45
+ こんな布陣ならいけるかも!なら相談して!
46
+
47
+ * クリアコード:技術提供(('note:(すごく詳しいよ!)'))
48
+ * A社:データ提供(('note:(うちのデータでApache Arrowは効くかな?)'))
49
+ * B社:インフラ提供(('note:(どんな構成が適切かな?)'))
50
+ * C社:お金・人的リソース提供(('note:(知見を貯めたい)'))
51
+ * ...
52
+
53
+ = Apache Arrow
54
+
55
+ 各種言語で使える\n
56
+ インメモリー\n
57
+ データ処理\n
58
+ プラットフォーム
59
+
60
+ = 実現すること
61
+
62
+ データ処理の効率化\n
63
+ (大量データが対象)
64
+
65
+ = 効率化のポイント
66
+
67
+ * 速度
68
+ * 速いほど効率的
69
+ * 実装コスト
70
+ * 低いほど効率的
71
+
72
+ = 速度向上方法
73
+
74
+ * 遅い部分を速く
75
+ * 高速化できる部分を最適化
76
+
77
+ = 遅い部分
78
+
79
+ データ交換
80
+
81
+ = データ交換
82
+
83
+ * データ処理ツール間で必要
84
+ * データ処理システム
85
+ * 複数ツールを組み合わせて実現
86
+ * データ処理システムではデータ交換が必須
87
+
88
+ = データ処理システム例
89
+
90
+ # img
91
+ # src = images/data-processing-system.svg
92
+ # relative_width = 100
93
+
94
+ == スライドプロパティー
95
+
96
+ : enable-title-on-image
97
+ false
98
+
99
+ = データ交換処理
100
+
101
+ (1) シリアライズ\n
102
+ (('note:データをバイト列へ変換'))
103
+ (2) 転送\n
104
+ (('note:バイト列を別ツールに渡す'))
105
+ (3) デシリアライズ\n
106
+ (('note:バイト列からデータを復元'))
107
+
108
+ = データ交換処理:必要なリソース
109
+
110
+ (1) シリアライズ:CPU
111
+ (2) 転送:I/O(('note:(ネットワーク・ストレージ・メモリー)'))
112
+ (3) デシリアライズ:CPU
113
+
114
+ = データ交換の高速化
115
+
116
+ * データ量が増加すると\n
117
+ シリアライズ・デシリアライズ速度が劣化
118
+ * 速度劣化を抑えられれば高速化可能
119
+
120
+ = Apache Arrowのアプローチ
121
+
122
+ (('tag:center'))
123
+ (('tag:margin-bottom'))
124
+ なにもしなければ最速!
125
+
126
+ * データフォーマットを定義
127
+ * ほぼパースいらずなので速い!
128
+ * シリアライズ・デシリアライズが高速化!
129
+ * このフォーマットの普及
130
+ * 各種言語で読み書き処理を実装
131
+ * みんなが使えばフォーマット変換いらずで速い!
132
+
133
+ = Apache Sparkでの高速化事例
134
+
135
+ * Spark⇔PySpark間でデータ交換
136
+ * ((<Apache Arrowを使うことで数十倍レベルの高速化|URL:https://arrow.apache.org/blog/2017/07/26/spark-arrow/>))
137
+ * Spark⇔R間でデータ交換
138
+ * ((<sparklyrでは10倍以上の高速化|URL:https://arrow.apache.org/blog/2019/01/25/r-spark-improvements/>))
139
+ * Spark 3.0からはSparkRでも使える
140
+
141
+ (('tag:center'))
142
+ Spark関連は山室さんが紹介!
143
+
144
+ = Apache Arrowのさらなるアプローチ
145
+
146
+ (1) シリアライズ\n
147
+ (('note:データをバイト列へ変換'))
148
+ (2) 転送←ここも高速化\n
149
+ (('note:バイト列を別ツールに渡す'))
150
+ (3) デシリアライズ\n
151
+ (('note:バイト列からデータを復元'))
152
+
153
+ = 同一ホスト時のデータ転送の高速化
154
+
155
+ * メモリーマップ機能
156
+ * ファイルの内容をメモリー上のデータのように\n
157
+ アクセスできる機能
158
+ * (({read}))せずにデータを使える(データコピー不要)
159
+ * パース不要+メモリーマップ
160
+ * デシリアライズ時にメモリー確保不要
161
+ * 「転送」コスト削減
162
+
163
+ = 複数ホスト時のデータ転送の高速化
164
+
165
+ * RPCフレームワークを提供
166
+ * Apache Arrow Flight
167
+ * gRPCベース
168
+ * 詳細:((<Apache Arrow Flightの紹介|URL:https://arrow.apache.org/blog/2019/10/13/introducing-arrow-flight-japanese/>))
169
+
170
+ = 効率的なデータ交換処理のまとめ
171
+
172
+ * 高速なデータフォーマット
173
+ * 効率的なデータ交換処理
174
+ * ((*同一ホスト内*))での高速なデータ交換
175
+ * ((*異なるホスト間*))での高速なデータフレーム交換
176
+
177
+ = 速度向上方法
178
+
179
+ * 遅い部分を速く
180
+ * ((*データ交換*))を速く
181
+ * 高速化できる部分を最適化
182
+
183
+ = 高速化できる部分
184
+
185
+ 大量データの計算
186
+
187
+ = 大量データの計算の高速化
188
+
189
+ * 各データの計算を高速化
190
+ * まとまったデータの計算を高速化
191
+
192
+ = 各データの計算の高速化
193
+
194
+ * データを局所化
195
+ * CPUのキャッシュメモリーを活用できる
196
+ * 局所化に必要な知識
197
+ * データの使われ方
198
+ * 局所化:一緒に使うデータを近くに置く
199
+
200
+ = 想定ユースケース
201
+
202
+ * OLAP(('note:(OnLine Analytical Processing)'))
203
+ * データから探索的に知見を探し出すような処理
204
+ * 列単位の処理が多い
205
+ * 集計処理・グループ化・ソート…
206
+
207
+ = OLAP向きのデータの持ち方
208
+
209
+ # img
210
+ # src = images/columnar.svg
211
+ # relative_height = 100
212
+
213
+ == スライドプロパティー
214
+
215
+ : enable-title-on-image
216
+ false
217
+
218
+ = まとまったデータの計算を高速化
219
+
220
+ * SIMDを活用\n
221
+ (('note:Single Instruction Multiple Data'))
222
+ * スレッドを活用
223
+ * ストリームで処理
224
+
225
+ = SIMDを活用
226
+
227
+ * CPU:データをまとめてアライン\n
228
+ (('note:アライン:データの境界を64の倍数とかに揃える'))
229
+ * GPUの活用
230
+ * 条件分岐をなくす
231
+ * null/NA用の値は用意せずビットマップで表現\n
232
+ (('note:((<"Is it time to stop using sentinel values for null / NA values?"|URL:http://wesmckinney.com/blog/bitmaps-vs-sentinel-values/>))'))
233
+
234
+ = 条件分岐とnull
235
+
236
+ # img
237
+ # src = images/simd-null.svg
238
+ # relative_height = 100
239
+
240
+ == スライドプロパティー
241
+
242
+ : enable-title-on-image
243
+ false
244
+
245
+ = スレッド活用時のポイント
246
+
247
+ * 競合リソースを作らない
248
+ * リソースロックのオーバーヘッドで遅くなりがち
249
+ * アプローチ
250
+ * リソースを参照するだけ
251
+ * 各スレッドにコピー
252
+
253
+ = Apache Arrowとスレッド
254
+
255
+ * データはリードオンリー
256
+ * スレッド間でオーバーヘッドなしで共有可能
257
+ * データコピーは極力避けたい
258
+ * データ交換時もスレッド活用時も
259
+
260
+ = ストリームで処理
261
+
262
+ * CPUを遊ばせない
263
+ * データ読み込み中にすでに読んだデータを処理
264
+ * C++実装:詳細は村田さんが紹介!
265
+ * ((<Apache Arrow C++ Datasets|URL:https://docs.google.com/document/d/1bVhzifD38qDypnSjtf8exvpP3sSB5x_Kw9m-n66FB2c/edit?usp=sharing>)):データ読み込み
266
+ * ((<Apache Arrow C++ Query Engine|URL:https://docs.google.com/document/d/10RoUZmiMQRi_J1FcPeVAUAMJ6d_ZuiEbaM2Y33sNPu4/edit?usp=sharing>)):データ処理
267
+ * ((<Apache Arrow C++ Data Frame|URL:https://docs.google.com/document/d/1XHe_j87n2VHGzEbnLe786GHbbcbrzbjgG8D0IXWAeHg/edit?usp=sharing>)):高レベルAPI
268
+ * Gandiva:高速な式コンパイラー
269
+
270
+ = 高速化のまとめ
271
+
272
+ * 速度
273
+ * 遅い処理(((*データ交換処理*)))を高速化
274
+ * 速くできる処理(((*大量データの計算*)))を最適化
275
+ * 実装コスト
276
+ * 低いほど効率的
277
+
278
+ = 実装コストを下げる
279
+
280
+ * 共通で使いそうな機能をライブラリー化
281
+ * メリットを受ける人たちみんなで協力して開発
282
+ * 最適化もがんばる
283
+ * Apache Arrowの実装コストは下がらない
284
+ * Apache Arrowを使うツールの実装コストが下がる\n
285
+ (('note:実装コストが下がる:ツール開発者のメリット'))
286
+
287
+ = 共通で使いそうな機能
288
+
289
+ * 高速なデータフォーマット(説明済み)
290
+ * 効率的なデータ交換処理(説明済み)
291
+ * 高速なデータ処理ロジック(説明済み)
292
+ * フォーマット変換機能
293
+
294
+ = 実装コストのまとめ
295
+
296
+ * 速度
297
+ * 遅い処理(データ交換処理)を高速化
298
+ * 速くできる処理(大量データの計算)を最適化
299
+ * 実装コスト
300
+ * 共通で使いそうな機能を((*ライブラリー化*))
301
+ * ((*みんなで協力*))して開発
302
+
303
+ = フォーマット変換機能
304
+
305
+ * Apache Arrowフォーマット
306
+ * インメモリー用のフォーマット
307
+ * データ交換・処理向きで永続化向きではない
308
+ * 永続化されたデータを使う場合
309
+ * 永続化に適したフォーマットで保存
310
+ * 読み込み時にApache Arrowに変換して\n
311
+ インメモリーでの処理にApache Arrowを使う
312
+
313
+ = 対応フォーマット:CSV
314
+
315
+ * よく使われているフォーマット
316
+ * 亜種が多くてパースが大変
317
+ * C++実装はすごく速い!
318
+ * ((*CSV読み込みの高速化でも使える!*))
319
+
320
+ = 対応フォーマット:Apache Parquet
321
+
322
+ * 永続化用フォーマット
323
+ * 列単位でデータ保存:Apache Arrowと相性がよい
324
+ * 小さい
325
+ * 列単位の圧縮をサポート
326
+ * 速い
327
+ * 必要な部分のみ読み込める(('note:(I/Oが減る)'))
328
+
329
+ = 対応フォーマット:Apache ORC
330
+
331
+ * 永続化用フォーマット
332
+ * 列単位でデータ保存:Apache Arrowと相性がよい
333
+ * Apache Parquetに似ている
334
+ * Apache Hive用に開発
335
+ * 今はHadoopやSparkでも使える
336
+
337
+ = 対応フォーマット:Feather
338
+
339
+ * 永続化用フォーマット
340
+ * 列単位でデータ保存:Apache Arrowと相性がよい
341
+ * データフレームを保存
342
+ * PythonとR間のデータ交換用
343
+ * ((*今は非推奨!*))
344
+ * Apache Arrowを使ってね
345
+
346
+ = 豆知識:Feather 2
347
+
348
+ * 名前を再利用するかも
349
+ * ((<[ARROW-5512] Feather V2|URL:https://issues.apache.org/jira/browse/ARROW-5510>))
350
+ * Feather 2: Apche Arrow IPC File Format
351
+ * Apache Arrow IPC Format:FileまたはStreaming
352
+ * Fileの方をFeather 2と呼んじゃう?
353
+
354
+ = 対応フォーマット:JSON
355
+
356
+ * よく使われているフォーマット
357
+ * これまではテストのために内部使用
358
+ * 正式機能になった
359
+
360
+ = フォーマット変換機能まとめ
361
+
362
+ * 高速なデータフォーマット
363
+ * 効率的なデータ交換処理
364
+ * 高速なデータ処理ロジック
365
+ * フォーマット変換機能
366
+ * ((*永続化データ*))を処理するために必要
367
+
368
+ = 対応言語
369
+
370
+ * C, C#, C++, Go, Java, JavaScript, Lua
371
+ * MATLAB, Python, R, Ruby, Rust
372
+
373
+ 非公式実装:
374
+
375
+ * Julia (((<Arrow.jl|URL:https://github.com/ExpandingMan/Arrow.jl>)))
376
+
377
+ = 実装方法
378
+
379
+ * ネイティブ実装
380
+ * C#, C++, Go, Java, JavaScript, Julia, Rust
381
+ * その言語になじむ
382
+ * C++バインディング
383
+ * C, Lua, MATLAB, Python, R, Ruby\n
384
+ R関連は湯谷さんが紹介!
385
+ * ホスト言語が遅めでも速い実装になる
386
+
387
+ = 各言語のデータ交換対応状況
388
+
389
+ * 基本的な型はすべての言語で対応済み
390
+ * すでに((*データ交換用途に使える*))
391
+ * 複雑な型は未対応の言語あり\n
392
+ (('note:List, Structなど'))
393
+ * 例:C#のList実装は((<網屋|URL:https://www.amiya.co.jp/>))の((<橋田さん|URL:https://github.com/HashidaTKS>))が改良中
394
+
395
+ = 各言語のデータ処理対応状況
396
+
397
+ * データの高速な計算は一部言語で対応
398
+ * C++ベース、Java、Rust(DataFusion)、Go
399
+ * フォーマット変換も各言語の対応は様々
400
+
401
+ = ユースケース
402
+
403
+ * PostgreSQLの高速化
404
+ * 海外さんがPG-Stromの事例を紹介!
405
+ * TensorFlow・BitQuery Storage APIが\n
406
+ Apache Arrowをサポート
407
+ * 石崎さんと漆山さんが紹介!
408
+ * FluentdでログデータをApache Arrow化
409
+
410
+ = 今日の目的
411
+
412
+ Apache Arrow\n
413
+ ユーザーを\n
414
+ 増やす
415
+
416
+ = 今日のチャレンジ
417
+
418
+ (('tag:center'))
419
+ (('tag:margin-bottom * 5'))
420
+ こんな人たちもフォローしてユーザーに!
421
+
422
+ * 使ってみたい!
423
+ * でも、自分たちだけじゃ不安…
424
+
425
+ = 対策:みんなで力を合わせる!
426
+
427
+ (('tag:center'))
428
+ (('tag:margin-bottom'))
429
+ こんな布陣ならいけるかも!なら相談して!
430
+
431
+ * クリアコード:技術提供(('note:(すごく詳しいよ!)'))
432
+ * A社:データ提供(('note:(うちのデータでApache Arrowは効くかな?)'))
433
+ * B社:インフラ提供(('note:(どんな構成が適切かな?)'))
434
+ * C社:お金・人的リソース提供(('note:(知見を貯めたい)'))
435
+ * ...