SlideShare a Scribd company logo
Apache Arrow Flight - ビッグデータ用高速データ転送フレームワーク Powered by Rabbit 3.0.2
Apache Arrow Flight
ビッグデータ用高速データ転送フレームワーク
須藤功平
株式会社クリアコード
db tech showcase 2021
2021-11-17
Apache Arrow Flight - ビッグデータ用高速データ転送フレームワーク Powered by Rabbit 3.0.2
モチベーション
ビッグデータを
処理したい!
Apache Arrow Flight - ビッグデータ用高速データ転送フレームワーク Powered by Rabbit 3.0.2
ビッグデータ処理に必要なもの
大量データ:データがないと始まらない!
✓
速度:速くないと処理しきれない!
✓
Apache Arrow Flight - ビッグデータ用高速データ転送フレームワーク Powered by Rabbit 3.0.2
大量データの収集に必要なもの
データ収集ツール
例:ログ:Fluentd/Fluent Bit
✓
✓
ストレージ
例:Amazon S3
✓
✓
効率的なデータフォーマット
トレードオフ:空間効率と時間効率
✓
例:CSVよりApache Parquet
✓
✓
Apache Arrow Flight - ビッグデータ用高速データ転送フレームワーク Powered by Rabbit 3.0.2
高速処理に必要なもの
高速な分散システム
1台では処理しきれない
✓
✓
高速なアルゴリズムとその実装
個々の処理が速くなると全体も速くなる
✓
✓
Apache Arrow Flight - ビッグデータ用高速データ転送フレームワーク Powered by Rabbit 3.0.2
今日注目すること
高速な分散システム
Apache Arrow Flight - ビッグデータ用高速データ転送フレームワーク Powered by Rabbit 3.0.2
高速な分散システムに必要なもの
効率のよいタスク管理
より速く処理が終わるようなリソース配分
✓
✓
効率のよいデータ転送
ノード間でのデータ交換コストは無視できない
✓
✓
Apache Arrow Flight - ビッグデータ用高速データ転送フレームワーク Powered by Rabbit 3.0.2
大量データの交換コスト
Figure 2: Communication between a client and a
server
Don’t Hold My Data Hostage –
A Case For Client Protocol Redesign
Mark Raasveldt
Centrum Wiskunde & Informatica
Amsterdam, The Netherlands
m.raasveldt@cwi.nl
Hannes Mühleisen
Centrum Wiskunde & Informatica
Amsterdam, The Netherlands
hannes@cwi.nl
Netcat (10.25s)
170.9
170.9
170.9
189.6
189.6
189.6
629.9
629.9
629.9
221.2
221.2
221.2
686.5
686.5
686.5
101.3
101.3
101.3
391.3
391.3
391.3
202
202
202
MongoDB
Hive
MySQL+C
MonetDB
PostgreSQL
DBMS X
DB2
MySQL
0 200 400 600
Wall clock time (s)
Operation
Connection
Query Execution
RSS + Transfer
Figure 1: Wall clock time for retrieving the lineitem
table (SF10) over a loopback connection. The
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
大量データの交換コスト
ボトルネックになりやすい
シリアライズ・デシリアライズ
a.
ネットワーク帯域
b.
✓
目指すところ
メイン処理がボトルネック
(メイン処理以外が十分速い)
✓
✓
Apache Arrow Flight - ビッグデータ用高速データ転送フレームワーク Powered by Rabbit 3.0.2
解決策
Apache Arrow Flight
Apache Arrow Flight - ビッグデータ用高速データ転送フレームワーク Powered by Rabbit 3.0.2
Apache Arrow Flightと私
Apache ArrowプロジェクトのPMCメンバー
Apache Arrow Flightも開発しているプロジェクト
✓
PMC:プロジェクト管理委員会
✓
✓
コミット数2位
✓
Apache Arrow Flight - ビッグデータ用高速データ転送フレームワーク Powered by Rabbit 3.0.2
Apache Arrow Flight
gRPCベースのデータ転送フレームワーク
✓
ポイント
並列転送対応
「効率のよいタスク管理」に有用
✓
✓
ストリーム処理対応
「効率のよいタスク管理」に有用
✓
✓
シリアライズ・デシリアライズがほぼ不要
「効率のよいデータ転送」に有用
✓
✓
✓
Apache Arrow Flight - ビッグデータ用高速データ転送フレームワーク Powered by Rabbit 3.0.2
簡単な使い方
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
GetFlightInfo
クライアント→サーバー
✓
データの取得方法を教えてもらう
サーバーはFlightInfoを返す
✓
✓
FlightInfoの中身
メタデータ:スキーマ・総レコード数…
✓
複数エンドポイント:
データは複数ヶ所に分散しているかもしれない!
✓
✓
Apache Arrow Flight - ビッグデータ用高速データ転送フレームワーク Powered by Rabbit 3.0.2
DoGet
クライアント→サーバー
✓
データを取得する
サーバーはレコードバッチをストリームで返す
✓
プロトコルレベルではFlightDataと呼んでいる
✓
✓
レコードバッチ
データ全体のうちの一部のレコードの集まり
✓
✓
Apache Arrow Flight - ビッグデータ用高速データ転送フレームワーク Powered by Rabbit 3.0.2
Apache Arrow Flightが扱うデータ
カラム1 カラム2 カラム3
レコード1
レコード2
レコード3
レコード4
レコード5
レコード
バッチ1
レコード
バッチ2
型付きのテーブルデータ
RDBMSで扱うようなデータ
✓
カラムごとに型がある
✓
すべてのレコードは同じカラム構成
✓
✓
レコードバッチ
テーブルデータ内の連続したレコードの集まり
✓
✓
Apache Arrow Flight - ビッグデータ用高速データ転送フレームワーク Powered by Rabbit 3.0.2
レコードバッチストリーム
レコード1
レコード2
レコード3
レコード
バッチ1
レコード4
レコード5
レコード
バッチ2
クライアント サーバー
Apache Arrow Flight - ビッグデータ用高速データ転送フレームワーク Powered by Rabbit 3.0.2
なぜストリームが重要か
大量データを準備ができた順に処理できる
全部準備ができるまで待たなくてよい
✓
リソースを有効活用できる
✓
✓
レコードバッチのストリームでいいの?
レコードのストリーム方がいいんじゃない?
✓
✓
Apache Arrow Flight - ビッグデータ用高速データ転送フレームワーク Powered by Rabbit 3.0.2
ストリームの単位
カラム
レコード
a b c
1
2
3
値 値 値
値 値 値
値 値 値
カラム
レコード
a b c
1
2
3
値 値 値
値 値 値
値 値 値
レコード
バッチ
単位
レコード
単位
レコード
レコード単位で処理できる
✓
データはレコード単位でまとめる
✓
✓
レコードバッチ
複数レコードをまとめて処理できる
✓
データをカラム単位でまとめられる
✓
✓
Apache Arrow Flight - ビッグデータ用高速データ転送フレームワーク Powered by Rabbit 3.0.2
レコードバッチと処理
カラム
レコード
a b c
1
2
3
値 値 値
値 値 値
値 値 値
カラム
レコード
a b c
1
2
3
値 値 値
値 値 値
値 値 値
レコード
バッチ
単位
レコード
単位
複数レコードをまとめて処理
SIMDを活用すればレコード単位の処理より高速
✓
✓
カラム単位でまとまったデータ
分析処理が高速
✓
ビッグデータ処理の多くは分析処理なはず
✓
✓
Apache Arrow Flight - ビッグデータ用高速データ転送フレームワーク Powered by Rabbit 3.0.2
詳細
Apache Arrowフォーマットはなぜ速いのか Powered by Rabbit 3.0.1
Apache Arrowフォーマットは
なぜ速いのか
須藤功平
株式会社クリアコード
db tech showcase ONLINE 2020
2020-12-08
https://slide.rabbit-shocker.org/authors/kou/db-tech-showcase-online-2020/
Apache Arrow Flight - ビッグデータ用高速データ転送フレームワーク Powered by Rabbit 3.0.2
高速な分散システムの実現方法
レコードバッチのストリーム
ここまでで説明したこと
待ち時間を減らせる
✓
受け取ったデータを高速処理できる
✓
✓
スケールアウト
これから説明すること
データを複数ノードで分散処理
✓
それを効率的に扱う
✓
✓
Apache Arrow Flight - ビッグデータ用高速データ転送フレームワーク Powered by Rabbit 3.0.2
スケールアウト構成例
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
ポイント1:ムダな転送を回避可能
多くの分散システム
「コーディネーター」経由で通信
✓
ノード→コーディネーター→クライアント
✓
✓
Apache Arrow Flight
直接クライアントがデータ取得可能
✓
ノード→クライアント
✓
✓
Apache Arrow Flight - ビッグデータ用高速データ転送フレームワーク Powered by Rabbit 3.0.2
ポイント2:並列転送可能
同時に複数ノードからデータ取得可能
データごとに異なるエンドポイントだから可能
✓
✓
ストリームなので各データを随時処理可能
✓
Apache Arrow Flight - ビッグデータ用高速データ転送フレームワーク Powered by Rabbit 3.0.2
個々のデータ転送も速い
個々のデータ転送のボトルネック
シリアライズ・デシリアライズ
✓
✓
どうすれば速くできる?
なにもしなきゃいいじゃん!
✓
✓
Apache Arrow Flight - ビッグデータ用高速データ転送フレームワーク Powered by Rabbit 3.0.2
なにもしない?
そもそもなぜシリアライズが必要?
メモリー上のデータの配置と
通信時のデータの配置が違うから
✓
✓
シリアライズしなくて済むには?
メモリー上のデータの配置と
通信時のデータの配置を同じにすればいい!
✓
✓
Apache Arrow Flight - ビッグデータ用高速データ転送フレームワーク Powered by Rabbit 3.0.2
Apache Arrowフォーマット
シリアライズ不要フォーマット
メモリー上で効率よくデータを扱える配置
✓
データ交換時も↑と同じ配置を使う
✓
✓
Apache Arrow Flightが扱うデータは
Apache Arrowフォーマット
個々のデータ転送も速い!
✓
✓
Apache Arrow Flight - ビッグデータ用高速データ転送フレームワーク Powered by Rabbit 3.0.2
Apache Arrow Flightのまとめ
高速データ転送フレームワーク
並列転送対応
✓
ストリーム処理対応
✓
シリアライズ・デシリアライズがほぼ不要
✓
✓
gRPCベース
既存のgRPCライブラリーでも接続可能
✓
専用ライブラリーあり:C, C++, C#, Go, Java,
Python, R, Ruby, Rust
✓
✓
Apache Arrow Flight - ビッグデータ用高速データ転送フレームワーク Powered by Rabbit 3.0.2
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
Apache Arrow Ballista
Rust実装の分散計算プラットフォーム
✓
データはApache Arrowフォーマット
✓
通信はgRPCとApache Arrow Flight
✓
Apache Arrow Flight - ビッグデータ用高速データ転送フレームワーク Powered by Rabbit 3.0.2
アーキテクチャー
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
Apache Arrow Ballistaでの使い方
DoGetだけ使っている
処理済みのパーティションを受け取る
✓
大量データになりうる
✓
✓
その他の通信は素のgRPC
各Executorへの処理の依頼など
✓
大量データにはならない
✓
✓
Apache Arrow Flight - ビッグデータ用高速データ転送フレームワーク Powered by Rabbit 3.0.2
さらにApache Arrow Flight
利用可能なリクエスト
✓
ミドルウェア
✓
将来の展望
✓
Apache Arrow Flight - ビッグデータ用高速データ転送フレームワーク Powered by Rabbit 3.0.2
利用可能なリクエスト1
Handshake
認証
✓
✓
ListFlights
利用可能なデータの取得方法一覧を取得
✓
GetSchema/DoGetなどで使える
✓
✓
GetFlightInfo
指定したデータの取得方法を取得
✓
GetSchema/DoGetなどで使える
✓
✓
Apache Arrow Flight - ビッグデータ用高速データ転送フレームワーク Powered by Rabbit 3.0.2
利用可能なリクエスト2
GetSchema
指定したデータのスキーマを取得
✓
✓
DoGet:指定したデータを取得
✓
DoPut:データを送信
✓
DoExchange:データを送受信
✓
Apache Arrow Flight - ビッグデータ用高速データ転送フレームワーク Powered by Rabbit 3.0.2
利用可能なリクエスト3
DoAction
任意の処理を実行
✓
普通のRPCなので素のgRPCでも十分
✓
✓
ListActions
利用可能なアクション一覧を取得
✓
✓
Apache Arrow Flight - ビッグデータ用高速データ転送フレームワーク Powered by Rabbit 3.0.2
ミドルウェア
プラグインみたいなもの
サーバー側・クライアント側両方あり
✓
✓
利用例
認証機能
✓
分散トレーシング機能
✓
✓
Apache Arrow Flight - ビッグデータ用高速データ転送フレームワーク Powered by Rabbit 3.0.2
将来の展望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
将来の展望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
まとめ
大量データのやりとりは
シリアライズ・デシリアライズが遅い
Apache Arrow Flightでそのコストをなくせる
✓
✓
さらに高速に扱う仕組みもある
並列転送やストリーム処理
✓
将来:UCXやFlight SQL
✓
✓
Apache Arrow Flight - ビッグデータ用高速データ転送フレームワーク Powered by Rabbit 3.0.2
次のステップ
もっと詳しく知りたくなったから
イベント・社内・…で紹介して!
https://www.clear-code.com/contact/
✓
✓
アンケートに答えてね!
⇗のQRコードあるいは⇓
https://www.clear-code.com/surveys/db-tech-showcase-2021.html
✓
✓

More Related Content

PDF
IoT時代におけるストリームデータ処理と急成長の Apache Flink
PDF
Apache Hadoop YARNとマルチテナントにおけるリソース管理
PDF
Snowflake Architecture and Performance
PPTX
大規模データ活用向けストレージレイヤソフトのこれまでとこれから(NTTデータ テクノロジーカンファレンス 2019 講演資料、2019/09/05)
PDF
Apache Sparkに手を出してヤケドしないための基本 ~「Apache Spark入門より」~ (デブサミ 2016 講演資料)
PDF
KafkaとAWS Kinesisの比較
PDF
Apache Kafka 0.11 の Exactly Once Semantics
PDF
Kinesis + Elasticsearchでつくるさいきょうのログ分析基盤
IoT時代におけるストリームデータ処理と急成長の Apache Flink
Apache Hadoop YARNとマルチテナントにおけるリソース管理
Snowflake Architecture and Performance
大規模データ活用向けストレージレイヤソフトのこれまでとこれから(NTTデータ テクノロジーカンファレンス 2019 講演資料、2019/09/05)
Apache Sparkに手を出してヤケドしないための基本 ~「Apache Spark入門より」~ (デブサミ 2016 講演資料)
KafkaとAWS Kinesisの比較
Apache Kafka 0.11 の Exactly Once Semantics
Kinesis + Elasticsearchでつくるさいきょうのログ分析基盤

What's hot (20)

PDF
Apache Arrow - データ処理ツールの次世代プラットフォーム
PDF
[GKE & Spanner 勉強会] GKE 入門
PPTX
Apache Spark on Kubernetes入門(Open Source Conference 2021 Online Hiroshima 発表資料)
PDF
Apache Kafkaって本当に大丈夫?~故障検証のオーバービューと興味深い挙動の紹介~
PPTX
PostgreSQLのロール管理とその注意点(Open Source Conference 2022 Online/Osaka 発表資料)
PPTX
大規模データ処理の定番OSS Hadoop / Spark 最新動向 - 2021秋 -(db tech showcase 2021 / ONLINE 発...
PPTX
開発者におくる Power BI を使う時に考えるべきアーキテクチャ ~ データを溜めるのは誰だ? ~
PDF
Hadoop/Spark で Amazon S3 を徹底的に使いこなすワザ (Hadoop / Spark Conference Japan 2019)
PPTX
S3 整合性モデルと Hadoop/Spark の話
PPTX
グラフデータベース入門
PDF
最近のストリーム処理事情振り返り
PPTX
Apache Avro vs Protocol Buffers
PDF
入門 Kubeflow ~Kubernetesで機械学習をはじめるために~ (NTT Tech Conference #4 講演資料)
PDF
データ分析を支える技術 DWH再入門
PDF
ちょっと理解に自信がないな という皆さまに贈るHadoop/Sparkのキホン (IBM Datapalooza Tokyo 2016講演資料)
PPTX
PySparkによるジョブを、より速く、よりスケーラブルに実行するための最善の方法 ※講演は翻訳資料にて行います。 - Getting the Best...
PPTX
Apache Bigtopによるオープンなビッグデータ処理基盤の構築(オープンデベロッパーズカンファレンス 2021 Online 発表資料)
PDF
20190828 AWS Black Belt Online Seminar Amazon Aurora with PostgreSQL Compatib...
PDF
At least onceってぶっちゃけ問題の先送りだったよね #kafkajp
PPTX
分析指向データレイク実現の次の一手 ~Delta Lake、なにそれおいしいの?~(NTTデータ テクノロジーカンファレンス 2020 発表資料)
Apache Arrow - データ処理ツールの次世代プラットフォーム
[GKE & Spanner 勉強会] GKE 入門
Apache Spark on Kubernetes入門(Open Source Conference 2021 Online Hiroshima 発表資料)
Apache Kafkaって本当に大丈夫?~故障検証のオーバービューと興味深い挙動の紹介~
PostgreSQLのロール管理とその注意点(Open Source Conference 2022 Online/Osaka 発表資料)
大規模データ処理の定番OSS Hadoop / Spark 最新動向 - 2021秋 -(db tech showcase 2021 / ONLINE 発...
開発者におくる Power BI を使う時に考えるべきアーキテクチャ ~ データを溜めるのは誰だ? ~
Hadoop/Spark で Amazon S3 を徹底的に使いこなすワザ (Hadoop / Spark Conference Japan 2019)
S3 整合性モデルと Hadoop/Spark の話
グラフデータベース入門
最近のストリーム処理事情振り返り
Apache Avro vs Protocol Buffers
入門 Kubeflow ~Kubernetesで機械学習をはじめるために~ (NTT Tech Conference #4 講演資料)
データ分析を支える技術 DWH再入門
ちょっと理解に自信がないな という皆さまに贈るHadoop/Sparkのキホン (IBM Datapalooza Tokyo 2016講演資料)
PySparkによるジョブを、より速く、よりスケーラブルに実行するための最善の方法 ※講演は翻訳資料にて行います。 - Getting the Best...
Apache Bigtopによるオープンなビッグデータ処理基盤の構築(オープンデベロッパーズカンファレンス 2021 Online 発表資料)
20190828 AWS Black Belt Online Seminar Amazon Aurora with PostgreSQL Compatib...
At least onceってぶっちゃけ問題の先送りだったよね #kafkajp
分析指向データレイク実現の次の一手 ~Delta Lake、なにそれおいしいの?~(NTTデータ テクノロジーカンファレンス 2020 発表資料)
Ad

More from Kouhei Sutou (20)

PDF
RubyKaigi 2022 - Fast data processing with Ruby and Apache Arrow
PDF
RubyKaigi Takeout 2021 - Red Arrow - Ruby and Apache Arrow
PDF
Rubyと仕事と自由なソフトウェア
PDF
Apache Arrowフォーマットはなぜ速いのか
PDF
Apache Arrow 1.0 - A cross-language development platform for in-memory data
PDF
Apache Arrow 2019
PDF
Redmine検索の未来像
PDF
Apache Arrow - A cross-language development platform for in-memory data
PDF
Better CSV processing with Ruby 2.6
PDF
Apache Arrow
PDF
Apache Arrow
PDF
MySQL・PostgreSQLだけで作る高速あいまい全文検索システム
PDF
MySQL 8.0でMroonga
PDF
My way with Ruby
PDF
Red Data Tools
PDF
Mroongaの高速全文検索機能でWordPress内のコンテンツを有効活用!
PDF
MariaDBとMroongaで作る全言語対応超高速全文検索システム
PDF
PGroonga 2 – Make PostgreSQL rich full text search system backend!
PDF
PGroonga 2 - PostgreSQLでの全文検索の決定版
PDF
PostgreSQLとPGroongaで作るPHPマニュアル高速全文検索システム
RubyKaigi 2022 - Fast data processing with Ruby and Apache Arrow
RubyKaigi Takeout 2021 - Red Arrow - Ruby and Apache Arrow
Rubyと仕事と自由なソフトウェア
Apache Arrowフォーマットはなぜ速いのか
Apache Arrow 1.0 - A cross-language development platform for in-memory data
Apache Arrow 2019
Redmine検索の未来像
Apache Arrow - A cross-language development platform for in-memory data
Better CSV processing with Ruby 2.6
Apache Arrow
Apache Arrow
MySQL・PostgreSQLだけで作る高速あいまい全文検索システム
MySQL 8.0でMroonga
My way with Ruby
Red Data Tools
Mroongaの高速全文検索機能でWordPress内のコンテンツを有効活用!
MariaDBとMroongaで作る全言語対応超高速全文検索システム
PGroonga 2 – Make PostgreSQL rich full text search system backend!
PGroonga 2 - PostgreSQLでの全文検索の決定版
PostgreSQLとPGroongaで作るPHPマニュアル高速全文検索システム
Ad

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

  • 1. Apache Arrow Flight - ビッグデータ用高速データ転送フレームワーク Powered by Rabbit 3.0.2 Apache Arrow Flight ビッグデータ用高速データ転送フレームワーク 須藤功平 株式会社クリアコード db tech showcase 2021 2021-11-17
  • 2. Apache Arrow Flight - ビッグデータ用高速データ転送フレームワーク Powered by Rabbit 3.0.2 モチベーション ビッグデータを 処理したい!
  • 3. Apache Arrow Flight - ビッグデータ用高速データ転送フレームワーク Powered by Rabbit 3.0.2 ビッグデータ処理に必要なもの 大量データ:データがないと始まらない! ✓ 速度:速くないと処理しきれない! ✓
  • 4. Apache Arrow Flight - ビッグデータ用高速データ転送フレームワーク Powered by Rabbit 3.0.2 大量データの収集に必要なもの データ収集ツール 例:ログ:Fluentd/Fluent Bit ✓ ✓ ストレージ 例:Amazon S3 ✓ ✓ 効率的なデータフォーマット トレードオフ:空間効率と時間効率 ✓ 例:CSVよりApache Parquet ✓ ✓
  • 5. Apache Arrow Flight - ビッグデータ用高速データ転送フレームワーク Powered by Rabbit 3.0.2 高速処理に必要なもの 高速な分散システム 1台では処理しきれない ✓ ✓ 高速なアルゴリズムとその実装 個々の処理が速くなると全体も速くなる ✓ ✓
  • 6. Apache Arrow Flight - ビッグデータ用高速データ転送フレームワーク Powered by Rabbit 3.0.2 今日注目すること 高速な分散システム
  • 7. Apache Arrow Flight - ビッグデータ用高速データ転送フレームワーク Powered by Rabbit 3.0.2 高速な分散システムに必要なもの 効率のよいタスク管理 より速く処理が終わるようなリソース配分 ✓ ✓ 効率のよいデータ転送 ノード間でのデータ交換コストは無視できない ✓ ✓
  • 8. Apache Arrow Flight - ビッグデータ用高速データ転送フレームワーク Powered by Rabbit 3.0.2 大量データの交換コスト Figure 2: Communication between a client and a server Don’t Hold My Data Hostage – A Case For Client Protocol Redesign Mark Raasveldt Centrum Wiskunde & Informatica Amsterdam, The Netherlands m.raasveldt@cwi.nl Hannes Mühleisen Centrum Wiskunde & Informatica Amsterdam, The Netherlands hannes@cwi.nl Netcat (10.25s) 170.9 170.9 170.9 189.6 189.6 189.6 629.9 629.9 629.9 221.2 221.2 221.2 686.5 686.5 686.5 101.3 101.3 101.3 391.3 391.3 391.3 202 202 202 MongoDB Hive MySQL+C MonetDB PostgreSQL DBMS X DB2 MySQL 0 200 400 600 Wall clock time (s) Operation Connection Query Execution RSS + Transfer Figure 1: Wall clock time for retrieving the lineitem table (SF10) over a loopback connection. The dashed line is the wall clock time for netcat to trans- fer a CSV of the data. https://hannes.muehleisen.org/p852-muehleisen.pdf
  • 9. Apache Arrow Flight - ビッグデータ用高速データ転送フレームワーク Powered by Rabbit 3.0.2 大量データの交換コスト ボトルネックになりやすい シリアライズ・デシリアライズ a. ネットワーク帯域 b. ✓ 目指すところ メイン処理がボトルネック (メイン処理以外が十分速い) ✓ ✓
  • 10. Apache Arrow Flight - ビッグデータ用高速データ転送フレームワーク Powered by Rabbit 3.0.2 解決策 Apache Arrow Flight
  • 11. Apache Arrow Flight - ビッグデータ用高速データ転送フレームワーク Powered by Rabbit 3.0.2 Apache Arrow Flightと私 Apache ArrowプロジェクトのPMCメンバー Apache Arrow Flightも開発しているプロジェクト ✓ PMC:プロジェクト管理委員会 ✓ ✓ コミット数2位 ✓
  • 12. Apache Arrow Flight - ビッグデータ用高速データ転送フレームワーク Powered by Rabbit 3.0.2 Apache Arrow Flight gRPCベースのデータ転送フレームワーク ✓ ポイント 並列転送対応 「効率のよいタスク管理」に有用 ✓ ✓ ストリーム処理対応 「効率のよいタスク管理」に有用 ✓ ✓ シリアライズ・デシリアライズがほぼ不要 「効率のよいデータ転送」に有用 ✓ ✓ ✓
  • 13. Apache Arrow Flight - ビッグデータ用高速データ転送フレームワーク Powered by Rabbit 3.0.2 簡単な使い方 https://arrow.apache.org/img/20191014_flight_simple.png Apache License 2.0 - © 2016-2021 The Apache Software Foundation
  • 14. Apache Arrow Flight - ビッグデータ用高速データ転送フレームワーク Powered by Rabbit 3.0.2 GetFlightInfo クライアント→サーバー ✓ データの取得方法を教えてもらう サーバーはFlightInfoを返す ✓ ✓ FlightInfoの中身 メタデータ:スキーマ・総レコード数… ✓ 複数エンドポイント: データは複数ヶ所に分散しているかもしれない! ✓ ✓
  • 15. Apache Arrow Flight - ビッグデータ用高速データ転送フレームワーク Powered by Rabbit 3.0.2 DoGet クライアント→サーバー ✓ データを取得する サーバーはレコードバッチをストリームで返す ✓ プロトコルレベルではFlightDataと呼んでいる ✓ ✓ レコードバッチ データ全体のうちの一部のレコードの集まり ✓ ✓
  • 16. Apache Arrow Flight - ビッグデータ用高速データ転送フレームワーク Powered by Rabbit 3.0.2 Apache Arrow Flightが扱うデータ カラム1 カラム2 カラム3 レコード1 レコード2 レコード3 レコード4 レコード5 レコード バッチ1 レコード バッチ2 型付きのテーブルデータ RDBMSで扱うようなデータ ✓ カラムごとに型がある ✓ すべてのレコードは同じカラム構成 ✓ ✓ レコードバッチ テーブルデータ内の連続したレコードの集まり ✓ ✓
  • 17. Apache Arrow Flight - ビッグデータ用高速データ転送フレームワーク Powered by Rabbit 3.0.2 レコードバッチストリーム レコード1 レコード2 レコード3 レコード バッチ1 レコード4 レコード5 レコード バッチ2 クライアント サーバー
  • 18. Apache Arrow Flight - ビッグデータ用高速データ転送フレームワーク Powered by Rabbit 3.0.2 なぜストリームが重要か 大量データを準備ができた順に処理できる 全部準備ができるまで待たなくてよい ✓ リソースを有効活用できる ✓ ✓ レコードバッチのストリームでいいの? レコードのストリーム方がいいんじゃない? ✓ ✓
  • 19. Apache Arrow Flight - ビッグデータ用高速データ転送フレームワーク Powered by Rabbit 3.0.2 ストリームの単位 カラム レコード a b c 1 2 3 値 値 値 値 値 値 値 値 値 カラム レコード a b c 1 2 3 値 値 値 値 値 値 値 値 値 レコード バッチ 単位 レコード 単位 レコード レコード単位で処理できる ✓ データはレコード単位でまとめる ✓ ✓ レコードバッチ 複数レコードをまとめて処理できる ✓ データをカラム単位でまとめられる ✓ ✓
  • 20. Apache Arrow Flight - ビッグデータ用高速データ転送フレームワーク Powered by Rabbit 3.0.2 レコードバッチと処理 カラム レコード a b c 1 2 3 値 値 値 値 値 値 値 値 値 カラム レコード a b c 1 2 3 値 値 値 値 値 値 値 値 値 レコード バッチ 単位 レコード 単位 複数レコードをまとめて処理 SIMDを活用すればレコード単位の処理より高速 ✓ ✓ カラム単位でまとまったデータ 分析処理が高速 ✓ ビッグデータ処理の多くは分析処理なはず ✓ ✓
  • 21. Apache Arrow Flight - ビッグデータ用高速データ転送フレームワーク Powered by Rabbit 3.0.2 詳細 Apache Arrowフォーマットはなぜ速いのか Powered by Rabbit 3.0.1 Apache Arrowフォーマットは なぜ速いのか 須藤功平 株式会社クリアコード db tech showcase ONLINE 2020 2020-12-08 https://slide.rabbit-shocker.org/authors/kou/db-tech-showcase-online-2020/
  • 22. Apache Arrow Flight - ビッグデータ用高速データ転送フレームワーク Powered by Rabbit 3.0.2 高速な分散システムの実現方法 レコードバッチのストリーム ここまでで説明したこと 待ち時間を減らせる ✓ 受け取ったデータを高速処理できる ✓ ✓ スケールアウト これから説明すること データを複数ノードで分散処理 ✓ それを効率的に扱う ✓ ✓
  • 23. Apache Arrow Flight - ビッグデータ用高速データ転送フレームワーク Powered by Rabbit 3.0.2 スケールアウト構成例 https://arrow.apache.org/img/20191014_flight_complex.png Apache License 2.0 - © 2016-2021 The Apache Software Foundation
  • 24. Apache Arrow Flight - ビッグデータ用高速データ転送フレームワーク Powered by Rabbit 3.0.2 ポイント1:ムダな転送を回避可能 多くの分散システム 「コーディネーター」経由で通信 ✓ ノード→コーディネーター→クライアント ✓ ✓ Apache Arrow Flight 直接クライアントがデータ取得可能 ✓ ノード→クライアント ✓ ✓
  • 25. Apache Arrow Flight - ビッグデータ用高速データ転送フレームワーク Powered by Rabbit 3.0.2 ポイント2:並列転送可能 同時に複数ノードからデータ取得可能 データごとに異なるエンドポイントだから可能 ✓ ✓ ストリームなので各データを随時処理可能 ✓
  • 26. Apache Arrow Flight - ビッグデータ用高速データ転送フレームワーク Powered by Rabbit 3.0.2 個々のデータ転送も速い 個々のデータ転送のボトルネック シリアライズ・デシリアライズ ✓ ✓ どうすれば速くできる? なにもしなきゃいいじゃん! ✓ ✓
  • 27. Apache Arrow Flight - ビッグデータ用高速データ転送フレームワーク Powered by Rabbit 3.0.2 なにもしない? そもそもなぜシリアライズが必要? メモリー上のデータの配置と 通信時のデータの配置が違うから ✓ ✓ シリアライズしなくて済むには? メモリー上のデータの配置と 通信時のデータの配置を同じにすればいい! ✓ ✓
  • 28. Apache Arrow Flight - ビッグデータ用高速データ転送フレームワーク Powered by Rabbit 3.0.2 Apache Arrowフォーマット シリアライズ不要フォーマット メモリー上で効率よくデータを扱える配置 ✓ データ交換時も↑と同じ配置を使う ✓ ✓ Apache Arrow Flightが扱うデータは Apache Arrowフォーマット 個々のデータ転送も速い! ✓ ✓
  • 29. Apache Arrow Flight - ビッグデータ用高速データ転送フレームワーク Powered by Rabbit 3.0.2 Apache Arrow Flightのまとめ 高速データ転送フレームワーク 並列転送対応 ✓ ストリーム処理対応 ✓ シリアライズ・デシリアライズがほぼ不要 ✓ ✓ gRPCベース 既存のgRPCライブラリーでも接続可能 ✓ 専用ライブラリーあり:C, C++, C#, Go, Java, Python, R, Ruby, Rust ✓ ✓
  • 30. Apache Arrow Flight - ビッグデータ用高速データ転送フレームワーク Powered by Rabbit 3.0.2 Apache Arrow Flightの利用事例 Apache Arrow Ballista Apache License 2.0 - © 2016-2021 The Apache Software Foundation
  • 31. Apache Arrow Flight - ビッグデータ用高速データ転送フレームワーク Powered by Rabbit 3.0.2 Apache Arrow Ballista Rust実装の分散計算プラットフォーム ✓ データはApache Arrowフォーマット ✓ 通信はgRPCとApache Arrow Flight ✓
  • 32. Apache Arrow Flight - ビッグデータ用高速データ転送フレームワーク Powered by Rabbit 3.0.2 アーキテクチャー Apache Arrow Flight Apache Arrow Flight Apache License 2.0 - © 2016-2021 The Apache Software Foundation
  • 33. Apache Arrow Flight - ビッグデータ用高速データ転送フレームワーク Powered by Rabbit 3.0.2 Apache Arrow Ballistaでの使い方 DoGetだけ使っている 処理済みのパーティションを受け取る ✓ 大量データになりうる ✓ ✓ その他の通信は素のgRPC 各Executorへの処理の依頼など ✓ 大量データにはならない ✓ ✓
  • 34. Apache Arrow Flight - ビッグデータ用高速データ転送フレームワーク Powered by Rabbit 3.0.2 さらにApache Arrow Flight 利用可能なリクエスト ✓ ミドルウェア ✓ 将来の展望 ✓
  • 35. Apache Arrow Flight - ビッグデータ用高速データ転送フレームワーク Powered by Rabbit 3.0.2 利用可能なリクエスト1 Handshake 認証 ✓ ✓ ListFlights 利用可能なデータの取得方法一覧を取得 ✓ GetSchema/DoGetなどで使える ✓ ✓ GetFlightInfo 指定したデータの取得方法を取得 ✓ GetSchema/DoGetなどで使える ✓ ✓
  • 36. Apache Arrow Flight - ビッグデータ用高速データ転送フレームワーク Powered by Rabbit 3.0.2 利用可能なリクエスト2 GetSchema 指定したデータのスキーマを取得 ✓ ✓ DoGet:指定したデータを取得 ✓ DoPut:データを送信 ✓ DoExchange:データを送受信 ✓
  • 37. Apache Arrow Flight - ビッグデータ用高速データ転送フレームワーク Powered by Rabbit 3.0.2 利用可能なリクエスト3 DoAction 任意の処理を実行 ✓ 普通のRPCなので素のgRPCでも十分 ✓ ✓ ListActions 利用可能なアクション一覧を取得 ✓ ✓
  • 38. Apache Arrow Flight - ビッグデータ用高速データ転送フレームワーク Powered by Rabbit 3.0.2 ミドルウェア プラグインみたいなもの サーバー側・クライアント側両方あり ✓ ✓ 利用例 認証機能 ✓ 分散トレーシング機能 ✓ ✓
  • 39. Apache Arrow Flight - ビッグデータ用高速データ転送フレームワーク Powered by Rabbit 3.0.2 将来の展望1 gRPC以外もサポートするかも https://issues.apache.org/jira/browse/ARROW-13889 ✓ メーリングリストで議論中 ✓ ✓ 候補:UCX https://openucx.org/documentation/ RDMA/GPUなどハードウェアも活用した高速通信 ✓ ✓
  • 40. Apache Arrow Flight - ビッグデータ用高速データ転送フレームワーク Powered by Rabbit 3.0.2 将来の展望2 Apache Arrow Flight SQLの追加 https://issues.apache.org/jira/browse/ARROW-9825 ✓ Apache Arrow Flight経由で各種RDBMSとやりとり ✓ ✓ GetFlightInfoでSQL送信 ✓ DoGetで結果を受信 RDBMSとFlightアダプターの間のシリアライズがボトルネックになりそうな気 がするんだけど、RDBMSのプロセス内にFlightアダプターを実装するのか な。。。 ✓ ✓
  • 41. Apache Arrow Flight - ビッグデータ用高速データ転送フレームワーク Powered by Rabbit 3.0.2 まとめ 大量データのやりとりは シリアライズ・デシリアライズが遅い Apache Arrow Flightでそのコストをなくせる ✓ ✓ さらに高速に扱う仕組みもある 並列転送やストリーム処理 ✓ 将来:UCXやFlight SQL ✓ ✓
  • 42. Apache Arrow Flight - ビッグデータ用高速データ転送フレームワーク Powered by Rabbit 3.0.2 次のステップ もっと詳しく知りたくなったから イベント・社内・…で紹介して! https://www.clear-code.com/contact/ ✓ ✓ アンケートに答えてね! ⇗のQRコードあるいは⇓ https://www.clear-code.com/surveys/db-tech-showcase-2021.html ✓ ✓