Rabbit Slide Show

Apache Arrow Flight – ビッグデータ用高速データ転送フレームワーク

2021-11-17

Description

ビッグデータは現実的な時間で処理できてこそ活きます。処理時間はデータ処理アルゴリズムの計算量だけで決まり…ません!適切なノードにデータを配置しないとそもそもデータ処理できませんが、大量ノードが協調するビッグデータ処理ではデータ移動コストを無視できません。Apache Arrow Flightを使えばネットワーク帯域限界まで高速にデータ転送できます。 このセッションではApache Arrow Flightの仕組みおよび利用例として分散計算プラットフォームApache Arrow Ballistaを紹介します。

Text

Page: 1

Apache Arrow Flight
ビッグデータ用高速データ転送フレームワーク
須藤功平
株式会社クリアコード
db tech showcase 2021
2021-11-17
Apache Arrow Flight - ビッグデータ用高速データ転送フレームワーク
Powered by Rabbit 3.0.2

Page: 2

モチベーション
ビッグデータを
処理したい!
Apache Arrow Flight - ビッグデータ用高速データ転送フレームワーク
Powered by Rabbit 3.0.2

Page: 3

ビッグデータ処理に必要なもの
✓ 大量データ:データがないと始まらない!
✓ 速度:速くないと処理しきれない!
Apache Arrow Flight - ビッグデータ用高速データ転送フレームワーク
Powered by Rabbit 3.0.2

Page: 4

大量データの収集に必要なもの
✓ データ収集ツール
✓ 例:ログ:Fluentd/Fluent Bit
✓ ストレージ
✓ 例:Amazon S3
✓ 効率的なデータフォーマット
✓ トレードオフ:空間効率と時間効率
✓ 例:CSVよりApache Parquet
Apache Arrow Flight - ビッグデータ用高速データ転送フレームワーク
Powered by Rabbit 3.0.2

Page: 5

高速処理に必要なもの
✓ 高速な分散システム
✓ 1台では処理しきれない
✓ 高速なアルゴリズムとその実装
✓ 個々の処理が速くなると全体も速くなる
Apache Arrow Flight - ビッグデータ用高速データ転送フレームワーク
Powered by Rabbit 3.0.2

Page: 6

今日注目すること
高速な分散システム
Apache Arrow Flight - ビッグデータ用高速データ転送フレームワーク
Powered by Rabbit 3.0.2

Page: 7

高速な分散システムに必要なもの
✓ 効率のよいタスク管理
✓ より速く処理が終わるようなリソース配分
✓ 効率のよいデータ転送
✓ ノード間でのデータ交換コストは無視できない
Apache Arrow Flight - ビッグデータ用高速データ転送フレームワーク
Powered by Rabbit 3.0.2

Page: 8

大量データの交換コスト
Don’t Hold My Data Hostage –
A Case For Client Protocol Redesign
Mark Raasveldt
Hannes Mühleisen
Centrum Wiskunde & Informatica
Amsterdam, The Netherlands Centrum Wiskunde & Informatica
Amsterdam, The Netherlands
m.raasveldt@cwi.nl hannes@cwi.nl
Netcat (10.25s)
101.3
MySQL
Operation
Connection
Query Execution
RSS + Transfer
170.9
DB2
189.6
DBMS X
202
PostgreSQL
221.2
MonetDB
391.3
MySQL+C
629.9
Hive
686.5
MongoDB
0
200
400
600
Wall clock time (s)
Figure 1: Wall clock time for retrieving the lineitem
Figure 2: Communication between a client and a
table (SF10) over a loopback connection.
The
server
dashed line is the wall clock time for netcat to trans-
fer a CSV of the data.
https://hannes.muehleisen.org/p852-muehleisen.pdf
Apache Arrow Flight - ビッグデータ用高速データ転送フレームワーク
Powered by Rabbit 3.0.2

Page: 9

大量データの交換コスト
✓ ボトルネックになりやすい
a. シリアライズ・デシリアライズ
b. ネットワーク帯域
✓ 目指すところ
✓ メイン処理がボトルネック
(メイン処理以外が十分速い)
Apache Arrow Flight - ビッグデータ用高速データ転送フレームワーク
Powered by Rabbit 3.0.2

Page: 10

解決策
Apache Arrow Flight
Apache Arrow Flight - ビッグデータ用高速データ転送フレームワーク
Powered by Rabbit 3.0.2

Page: 11

Apache Arrow Flightと私
✓ Apache ArrowプロジェクトのPMCメンバー
✓ Apache Arrow Flightも開発しているプロジェクト
✓ PMC:プロジェクト管理委員会
✓ コミット数2位
Apache Arrow Flight - ビッグデータ用高速データ転送フレームワーク
Powered by Rabbit 3.0.2

Page: 12

Apache Arrow Flight
✓ gRPCベースのデータ転送フレームワーク
✓ ポイント
✓ 並列転送対応
✓ 「効率のよいタスク管理」に有用
✓ ストリーム処理対応
✓ 「効率のよいタスク管理」に有用
✓ シリアライズ・デシリアライズがほぼ不要
✓ 「効率のよいデータ転送」に有用
Apache Arrow Flight - ビッグデータ用高速データ転送フレームワーク
Powered by Rabbit 3.0.2

Page: 13

簡単な使い方
https://arrow.apache.org/img/20191014_flight_simple.png
Apache License 2.0 - © 2016-2021 The Apache Software Foundation
Apache Arrow Flight - ビッグデータ用高速データ転送フレームワーク
Powered by Rabbit 3.0.2

Page: 14

GetFlightInfo
✓ クライアント→サーバー
✓ データの取得方法を教えてもらう
✓ サーバーはFlightInfoを返す
✓ FlightInfoの中身
✓ メタデータ:スキーマ・総レコード数…
✓ 複数エンドポイント:
データは複数ヶ所に分散しているかもしれない!
Apache Arrow Flight - ビッグデータ用高速データ転送フレームワーク
Powered by Rabbit 3.0.2

Page: 15

DoGet
✓ クライアント→サーバー
✓ データを取得する
✓ サーバーはレコードバッチをストリームで返す
✓ プロトコルレベルではFlightDataと呼んでいる
✓ レコードバッチ
✓ データ全体のうちの一部のレコードの集まり
Apache Arrow Flight - ビッグデータ用高速データ転送フレームワーク
Powered by Rabbit 3.0.2

Page: 16

Apache Arrow Flightが扱うデータ
カラム1
カラム2
カラム3
レコード1
レコード
バッチ1
レコード2
✓ 型付きのテーブルデータ
レコード3
レコード4
レコード
バッチ2
レコード5
✓ RDBMSで扱うようなデータ
✓ カラムごとに型がある
✓ すべてのレコードは同じカラム構成
✓ レコードバッチ
✓ テーブルデータ内の連続したレコードの集まり
Apache Arrow Flight - ビッグデータ用高速データ転送フレームワーク
Powered by Rabbit 3.0.2

Page: 17

レコードバッチストリーム
クライアント
サーバー
レコード
バッチ1
レコード
バッチ2
レコード1 レコード4
レコード2 レコード5
レコード3
Apache Arrow Flight - ビッグデータ用高速データ転送フレームワーク
Powered by Rabbit 3.0.2

Page: 18

なぜストリームが重要か
✓ 大量データを準備ができた順に処理できる
✓ 全部準備ができるまで待たなくてよい
✓ リソースを有効活用できる
✓ レコードバッチのストリームでいいの?
✓ レコードのストリーム方がいいんじゃない?
Apache Arrow Flight - ビッグデータ用高速データ転送フレームワーク
Powered by Rabbit 3.0.2

Page: 19

ストリームの単位
✓ レコード
b
c
2 値 値 値
3 値 値 値
レコード
バッチ
単位
レコード
単位
カラム
a
1 値 値 値
カラム
a
b
c
1 値 値 値
2 値 値 値
3 値 値 値
✓ レコード単位で処理できる
✓ データはレコード単位でまとめる
✓ レコードバッチ
✓ 複数レコードをまとめて処理できる
✓ データをカラム単位でまとめられる
Apache Arrow Flight - ビッグデータ用高速データ転送フレームワーク
Powered by Rabbit 3.0.2

Page: 20

レコードバッチと処理
✓ 複数レコードをまとめて処理
b
c
レコード
バッチ
単位
レコード
単位
カラム
a
1 値 値 値
2 値 値 値
3 値 値 値
カラム
a
b
c
1 値 値 値
2 値 値 値
3 値 値 値
✓ SIMDを活用すればレコード単位の処理より高速
✓ カラム単位でまとまったデータ
✓ 分析処理が高速
✓ ビッグデータ処理の多くは分析処理なはず
Apache Arrow Flight - ビッグデータ用高速データ転送フレームワーク
Powered by Rabbit 3.0.2

Page: 21

詳細
Apache Arrowフォーマットは
なぜ速いのか
須藤功平
株式会社クリアコード
db tech showcase ONLINE 2020
2020-12-08
Apache Arrowフォーマットはなぜ速いのか
Powered by Rabbit 3.0.1
https://slide.rabbit-shocker.org/authors/kou/db-tech-showcase-online-2020/
Apache Arrow Flight - ビッグデータ用高速データ転送フレームワーク
Powered by Rabbit 3.0.2

Page: 22

高速な分散システムの実現方法
✓ レコードバッチのストリーム
ここまでで説明したこと
✓ 待ち時間を減らせる
✓ 受け取ったデータを高速処理できる
✓ スケールアウト
これから説明すること
✓ データを複数ノードで分散処理
✓ それを効率的に扱う
Apache Arrow Flight - ビッグデータ用高速データ転送フレームワーク
Powered by Rabbit 3.0.2

Page: 23

スケールアウト構成例
https://arrow.apache.org/img/20191014_flight_complex.png
Apache License 2.0 - © 2016-2021 The Apache Software Foundation
Apache Arrow Flight - ビッグデータ用高速データ転送フレームワーク
Powered by Rabbit 3.0.2

Page: 24

ポイント1:ムダな転送を回避可能
✓ 多くの分散システム
✓ 「コーディネーター」経由で通信
✓ ノード→コーディネーター→クライアント
✓ Apache Arrow Flight
✓ 直接クライアントがデータ取得可能
✓ ノード→クライアント
Apache Arrow Flight - ビッグデータ用高速データ転送フレームワーク
Powered by Rabbit 3.0.2

Page: 25

ポイント2:並列転送可能
✓ 同時に複数ノードからデータ取得可能
✓ データごとに異なるエンドポイントだから可能
✓ ストリームなので各データを随時処理可能
Apache Arrow Flight - ビッグデータ用高速データ転送フレームワーク
Powered by Rabbit 3.0.2

Page: 26

個々のデータ転送も速い
✓ 個々のデータ転送のボトルネック
✓ シリアライズ・デシリアライズ
✓ どうすれば速くできる?
✓ なにもしなきゃいいじゃん!
Apache Arrow Flight - ビッグデータ用高速データ転送フレームワーク
Powered by Rabbit 3.0.2

Page: 27

なにもしない?
✓ そもそもなぜシリアライズが必要?
✓ メモリー上のデータの配置と
通信時のデータの配置が違うから
✓ シリアライズしなくて済むには?
✓ メモリー上のデータの配置と
通信時のデータの配置を同じにすればいい!
Apache Arrow Flight - ビッグデータ用高速データ転送フレームワーク
Powered by Rabbit 3.0.2

Page: 28

Apache Arrowフォーマット
✓ シリアライズ不要フォーマット
✓ メモリー上で効率よくデータを扱える配置
✓ データ交換時も↑と同じ配置を使う
✓ Apache Arrow Flightが扱うデータは
Apache Arrowフォーマット
✓ 個々のデータ転送も速い!
Apache Arrow Flight - ビッグデータ用高速データ転送フレームワーク
Powered by Rabbit 3.0.2

Page: 29

Apache Arrow Flightのまとめ
✓ 高速データ転送フレームワーク
✓ 並列転送対応
✓ ストリーム処理対応
✓ シリアライズ・デシリアライズがほぼ不要
✓ gRPCベース
✓ 既存のgRPCライブラリーでも接続可能
✓ 専用ライブラリーあり:C, C++, C#, Go, Java,
Python, R, Ruby, Rust
Apache Arrow Flight - ビッグデータ用高速データ転送フレームワーク
Powered by Rabbit 3.0.2

Page: 30

Apache Arrow Flightの利用事例
Apache Arrow
Ballista
Apache License 2.0 - © 2016-2021 The Apache Software Foundation
Apache Arrow Flight - ビッグデータ用高速データ転送フレームワーク
Powered by Rabbit 3.0.2

Page: 31

Apache Arrow Ballista
✓ Rust実装の分散計算プラットフォーム
✓ データはApache Arrowフォーマット
✓ 通信はgRPCとApache Arrow Flight
Apache Arrow Flight - ビッグデータ用高速データ転送フレームワーク
Powered by Rabbit 3.0.2

Page: 32

アーキテクチャー
Apache Arrow Flight
Apache Arrow Flight
Apache License 2.0 - © 2016-2021 The Apache Software Foundation
Apache Arrow Flight - ビッグデータ用高速データ転送フレームワーク
Powered by Rabbit 3.0.2

Page: 33

Apache Arrow Ballistaでの使い方
✓ DoGetだけ使っている
✓ 処理済みのパーティションを受け取る
✓ 大量データになりうる
✓ その他の通信は素のgRPC
✓ 各Executorへの処理の依頼など
✓ 大量データにはならない
Apache Arrow Flight - ビッグデータ用高速データ転送フレームワーク
Powered by Rabbit 3.0.2

Page: 34

さらにApache Arrow Flight
✓ 利用可能なリクエスト
✓ ミドルウェア
✓ 将来の展望
Apache Arrow Flight - ビッグデータ用高速データ転送フレームワーク
Powered by Rabbit 3.0.2

Page: 35

利用可能なリクエスト1
✓ Handshake
✓ 認証
✓ ListFlights
✓ 利用可能なデータの取得方法一覧を取得
✓ GetSchema/DoGetなどで使える
✓ GetFlightInfo
✓ 指定したデータの取得方法を取得
✓ GetSchema/DoGetなどで使える
Apache Arrow Flight - ビッグデータ用高速データ転送フレームワーク
Powered by Rabbit 3.0.2

Page: 36

利用可能なリクエスト2
✓ GetSchema
✓ 指定したデータのスキーマを取得
✓ DoGet:指定したデータを取得
✓ DoPut:データを送信
✓ DoExchange:データを送受信
Apache Arrow Flight - ビッグデータ用高速データ転送フレームワーク
Powered by Rabbit 3.0.2

Page: 37

利用可能なリクエスト3
✓ DoAction
✓ 任意の処理を実行
✓ 普通のRPCなので素のgRPCでも十分
✓ ListActions
✓ 利用可能なアクション一覧を取得
Apache Arrow Flight - ビッグデータ用高速データ転送フレームワーク
Powered by Rabbit 3.0.2

Page: 38

ミドルウェア
✓ プラグインみたいなもの
✓ サーバー側・クライアント側両方あり
✓ 利用例
✓ 認証機能
✓ 分散トレーシング機能
Apache Arrow Flight - ビッグデータ用高速データ転送フレームワーク
Powered by Rabbit 3.0.2

Page: 39

将来の展望1
✓ gRPC以外もサポートするかも
✓ https://issues.apache.org/jira/browse/ARROW-13889
✓ メーリングリストで議論中
✓ 候補:UCX
https://openucx.org/documentation/
✓ RDMA/GPUなどハードウェアも活用した高速通信
Apache Arrow Flight - ビッグデータ用高速データ転送フレームワーク
Powered by Rabbit 3.0.2

Page: 40

将来の展望2
✓ Apache Arrow Flight SQLの追加
✓ https://issues.apache.org/jira/browse/ARROW-9825
✓ Apache Arrow Flight経由で各種RDBMSとやりとり
✓ GetFlightInfoでSQL送信
✓ DoGetで結果を受信
✓ RDBMSとFlightアダプターの間のシリアライズがボトルネックになりそうな気
がするんだけど、RDBMSのプロセス内にFlightアダプターを実装するのか
な。。。
Apache Arrow Flight - ビッグデータ用高速データ転送フレームワーク
Powered by Rabbit 3.0.2

Page: 41

まとめ
✓ 大量データのやりとりは
シリアライズ・デシリアライズが遅い
✓ Apache Arrow Flightでそのコストをなくせる
✓ さらに高速に扱う仕組みもある
✓ 並列転送やストリーム処理
✓ 将来:UCXやFlight SQL
Apache Arrow Flight - ビッグデータ用高速データ転送フレームワーク
Powered by Rabbit 3.0.2

Page: 42

次のステップ
✓ もっと詳しく知りたくなったから
イベント・社内・…で紹介して!
✓ https://www.clear-code.com/contact/
✓ アンケートに答えてね!
✓ ⇗のQRコードあるいは⇓
https://www.clear-code.com/surveys/db-tech-showcase-2021.html
Apache Arrow Flight - ビッグデータ用高速データ転送フレームワーク
Powered by Rabbit 3.0.2

Other slides

Apache Arrow Apache Arrow
2018-12-08
Apache Arrow Apache Arrow
2018-11-17
Apache Arrow Apache Arrow
2017-06-13
Apache Arrow Apache Arrow
2017-05-28
Mroonga! Mroonga!
2015-10-30