SlideShare a Scribd company logo
1 of 55
Download to read offline
Apache Arrow 2019#ArrowTokyo Powered by Rabbit 3.0.1
Apache Arrow 2019
#ArrowTokyo
須藤功平
株式会社クリアコード
Apache Arrow東京ミートアップ2019
2019-12-11
Apache Arrow 2019#ArrowTokyo Powered by Rabbit 3.0.1
Apache Arrowと私
2016-12-21に最初のコミット✓
2017-05-10にコミッター✓
2017-09-15にPMCメンバー✓
2018-12-06現在コミット数3位(224人中)✓
2019-12-09現在コミット数2位(348人中)✓
Apache Arrow 2019#ArrowTokyo Powered by Rabbit 3.0.1
Apache Arrow 1.0.0がでるぞ!
たぶん2020年1月か2月あたり✓
使い始めるなら今!
普通のユーザー:リリースされたら試そう✓
先進的なみなさん:リリースされたら本格使用!✓
✓
Apache Arrow 2019#ArrowTokyo Powered by Rabbit 3.0.1
今日の目的
Apache Arrow
ユーザーを
増やす
Apache Arrow 2019#ArrowTokyo Powered by Rabbit 3.0.1
今日のチャレンジ
こんな人たちもフォローしてユーザーに!
使ってみたい!✓
でも、自分たちだけじゃ不安…✓
Apache Arrow 2019#ArrowTokyo Powered by Rabbit 3.0.1
対策:みんなで力を合わせる!
こんな布陣ならいけるかも!なら相談して!
https://www.clear-code.com/contact/
クリアコード:技術提供(すごく詳しいよ!)✓
A社:データ提供(うちのデータでApache Arrowは効くかな?)✓
B社:インフラ提供(どんな構成が適切かな?)✓
C社:お金・人的リソース提供(知見を貯めたい)✓
...✓
Apache Arrow 2019#ArrowTokyo Powered by Rabbit 3.0.1
Apache Arrow
各種言語で使える
インメモリー
データ処理
プラットフォーム
Apache Arrow 2019#ArrowTokyo Powered by Rabbit 3.0.1
実現すること
データ処理の効率化
(大量データが対象)
Apache Arrow 2019#ArrowTokyo Powered by Rabbit 3.0.1
効率化のポイント
速度
速いほど効率的✓
✓
実装コスト
低いほど効率的✓
✓
Apache Arrow 2019#ArrowTokyo Powered by Rabbit 3.0.1
速度向上方法
遅い部分を速く✓
高速化できる部分を最適化✓
Apache Arrow 2019#ArrowTokyo Powered by Rabbit 3.0.1
遅い部分
データ交換
Apache Arrow 2019#ArrowTokyo Powered by Rabbit 3.0.1
データ交換
データ処理ツール間で必要✓
データ処理システム
複数ツールを組み合わせて実現✓
データ処理システムではデータ交換が必須✓
✓
Apache Arrow 2019#ArrowTokyo Powered by Rabbit 3.0.1
データ処理システム例
データ交換
データ収集
ツール
データ前処理
ツール
分析
ツール
可視化
ツール
Apache Arrow 2019#ArrowTokyo Powered by Rabbit 3.0.1
データ交換処理
シリアライズ
データをバイト列へ変換
1.
転送
バイト列を別ツールに渡す
2.
デシリアライズ
バイト列からデータを復元
3.
Apache Arrow 2019#ArrowTokyo Powered by Rabbit 3.0.1
データ交換処理:必要なリソース
シリアライズ:CPU1.
転送:I/O(ネットワーク・ストレージ・メモリー)2.
デシリアライズ:CPU3.
Apache Arrow 2019#ArrowTokyo Powered by Rabbit 3.0.1
データ交換の高速化
データ量が増加すると
シリアライズ・デシリアライズ速度が劣化
✓
速度劣化を抑えられれば高速化可能✓
Apache Arrow 2019#ArrowTokyo Powered by Rabbit 3.0.1
Apache Arrowのアプローチ
なにもしなければ最速!
データフォーマットを定義
ほぼパースいらずなので速い!✓
シリアライズ・デシリアライズが高速化!✓
✓
このフォーマットを普及
各種言語で読み書き処理を実装✓
みんなが使えばフォーマット変換いらずで速い!✓
✓
Apache Arrow 2019#ArrowTokyo Powered by Rabbit 3.0.1
Apache Sparkでの高速化事例
Spark⇔PySpark間でデータ交換
Apache Arrowを使うことで数十倍レベルの高速化✓
✓
Spark⇔R間でデータ交換
sparklyrでは10倍以上の高速化✓
Spark 3.0からはSparkRでも使える✓
✓
Spark関連は山室さんが紹介!
Apache Arrow 2019#ArrowTokyo Powered by Rabbit 3.0.1
Apache Arrowのさらなるアプローチ
シリアライズ
データをバイト列へ変換
1.
転送←ここも高速化
バイト列を別ツールに渡す
2.
デシリアライズ
バイト列からデータを復元
3.
Apache Arrow 2019#ArrowTokyo Powered by Rabbit 3.0.1
同一ホスト時のデータ転送の高速化
メモリーマップ機能
ファイルの内容をメモリー上のデータのように
アクセスできる機能
✓
readせずにデータを使える(データコピー不要)✓
✓
パース不要+メモリーマップ
デシリアライズ時にメモリー確保不要✓
「転送」コスト削減✓
✓
Apache Arrow 2019#ArrowTokyo Powered by Rabbit 3.0.1
複数ホスト時のデータ転送の高速化
RPCフレームワークを提供
Apache Arrow Flight✓
gRPCベース✓
✓
詳細:Apache Arrow Flightの紹介✓
Apache Arrow 2019#ArrowTokyo Powered by Rabbit 3.0.1
効率的なデータ交換処理のまとめ
高速なデータフォーマット✓
効率的なデータ交換処理
同一ホスト内での高速なデータ交換✓
異なるホスト間での高速なデータフレーム交換✓
✓
Apache Arrow 2019#ArrowTokyo Powered by Rabbit 3.0.1
速度向上方法
遅い部分を速く
データ交換を速く✓
✓
高速化できる部分を最適化✓
Apache Arrow 2019#ArrowTokyo Powered by Rabbit 3.0.1
高速化できる部分
大量データの計算
Apache Arrow 2019#ArrowTokyo Powered by Rabbit 3.0.1
大量データの計算の高速化
各データの計算を高速化✓
まとまったデータの計算を高速化✓
Apache Arrow 2019#ArrowTokyo Powered by Rabbit 3.0.1
各データの計算の高速化
データを局所化
CPUのキャッシュメモリーを活用できる✓
✓
局所化に必要な知識
データの使われ方✓
局所化:一緒に使うデータを近くに置く✓
✓
Apache Arrow 2019#ArrowTokyo Powered by Rabbit 3.0.1
想定ユースケース
OLAP(OnLine Analytical Processing)
データから探索的に知見を探し出すような処理✓
✓
列単位の処理が多い
集計処理・グループ化・ソート…✓
✓
Apache Arrow 2019#ArrowTokyo Powered by Rabbit 3.0.1
OLAP向きのデータの持ち方
列行
a b c
1
2
3
値 値 値
値 値 値
値 値 値
列
行
a b c
1
2
3
値 値 値
値 値 値
値 値 値
Apache
Arrow
列ごと
RDBMS
列 行
値の管理単位 行ごと
高速なアクセス単位
Apache Arrow 2019#ArrowTokyo Powered by Rabbit 3.0.1
まとまったデータの計算を高速化
SIMDを活用
Single Instruction Multiple Data
✓
スレッドを活用✓
ストリームで処理✓
Apache Arrow 2019#ArrowTokyo Powered by Rabbit 3.0.1
SIMDを活用
CPU:データをまとめてアライン
アライン:データの境界を64の倍数とかに揃える
✓
GPUの活用✓
条件分岐をなくす
null/NA用の値は用意せずビットマップで表現
Is it time to stop using sentinel values for null / NA values?
✓
✓
Apache Arrow 2019#ArrowTokyo Powered by Rabbit 3.0.1
条件分岐とnull
null 0 1 0
data 1 X 3
1 0 0
X 2 5
+[1, null, 3] [null, 2, 5]
1 1 0
X X 8
[null, null, 8]
ビット単位の| nullのところも
気にせずSIMDで+
null
data
Apache Arrow 2019#ArrowTokyo Powered by Rabbit 3.0.1
スレッド活用時のポイント
競合リソースを作らない
リソースロックのオーバーヘッドで遅くなりがち✓
✓
アプローチ
リソースを参照するだけ✓
各スレッドにコピー✓
✓
Apache Arrow 2019#ArrowTokyo Powered by Rabbit 3.0.1
Apache Arrowとスレッド
データはリードオンリー
スレッド間でオーバーヘッドなしで共有可能✓
✓
データコピーは極力避けたい
データ交換時もスレッド活用時も✓
✓
Apache Arrow 2019#ArrowTokyo Powered by Rabbit 3.0.1
ストリームで処理
CPUを遊ばせない
データ読み込み中にすでに読んだデータを処理✓
✓
C++実装:詳細は村田さんが紹介!
Apache Arrow C++ Datasets:データ読み込み✓
Apache Arrow C++ Query Engine:データ処理✓
Apache Arrow C++ Data Frame:高レベルAPI✓
Gandiva:高速な式コンパイラー✓
✓
Apache Arrow 2019#ArrowTokyo Powered by Rabbit 3.0.1
高速化のまとめ
速度
遅い処理(データ交換処理)を高速化✓
速くできる処理(大量データの計算)を最適化✓
✓
実装コスト
低いほど効率的✓
✓
Apache Arrow 2019#ArrowTokyo Powered by Rabbit 3.0.1
実装コストを下げる
共通で使いそうな機能をライブラリー化
メリットを受ける人たちみんなで協力して開発✓
最適化もがんばる✓
✓
Apache Arrowの実装コストは下がらない
Apache Arrowを使うツールの実装コストが下がる
実装コストが下がる:ツール開発者のメリット
✓
✓
Apache Arrow 2019#ArrowTokyo Powered by Rabbit 3.0.1
共通で使いそうな機能
高速なデータフォーマット(説明済み)✓
効率的なデータ交換処理(説明済み)✓
高速なデータ処理ロジック(説明済み)✓
フォーマット変換機能✓
Apache Arrow 2019#ArrowTokyo Powered by Rabbit 3.0.1
実装コストのまとめ
速度
遅い処理(データ交換処理)を高速化✓
速くできる処理(大量データの計算)を最適化✓
✓
実装コスト
共通で使いそうな機能をライブラリー化✓
みんなで協力して開発✓
✓
Apache Arrow 2019#ArrowTokyo Powered by Rabbit 3.0.1
フォーマット変換機能
Apache Arrowフォーマット
インメモリー用のフォーマット✓
データ交換・処理向きで永続化向きではない✓
✓
永続化されたデータを使う場合
永続化に適したフォーマットで保存✓
読み込み時にApache Arrowに変換して
インメモリーでの処理にApache Arrowを使う
✓
✓
Apache Arrow 2019#ArrowTokyo Powered by Rabbit 3.0.1
対応フォーマット:CSV
よく使われているフォーマット✓
亜種が多くてパースが大変✓
C++実装はすごく速い!
CSV読み込みの高速化でも使える!✓
✓
Apache Arrow 2019#ArrowTokyo Powered by Rabbit 3.0.1
対応フォーマット:Apache Parquet
永続化用フォーマット
列単位でデータ保存:Apache Arrowと相性がよい✓
✓
小さい
列単位の圧縮をサポート✓
✓
速い
必要な部分のみ読み込める(I/Oが減る)✓
✓
Apache Arrow 2019#ArrowTokyo Powered by Rabbit 3.0.1
対応フォーマット:Apache ORC
永続化用フォーマット
列単位でデータ保存:Apache Arrowと相性がよい✓
Apache Parquetに似ている✓
✓
Apache Hive用に開発
今はHadoopやSparkでも使える✓
✓
Apache Arrow 2019#ArrowTokyo Powered by Rabbit 3.0.1
対応フォーマット:Feather
永続化用フォーマット
列単位でデータ保存:Apache Arrowと相性がよい✓
データフレームを保存✓
✓
PythonとR間のデータ交換用✓
今は非推奨!
Apache Arrowを使ってね✓
✓
Apache Arrow 2019#ArrowTokyo Powered by Rabbit 3.0.1
豆知識:Feather 2
名前を再利用するかも
[ARROW-5512] Feather V2✓
✓
Feather 2: Apche Arrow IPC File Format
Apache Arrow IPC Format:FileまたはStreaming✓
Fileの方をFeather 2と呼んじゃう?✓
✓
Apache Arrow 2019#ArrowTokyo Powered by Rabbit 3.0.1
対応フォーマット:JSON
よく使われているフォーマット✓
これまではテストのために内部使用✓
正式機能になった✓
Apache Arrow 2019#ArrowTokyo Powered by Rabbit 3.0.1
フォーマット変換機能まとめ
高速なデータフォーマット✓
効率的なデータ交換処理✓
高速なデータ処理ロジック✓
フォーマット変換機能
永続化データを処理するために必要✓
✓
Apache Arrow 2019#ArrowTokyo Powered by Rabbit 3.0.1
対応言語
C, C#, C++, Go, Java, JavaScript, Lua✓
MATLAB, Python, R, Ruby, Rust✓
非公式実装:
Julia (Arrow.jl)✓
Apache Arrow 2019#ArrowTokyo Powered by Rabbit 3.0.1
実装方法
ネイティブ実装
C#, C++, Go, Java, JavaScript, Julia, Rust✓
その言語になじむ✓
✓
C++バインディング
C, Lua, MATLAB, Python, R, Ruby
R関連は湯谷さんが紹介!
✓
ホスト言語が遅めでも速い実装になる✓
✓
Apache Arrow 2019#ArrowTokyo Powered by Rabbit 3.0.1
各言語のデータ交換対応状況
基本的な型はすべての言語で対応済み
すでにデータ交換用途に使える✓
✓
複雑な型は未対応の言語あり
List, Structなど
例:C#のList実装は網屋の橋田さんが改良中✓
✓
Apache Arrow 2019#ArrowTokyo Powered by Rabbit 3.0.1
各言語のデータ処理対応状況
データの高速な計算は一部言語で対応
C++ベース、Java、Rust(DataFusion)、Go✓
✓
フォーマット変換も各言語の対応は様々✓
Apache Arrow 2019#ArrowTokyo Powered by Rabbit 3.0.1
ユースケース(1)
PostgreSQLの高速化
海外さんがPG-Stromの事例を紹介!✓
✓
TensorFlow・BigQuery Storage APIが
Apache Arrowをサポート
石崎さんと漆山さんが紹介!✓
✓
Apache Arrow 2019#ArrowTokyo Powered by Rabbit 3.0.1
ユースケース(2)
FluentdでログデータをApache Arrow化
プラグインあり✓
✓
Groongaに高速データロード
Groonga:全文検索エンジン✓
Fluentdで集めたログデータを
Apache Arrowで流し込んで高速検索
✓
✓
Apache Arrow 2019#ArrowTokyo Powered by Rabbit 3.0.1
今日の目的
Apache Arrow
ユーザーを
増やす
Apache Arrow 2019#ArrowTokyo Powered by Rabbit 3.0.1
今日のチャレンジ
こんな人たちもフォローしてユーザーに!
使ってみたい!✓
でも、自分たちだけじゃ不安…✓
Apache Arrow 2019#ArrowTokyo Powered by Rabbit 3.0.1
対策:みんなで力を合わせる!
こんな布陣ならいけるかも!なら相談して!
https://www.clear-code.com/contact/
クリアコード:技術提供(すごく詳しいよ!)✓
A社:データ提供(うちのデータでApache Arrowは効くかな?)✓
B社:インフラ提供(どんな構成が適切かな?)✓
C社:お金・人的リソース提供(知見を貯めたい)✓
...✓

More Related Content

What's hot

Hadoop/Spark で Amazon S3 を徹底的に使いこなすワザ (Hadoop / Spark Conference Japan 2019)
Hadoop/Spark で Amazon S3 を徹底的に使いこなすワザ (Hadoop / Spark Conference Japan 2019)Hadoop/Spark で Amazon S3 を徹底的に使いこなすワザ (Hadoop / Spark Conference Japan 2019)
Hadoop/Spark で Amazon S3 を徹底的に使いこなすワザ (Hadoop / Spark Conference Japan 2019)Noritaka Sekiyama
 
Sparkパフォーマンス検証
Sparkパフォーマンス検証Sparkパフォーマンス検証
Sparkパフォーマンス検証BrainPad Inc.
 
Amazon Elastic MapReduceやSparkを中心とした社内の分析環境事例とTips
Amazon Elastic MapReduceやSparkを中心とした社内の分析環境事例とTipsAmazon Elastic MapReduceやSparkを中心とした社内の分析環境事例とTips
Amazon Elastic MapReduceやSparkを中心とした社内の分析環境事例とTipsyuichi_komatsu
 
Run Spark on EMRってどんな仕組みになってるの?
Run Spark on EMRってどんな仕組みになってるの?Run Spark on EMRってどんな仕組みになってるの?
Run Spark on EMRってどんな仕組みになってるの?Satoshi Noto
 
Is spark streaming based on reactive streams?
Is spark streaming based on reactive streams?Is spark streaming based on reactive streams?
Is spark streaming based on reactive streams?chibochibo
 
研究用途でのAWSの利用事例と機械学習について
研究用途でのAWSの利用事例と機械学習について研究用途でのAWSの利用事例と機械学習について
研究用途でのAWSの利用事例と機械学習についてYasuhiro Matsuo
 
AWS Black Belt Techシリーズ Amazon CloudSearch
AWS Black Belt Techシリーズ Amazon CloudSearchAWS Black Belt Techシリーズ Amazon CloudSearch
AWS Black Belt Techシリーズ Amazon CloudSearchAmazon Web Services Japan
 
20111215_第1回EMR勉強会発表資料
20111215_第1回EMR勉強会発表資料20111215_第1回EMR勉強会発表資料
20111215_第1回EMR勉強会発表資料Kotaro Tsukui
 
SparkやBigQueryなどを用いた モバイルゲーム分析環境
SparkやBigQueryなどを用いたモバイルゲーム分析環境SparkやBigQueryなどを用いたモバイルゲーム分析環境
SparkやBigQueryなどを用いた モバイルゲーム分析環境yuichi_komatsu
 
ソーシャルゲームのEMR活用事例
ソーシャルゲームのEMR活用事例ソーシャルゲームのEMR活用事例
ソーシャルゲームのEMR活用事例知教 本間
 
Amazon Athena で実現する データ分析の広がり
Amazon Athena で実現する データ分析の広がりAmazon Athena で実現する データ分析の広がり
Amazon Athena で実現する データ分析の広がりAmazon Web Services Japan
 
ゲームのインフラをAwsで実戦tips全て見せます
ゲームのインフラをAwsで実戦tips全て見せますゲームのインフラをAwsで実戦tips全て見せます
ゲームのインフラをAwsで実戦tips全て見せますinfinite_loop
 
Deep Dive into Spark SQL with Advanced Performance Tuning
Deep Dive into Spark SQL with Advanced Performance TuningDeep Dive into Spark SQL with Advanced Performance Tuning
Deep Dive into Spark SQL with Advanced Performance TuningTakuya UESHIN
 
AWS Black Belt Tech Webinar 2016 〜 Amazon CloudSearch & Amazon Elasticsearch ...
AWS Black Belt Tech Webinar 2016 〜 Amazon CloudSearch & Amazon Elasticsearch ...AWS Black Belt Tech Webinar 2016 〜 Amazon CloudSearch & Amazon Elasticsearch ...
AWS Black Belt Tech Webinar 2016 〜 Amazon CloudSearch & Amazon Elasticsearch ...Amazon Web Services Japan
 
Apache ArrowのRubyバインディングをGObject Introspectionで
Apache ArrowのRubyバインディングをGObject IntrospectionでApache ArrowのRubyバインディングをGObject Introspectionで
Apache ArrowのRubyバインディングをGObject IntrospectionでKouhei Sutou
 
Effective Data Lakes - ユースケースとデザインパターン
Effective Data Lakes - ユースケースとデザインパターンEffective Data Lakes - ユースケースとデザインパターン
Effective Data Lakes - ユースケースとデザインパターンNoritaka Sekiyama
 
Sparkストリーミング検証
Sparkストリーミング検証Sparkストリーミング検証
Sparkストリーミング検証BrainPad Inc.
 
2014-10-17 「“A9共催! AWSプロダクトシリーズ よくわかる AWS CloudSearch” スクーでのCloudSearch利用実例」
2014-10-17 「“A9共催! AWSプロダクトシリーズ よくわかる AWS CloudSearch” スクーでのCloudSearch利用実例」2014-10-17 「“A9共催! AWSプロダクトシリーズ よくわかる AWS CloudSearch” スクーでのCloudSearch利用実例」
2014-10-17 「“A9共催! AWSプロダクトシリーズ よくわかる AWS CloudSearch” スクーでのCloudSearch利用実例」Hiromitsu Ito
 

What's hot (20)

Hadoop/Spark で Amazon S3 を徹底的に使いこなすワザ (Hadoop / Spark Conference Japan 2019)
Hadoop/Spark で Amazon S3 を徹底的に使いこなすワザ (Hadoop / Spark Conference Japan 2019)Hadoop/Spark で Amazon S3 を徹底的に使いこなすワザ (Hadoop / Spark Conference Japan 2019)
Hadoop/Spark で Amazon S3 を徹底的に使いこなすワザ (Hadoop / Spark Conference Japan 2019)
 
Sparkパフォーマンス検証
Sparkパフォーマンス検証Sparkパフォーマンス検証
Sparkパフォーマンス検証
 
Amazon Elastic MapReduceやSparkを中心とした社内の分析環境事例とTips
Amazon Elastic MapReduceやSparkを中心とした社内の分析環境事例とTipsAmazon Elastic MapReduceやSparkを中心とした社内の分析環境事例とTips
Amazon Elastic MapReduceやSparkを中心とした社内の分析環境事例とTips
 
Run Spark on EMRってどんな仕組みになってるの?
Run Spark on EMRってどんな仕組みになってるの?Run Spark on EMRってどんな仕組みになってるの?
Run Spark on EMRってどんな仕組みになってるの?
 
Is spark streaming based on reactive streams?
Is spark streaming based on reactive streams?Is spark streaming based on reactive streams?
Is spark streaming based on reactive streams?
 
研究用途でのAWSの利用事例と機械学習について
研究用途でのAWSの利用事例と機械学習について研究用途でのAWSの利用事例と機械学習について
研究用途でのAWSの利用事例と機械学習について
 
Running Apache Spark on AWS
Running Apache Spark on AWSRunning Apache Spark on AWS
Running Apache Spark on AWS
 
AWS Black Belt Techシリーズ Amazon CloudSearch
AWS Black Belt Techシリーズ Amazon CloudSearchAWS Black Belt Techシリーズ Amazon CloudSearch
AWS Black Belt Techシリーズ Amazon CloudSearch
 
20111215_第1回EMR勉強会発表資料
20111215_第1回EMR勉強会発表資料20111215_第1回EMR勉強会発表資料
20111215_第1回EMR勉強会発表資料
 
SparkやBigQueryなどを用いた モバイルゲーム分析環境
SparkやBigQueryなどを用いたモバイルゲーム分析環境SparkやBigQueryなどを用いたモバイルゲーム分析環境
SparkやBigQueryなどを用いた モバイルゲーム分析環境
 
ソーシャルゲームのEMR活用事例
ソーシャルゲームのEMR活用事例ソーシャルゲームのEMR活用事例
ソーシャルゲームのEMR活用事例
 
Amazon Athena で実現する データ分析の広がり
Amazon Athena で実現する データ分析の広がりAmazon Athena で実現する データ分析の広がり
Amazon Athena で実現する データ分析の広がり
 
ゲームのインフラをAwsで実戦tips全て見せます
ゲームのインフラをAwsで実戦tips全て見せますゲームのインフラをAwsで実戦tips全て見せます
ゲームのインフラをAwsで実戦tips全て見せます
 
Deep Dive into Spark SQL with Advanced Performance Tuning
Deep Dive into Spark SQL with Advanced Performance TuningDeep Dive into Spark SQL with Advanced Performance Tuning
Deep Dive into Spark SQL with Advanced Performance Tuning
 
NetflixにおけるPresto/Spark活用事例
NetflixにおけるPresto/Spark活用事例NetflixにおけるPresto/Spark活用事例
NetflixにおけるPresto/Spark活用事例
 
AWS Black Belt Tech Webinar 2016 〜 Amazon CloudSearch & Amazon Elasticsearch ...
AWS Black Belt Tech Webinar 2016 〜 Amazon CloudSearch & Amazon Elasticsearch ...AWS Black Belt Tech Webinar 2016 〜 Amazon CloudSearch & Amazon Elasticsearch ...
AWS Black Belt Tech Webinar 2016 〜 Amazon CloudSearch & Amazon Elasticsearch ...
 
Apache ArrowのRubyバインディングをGObject Introspectionで
Apache ArrowのRubyバインディングをGObject IntrospectionでApache ArrowのRubyバインディングをGObject Introspectionで
Apache ArrowのRubyバインディングをGObject Introspectionで
 
Effective Data Lakes - ユースケースとデザインパターン
Effective Data Lakes - ユースケースとデザインパターンEffective Data Lakes - ユースケースとデザインパターン
Effective Data Lakes - ユースケースとデザインパターン
 
Sparkストリーミング検証
Sparkストリーミング検証Sparkストリーミング検証
Sparkストリーミング検証
 
2014-10-17 「“A9共催! AWSプロダクトシリーズ よくわかる AWS CloudSearch” スクーでのCloudSearch利用実例」
2014-10-17 「“A9共催! AWSプロダクトシリーズ よくわかる AWS CloudSearch” スクーでのCloudSearch利用実例」2014-10-17 「“A9共催! AWSプロダクトシリーズ よくわかる AWS CloudSearch” スクーでのCloudSearch利用実例」
2014-10-17 「“A9共催! AWSプロダクトシリーズ よくわかる AWS CloudSearch” スクーでのCloudSearch利用実例」
 

More from Kouhei Sutou

RubyKaigi 2022 - Fast data processing with Ruby and Apache Arrow
RubyKaigi 2022 - Fast data processing with Ruby and Apache ArrowRubyKaigi 2022 - Fast data processing with Ruby and Apache Arrow
RubyKaigi 2022 - Fast data processing with Ruby and Apache ArrowKouhei Sutou
 
RubyKaigi Takeout 2021 - Red Arrow - Ruby and Apache Arrow
RubyKaigi Takeout 2021 - Red Arrow - Ruby and Apache ArrowRubyKaigi Takeout 2021 - Red Arrow - Ruby and Apache Arrow
RubyKaigi Takeout 2021 - Red Arrow - Ruby and Apache ArrowKouhei Sutou
 
Apache Arrowフォーマットはなぜ速いのか
Apache Arrowフォーマットはなぜ速いのかApache Arrowフォーマットはなぜ速いのか
Apache Arrowフォーマットはなぜ速いのかKouhei Sutou
 
Redmine検索の未来像
Redmine検索の未来像Redmine検索の未来像
Redmine検索の未来像Kouhei Sutou
 
Better CSV processing with Ruby 2.6
Better CSV processing with Ruby 2.6Better CSV processing with Ruby 2.6
Better CSV processing with Ruby 2.6Kouhei Sutou
 
MySQL・PostgreSQLだけで作る高速あいまい全文検索システム
MySQL・PostgreSQLだけで作る高速あいまい全文検索システムMySQL・PostgreSQLだけで作る高速あいまい全文検索システム
MySQL・PostgreSQLだけで作る高速あいまい全文検索システムKouhei Sutou
 
MySQL 8.0でMroonga
MySQL 8.0でMroongaMySQL 8.0でMroonga
MySQL 8.0でMroongaKouhei Sutou
 
Mroongaの高速全文検索機能でWordPress内のコンテンツを有効活用!
Mroongaの高速全文検索機能でWordPress内のコンテンツを有効活用!Mroongaの高速全文検索機能でWordPress内のコンテンツを有効活用!
Mroongaの高速全文検索機能でWordPress内のコンテンツを有効活用!Kouhei Sutou
 
MariaDBとMroongaで作る全言語対応超高速全文検索システム
MariaDBとMroongaで作る全言語対応超高速全文検索システムMariaDBとMroongaで作る全言語対応超高速全文検索システム
MariaDBとMroongaで作る全言語対応超高速全文検索システムKouhei Sutou
 
PGroonga 2 – Make PostgreSQL rich full text search system backend!
PGroonga 2 – Make PostgreSQL rich full text search system backend!PGroonga 2 – Make PostgreSQL rich full text search system backend!
PGroonga 2 – Make PostgreSQL rich full text search system backend!Kouhei Sutou
 
PGroonga 2 - PostgreSQLでの全文検索の決定版
PGroonga 2 - PostgreSQLでの全文検索の決定版PGroonga 2 - PostgreSQLでの全文検索の決定版
PGroonga 2 - PostgreSQLでの全文検索の決定版Kouhei Sutou
 
PostgreSQLとPGroongaで作るPHPマニュアル高速全文検索システム
PostgreSQLとPGroongaで作るPHPマニュアル高速全文検索システムPostgreSQLとPGroongaで作るPHPマニュアル高速全文検索システム
PostgreSQLとPGroongaで作るPHPマニュアル高速全文検索システムKouhei Sutou
 
Improve extension API: C++ as better language for extension
Improve extension API: C++ as better language for extensionImprove extension API: C++ as better language for extension
Improve extension API: C++ as better language for extensionKouhei Sutou
 
MySQL・PostgreSQLだけで作る高速でリッチな全文検索システム
MySQL・PostgreSQLだけで作る高速でリッチな全文検索システムMySQL・PostgreSQLだけで作る高速でリッチな全文検索システム
MySQL・PostgreSQLだけで作る高速でリッチな全文検索システムKouhei Sutou
 
全文検索でRedmineをさらに活用!
全文検索でRedmineをさらに活用!全文検索でRedmineをさらに活用!
全文検索でRedmineをさらに活用!Kouhei Sutou
 
MySQL・PostgreSQL上で動かす全文検索エンジン「Groonga」セミナー
MySQL・PostgreSQL上で動かす全文検索エンジン「Groonga」セミナーMySQL・PostgreSQL上で動かす全文検索エンジン「Groonga」セミナー
MySQL・PostgreSQL上で動かす全文検索エンジン「Groonga」セミナーKouhei Sutou
 
PHPでPostgreSQLとPGroongaを使って高速日本語全文検索!
 PHPでPostgreSQLとPGroongaを使って高速日本語全文検索! PHPでPostgreSQLとPGroongaを使って高速日本語全文検索!
PHPでPostgreSQLとPGroongaを使って高速日本語全文検索!Kouhei Sutou
 

More from Kouhei Sutou (20)

RubyKaigi 2022 - Fast data processing with Ruby and Apache Arrow
RubyKaigi 2022 - Fast data processing with Ruby and Apache ArrowRubyKaigi 2022 - Fast data processing with Ruby and Apache Arrow
RubyKaigi 2022 - Fast data processing with Ruby and Apache Arrow
 
RubyKaigi Takeout 2021 - Red Arrow - Ruby and Apache Arrow
RubyKaigi Takeout 2021 - Red Arrow - Ruby and Apache ArrowRubyKaigi Takeout 2021 - Red Arrow - Ruby and Apache Arrow
RubyKaigi Takeout 2021 - Red Arrow - Ruby and Apache Arrow
 
Apache Arrowフォーマットはなぜ速いのか
Apache Arrowフォーマットはなぜ速いのかApache Arrowフォーマットはなぜ速いのか
Apache Arrowフォーマットはなぜ速いのか
 
Redmine検索の未来像
Redmine検索の未来像Redmine検索の未来像
Redmine検索の未来像
 
Better CSV processing with Ruby 2.6
Better CSV processing with Ruby 2.6Better CSV processing with Ruby 2.6
Better CSV processing with Ruby 2.6
 
MySQL・PostgreSQLだけで作る高速あいまい全文検索システム
MySQL・PostgreSQLだけで作る高速あいまい全文検索システムMySQL・PostgreSQLだけで作る高速あいまい全文検索システム
MySQL・PostgreSQLだけで作る高速あいまい全文検索システム
 
MySQL 8.0でMroonga
MySQL 8.0でMroongaMySQL 8.0でMroonga
MySQL 8.0でMroonga
 
My way with Ruby
My way with RubyMy way with Ruby
My way with Ruby
 
Red Data Tools
Red Data ToolsRed Data Tools
Red Data Tools
 
Mroongaの高速全文検索機能でWordPress内のコンテンツを有効活用!
Mroongaの高速全文検索機能でWordPress内のコンテンツを有効活用!Mroongaの高速全文検索機能でWordPress内のコンテンツを有効活用!
Mroongaの高速全文検索機能でWordPress内のコンテンツを有効活用!
 
MariaDBとMroongaで作る全言語対応超高速全文検索システム
MariaDBとMroongaで作る全言語対応超高速全文検索システムMariaDBとMroongaで作る全言語対応超高速全文検索システム
MariaDBとMroongaで作る全言語対応超高速全文検索システム
 
PGroonga 2 – Make PostgreSQL rich full text search system backend!
PGroonga 2 – Make PostgreSQL rich full text search system backend!PGroonga 2 – Make PostgreSQL rich full text search system backend!
PGroonga 2 – Make PostgreSQL rich full text search system backend!
 
PGroonga 2 - PostgreSQLでの全文検索の決定版
PGroonga 2 - PostgreSQLでの全文検索の決定版PGroonga 2 - PostgreSQLでの全文検索の決定版
PGroonga 2 - PostgreSQLでの全文検索の決定版
 
PostgreSQLとPGroongaで作るPHPマニュアル高速全文検索システム
PostgreSQLとPGroongaで作るPHPマニュアル高速全文検索システムPostgreSQLとPGroongaで作るPHPマニュアル高速全文検索システム
PostgreSQLとPGroongaで作るPHPマニュアル高速全文検索システム
 
Improve extension API: C++ as better language for extension
Improve extension API: C++ as better language for extensionImprove extension API: C++ as better language for extension
Improve extension API: C++ as better language for extension
 
PGroonga & Zulip
PGroonga & ZulipPGroonga & Zulip
PGroonga & Zulip
 
MySQL・PostgreSQLだけで作る高速でリッチな全文検索システム
MySQL・PostgreSQLだけで作る高速でリッチな全文検索システムMySQL・PostgreSQLだけで作る高速でリッチな全文検索システム
MySQL・PostgreSQLだけで作る高速でリッチな全文検索システム
 
全文検索でRedmineをさらに活用!
全文検索でRedmineをさらに活用!全文検索でRedmineをさらに活用!
全文検索でRedmineをさらに活用!
 
MySQL・PostgreSQL上で動かす全文検索エンジン「Groonga」セミナー
MySQL・PostgreSQL上で動かす全文検索エンジン「Groonga」セミナーMySQL・PostgreSQL上で動かす全文検索エンジン「Groonga」セミナー
MySQL・PostgreSQL上で動かす全文検索エンジン「Groonga」セミナー
 
PHPでPostgreSQLとPGroongaを使って高速日本語全文検索!
 PHPでPostgreSQLとPGroongaを使って高速日本語全文検索! PHPでPostgreSQLとPGroongaを使って高速日本語全文検索!
PHPでPostgreSQLとPGroongaを使って高速日本語全文検索!
 

Recently uploaded

論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A surveyToru Tamaki
 
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものですiPride Co., Ltd.
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムsugiuralab
 
Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By DanielPostman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Danieldanielhu54
 
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Yuma Ohgami
 
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)Hiroki Ichikura
 
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdfTSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdftaisei2219
 
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...Toru Tamaki
 
論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNetToru Tamaki
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略Ryo Sasaki
 

Recently uploaded (10)

論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey
 
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものです
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システム
 
Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By DanielPostman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Daniel
 
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
 
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
 
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdfTSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdf
 
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
 
論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
 

Apache Arrow 2019

  • 1. Apache Arrow 2019#ArrowTokyo Powered by Rabbit 3.0.1 Apache Arrow 2019 #ArrowTokyo 須藤功平 株式会社クリアコード Apache Arrow東京ミートアップ2019 2019-12-11
  • 2. Apache Arrow 2019#ArrowTokyo Powered by Rabbit 3.0.1 Apache Arrowと私 2016-12-21に最初のコミット✓ 2017-05-10にコミッター✓ 2017-09-15にPMCメンバー✓ 2018-12-06現在コミット数3位(224人中)✓ 2019-12-09現在コミット数2位(348人中)✓
  • 3. Apache Arrow 2019#ArrowTokyo Powered by Rabbit 3.0.1 Apache Arrow 1.0.0がでるぞ! たぶん2020年1月か2月あたり✓ 使い始めるなら今! 普通のユーザー:リリースされたら試そう✓ 先進的なみなさん:リリースされたら本格使用!✓ ✓
  • 4. Apache Arrow 2019#ArrowTokyo Powered by Rabbit 3.0.1 今日の目的 Apache Arrow ユーザーを 増やす
  • 5. Apache Arrow 2019#ArrowTokyo Powered by Rabbit 3.0.1 今日のチャレンジ こんな人たちもフォローしてユーザーに! 使ってみたい!✓ でも、自分たちだけじゃ不安…✓
  • 6. Apache Arrow 2019#ArrowTokyo Powered by Rabbit 3.0.1 対策:みんなで力を合わせる! こんな布陣ならいけるかも!なら相談して! https://www.clear-code.com/contact/ クリアコード:技術提供(すごく詳しいよ!)✓ A社:データ提供(うちのデータでApache Arrowは効くかな?)✓ B社:インフラ提供(どんな構成が適切かな?)✓ C社:お金・人的リソース提供(知見を貯めたい)✓ ...✓
  • 7. Apache Arrow 2019#ArrowTokyo Powered by Rabbit 3.0.1 Apache Arrow 各種言語で使える インメモリー データ処理 プラットフォーム
  • 8. Apache Arrow 2019#ArrowTokyo Powered by Rabbit 3.0.1 実現すること データ処理の効率化 (大量データが対象)
  • 9. Apache Arrow 2019#ArrowTokyo Powered by Rabbit 3.0.1 効率化のポイント 速度 速いほど効率的✓ ✓ 実装コスト 低いほど効率的✓ ✓
  • 10. Apache Arrow 2019#ArrowTokyo Powered by Rabbit 3.0.1 速度向上方法 遅い部分を速く✓ 高速化できる部分を最適化✓
  • 11. Apache Arrow 2019#ArrowTokyo Powered by Rabbit 3.0.1 遅い部分 データ交換
  • 12. Apache Arrow 2019#ArrowTokyo Powered by Rabbit 3.0.1 データ交換 データ処理ツール間で必要✓ データ処理システム 複数ツールを組み合わせて実現✓ データ処理システムではデータ交換が必須✓ ✓
  • 13. Apache Arrow 2019#ArrowTokyo Powered by Rabbit 3.0.1 データ処理システム例 データ交換 データ収集 ツール データ前処理 ツール 分析 ツール 可視化 ツール
  • 14. Apache Arrow 2019#ArrowTokyo Powered by Rabbit 3.0.1 データ交換処理 シリアライズ データをバイト列へ変換 1. 転送 バイト列を別ツールに渡す 2. デシリアライズ バイト列からデータを復元 3.
  • 15. Apache Arrow 2019#ArrowTokyo Powered by Rabbit 3.0.1 データ交換処理:必要なリソース シリアライズ:CPU1. 転送:I/O(ネットワーク・ストレージ・メモリー)2. デシリアライズ:CPU3.
  • 16. Apache Arrow 2019#ArrowTokyo Powered by Rabbit 3.0.1 データ交換の高速化 データ量が増加すると シリアライズ・デシリアライズ速度が劣化 ✓ 速度劣化を抑えられれば高速化可能✓
  • 17. Apache Arrow 2019#ArrowTokyo Powered by Rabbit 3.0.1 Apache Arrowのアプローチ なにもしなければ最速! データフォーマットを定義 ほぼパースいらずなので速い!✓ シリアライズ・デシリアライズが高速化!✓ ✓ このフォーマットを普及 各種言語で読み書き処理を実装✓ みんなが使えばフォーマット変換いらずで速い!✓ ✓
  • 18. Apache Arrow 2019#ArrowTokyo Powered by Rabbit 3.0.1 Apache Sparkでの高速化事例 Spark⇔PySpark間でデータ交換 Apache Arrowを使うことで数十倍レベルの高速化✓ ✓ Spark⇔R間でデータ交換 sparklyrでは10倍以上の高速化✓ Spark 3.0からはSparkRでも使える✓ ✓ Spark関連は山室さんが紹介!
  • 19. Apache Arrow 2019#ArrowTokyo Powered by Rabbit 3.0.1 Apache Arrowのさらなるアプローチ シリアライズ データをバイト列へ変換 1. 転送←ここも高速化 バイト列を別ツールに渡す 2. デシリアライズ バイト列からデータを復元 3.
  • 20. Apache Arrow 2019#ArrowTokyo Powered by Rabbit 3.0.1 同一ホスト時のデータ転送の高速化 メモリーマップ機能 ファイルの内容をメモリー上のデータのように アクセスできる機能 ✓ readせずにデータを使える(データコピー不要)✓ ✓ パース不要+メモリーマップ デシリアライズ時にメモリー確保不要✓ 「転送」コスト削減✓ ✓
  • 21. Apache Arrow 2019#ArrowTokyo Powered by Rabbit 3.0.1 複数ホスト時のデータ転送の高速化 RPCフレームワークを提供 Apache Arrow Flight✓ gRPCベース✓ ✓ 詳細:Apache Arrow Flightの紹介✓
  • 22. Apache Arrow 2019#ArrowTokyo Powered by Rabbit 3.0.1 効率的なデータ交換処理のまとめ 高速なデータフォーマット✓ 効率的なデータ交換処理 同一ホスト内での高速なデータ交換✓ 異なるホスト間での高速なデータフレーム交換✓ ✓
  • 23. Apache Arrow 2019#ArrowTokyo Powered by Rabbit 3.0.1 速度向上方法 遅い部分を速く データ交換を速く✓ ✓ 高速化できる部分を最適化✓
  • 24. Apache Arrow 2019#ArrowTokyo Powered by Rabbit 3.0.1 高速化できる部分 大量データの計算
  • 25. Apache Arrow 2019#ArrowTokyo Powered by Rabbit 3.0.1 大量データの計算の高速化 各データの計算を高速化✓ まとまったデータの計算を高速化✓
  • 26. Apache Arrow 2019#ArrowTokyo Powered by Rabbit 3.0.1 各データの計算の高速化 データを局所化 CPUのキャッシュメモリーを活用できる✓ ✓ 局所化に必要な知識 データの使われ方✓ 局所化:一緒に使うデータを近くに置く✓ ✓
  • 27. Apache Arrow 2019#ArrowTokyo Powered by Rabbit 3.0.1 想定ユースケース OLAP(OnLine Analytical Processing) データから探索的に知見を探し出すような処理✓ ✓ 列単位の処理が多い 集計処理・グループ化・ソート…✓ ✓
  • 28. Apache Arrow 2019#ArrowTokyo Powered by Rabbit 3.0.1 OLAP向きのデータの持ち方 列行 a b c 1 2 3 値 値 値 値 値 値 値 値 値 列 行 a b c 1 2 3 値 値 値 値 値 値 値 値 値 Apache Arrow 列ごと RDBMS 列 行 値の管理単位 行ごと 高速なアクセス単位
  • 29. Apache Arrow 2019#ArrowTokyo Powered by Rabbit 3.0.1 まとまったデータの計算を高速化 SIMDを活用 Single Instruction Multiple Data ✓ スレッドを活用✓ ストリームで処理✓
  • 30. Apache Arrow 2019#ArrowTokyo Powered by Rabbit 3.0.1 SIMDを活用 CPU:データをまとめてアライン アライン:データの境界を64の倍数とかに揃える ✓ GPUの活用✓ 条件分岐をなくす null/NA用の値は用意せずビットマップで表現 Is it time to stop using sentinel values for null / NA values? ✓ ✓
  • 31. Apache Arrow 2019#ArrowTokyo Powered by Rabbit 3.0.1 条件分岐とnull null 0 1 0 data 1 X 3 1 0 0 X 2 5 +[1, null, 3] [null, 2, 5] 1 1 0 X X 8 [null, null, 8] ビット単位の| nullのところも 気にせずSIMDで+ null data
  • 32. Apache Arrow 2019#ArrowTokyo Powered by Rabbit 3.0.1 スレッド活用時のポイント 競合リソースを作らない リソースロックのオーバーヘッドで遅くなりがち✓ ✓ アプローチ リソースを参照するだけ✓ 各スレッドにコピー✓ ✓
  • 33. Apache Arrow 2019#ArrowTokyo Powered by Rabbit 3.0.1 Apache Arrowとスレッド データはリードオンリー スレッド間でオーバーヘッドなしで共有可能✓ ✓ データコピーは極力避けたい データ交換時もスレッド活用時も✓ ✓
  • 34. Apache Arrow 2019#ArrowTokyo Powered by Rabbit 3.0.1 ストリームで処理 CPUを遊ばせない データ読み込み中にすでに読んだデータを処理✓ ✓ C++実装:詳細は村田さんが紹介! Apache Arrow C++ Datasets:データ読み込み✓ Apache Arrow C++ Query Engine:データ処理✓ Apache Arrow C++ Data Frame:高レベルAPI✓ Gandiva:高速な式コンパイラー✓ ✓
  • 35. Apache Arrow 2019#ArrowTokyo Powered by Rabbit 3.0.1 高速化のまとめ 速度 遅い処理(データ交換処理)を高速化✓ 速くできる処理(大量データの計算)を最適化✓ ✓ 実装コスト 低いほど効率的✓ ✓
  • 36. Apache Arrow 2019#ArrowTokyo Powered by Rabbit 3.0.1 実装コストを下げる 共通で使いそうな機能をライブラリー化 メリットを受ける人たちみんなで協力して開発✓ 最適化もがんばる✓ ✓ Apache Arrowの実装コストは下がらない Apache Arrowを使うツールの実装コストが下がる 実装コストが下がる:ツール開発者のメリット ✓ ✓
  • 37. Apache Arrow 2019#ArrowTokyo Powered by Rabbit 3.0.1 共通で使いそうな機能 高速なデータフォーマット(説明済み)✓ 効率的なデータ交換処理(説明済み)✓ 高速なデータ処理ロジック(説明済み)✓ フォーマット変換機能✓
  • 38. Apache Arrow 2019#ArrowTokyo Powered by Rabbit 3.0.1 実装コストのまとめ 速度 遅い処理(データ交換処理)を高速化✓ 速くできる処理(大量データの計算)を最適化✓ ✓ 実装コスト 共通で使いそうな機能をライブラリー化✓ みんなで協力して開発✓ ✓
  • 39. Apache Arrow 2019#ArrowTokyo Powered by Rabbit 3.0.1 フォーマット変換機能 Apache Arrowフォーマット インメモリー用のフォーマット✓ データ交換・処理向きで永続化向きではない✓ ✓ 永続化されたデータを使う場合 永続化に適したフォーマットで保存✓ 読み込み時にApache Arrowに変換して インメモリーでの処理にApache Arrowを使う ✓ ✓
  • 40. Apache Arrow 2019#ArrowTokyo Powered by Rabbit 3.0.1 対応フォーマット:CSV よく使われているフォーマット✓ 亜種が多くてパースが大変✓ C++実装はすごく速い! CSV読み込みの高速化でも使える!✓ ✓
  • 41. Apache Arrow 2019#ArrowTokyo Powered by Rabbit 3.0.1 対応フォーマット:Apache Parquet 永続化用フォーマット 列単位でデータ保存:Apache Arrowと相性がよい✓ ✓ 小さい 列単位の圧縮をサポート✓ ✓ 速い 必要な部分のみ読み込める(I/Oが減る)✓ ✓
  • 42. Apache Arrow 2019#ArrowTokyo Powered by Rabbit 3.0.1 対応フォーマット:Apache ORC 永続化用フォーマット 列単位でデータ保存:Apache Arrowと相性がよい✓ Apache Parquetに似ている✓ ✓ Apache Hive用に開発 今はHadoopやSparkでも使える✓ ✓
  • 43. Apache Arrow 2019#ArrowTokyo Powered by Rabbit 3.0.1 対応フォーマット:Feather 永続化用フォーマット 列単位でデータ保存:Apache Arrowと相性がよい✓ データフレームを保存✓ ✓ PythonとR間のデータ交換用✓ 今は非推奨! Apache Arrowを使ってね✓ ✓
  • 44. Apache Arrow 2019#ArrowTokyo Powered by Rabbit 3.0.1 豆知識:Feather 2 名前を再利用するかも [ARROW-5512] Feather V2✓ ✓ Feather 2: Apche Arrow IPC File Format Apache Arrow IPC Format:FileまたはStreaming✓ Fileの方をFeather 2と呼んじゃう?✓ ✓
  • 45. Apache Arrow 2019#ArrowTokyo Powered by Rabbit 3.0.1 対応フォーマット:JSON よく使われているフォーマット✓ これまではテストのために内部使用✓ 正式機能になった✓
  • 46. Apache Arrow 2019#ArrowTokyo Powered by Rabbit 3.0.1 フォーマット変換機能まとめ 高速なデータフォーマット✓ 効率的なデータ交換処理✓ 高速なデータ処理ロジック✓ フォーマット変換機能 永続化データを処理するために必要✓ ✓
  • 47. Apache Arrow 2019#ArrowTokyo Powered by Rabbit 3.0.1 対応言語 C, C#, C++, Go, Java, JavaScript, Lua✓ MATLAB, Python, R, Ruby, Rust✓ 非公式実装: Julia (Arrow.jl)✓
  • 48. Apache Arrow 2019#ArrowTokyo Powered by Rabbit 3.0.1 実装方法 ネイティブ実装 C#, C++, Go, Java, JavaScript, Julia, Rust✓ その言語になじむ✓ ✓ C++バインディング C, Lua, MATLAB, Python, R, Ruby R関連は湯谷さんが紹介! ✓ ホスト言語が遅めでも速い実装になる✓ ✓
  • 49. Apache Arrow 2019#ArrowTokyo Powered by Rabbit 3.0.1 各言語のデータ交換対応状況 基本的な型はすべての言語で対応済み すでにデータ交換用途に使える✓ ✓ 複雑な型は未対応の言語あり List, Structなど 例:C#のList実装は網屋の橋田さんが改良中✓ ✓
  • 50. Apache Arrow 2019#ArrowTokyo Powered by Rabbit 3.0.1 各言語のデータ処理対応状況 データの高速な計算は一部言語で対応 C++ベース、Java、Rust(DataFusion)、Go✓ ✓ フォーマット変換も各言語の対応は様々✓
  • 51. Apache Arrow 2019#ArrowTokyo Powered by Rabbit 3.0.1 ユースケース(1) PostgreSQLの高速化 海外さんがPG-Stromの事例を紹介!✓ ✓ TensorFlow・BigQuery Storage APIが Apache Arrowをサポート 石崎さんと漆山さんが紹介!✓ ✓
  • 52. Apache Arrow 2019#ArrowTokyo Powered by Rabbit 3.0.1 ユースケース(2) FluentdでログデータをApache Arrow化 プラグインあり✓ ✓ Groongaに高速データロード Groonga:全文検索エンジン✓ Fluentdで集めたログデータを Apache Arrowで流し込んで高速検索 ✓ ✓
  • 53. Apache Arrow 2019#ArrowTokyo Powered by Rabbit 3.0.1 今日の目的 Apache Arrow ユーザーを 増やす
  • 54. Apache Arrow 2019#ArrowTokyo Powered by Rabbit 3.0.1 今日のチャレンジ こんな人たちもフォローしてユーザーに! 使ってみたい!✓ でも、自分たちだけじゃ不安…✓
  • 55. Apache Arrow 2019#ArrowTokyo Powered by Rabbit 3.0.1 対策:みんなで力を合わせる! こんな布陣ならいけるかも!なら相談して! https://www.clear-code.com/contact/ クリアコード:技術提供(すごく詳しいよ!)✓ A社:データ提供(うちのデータでApache Arrowは効くかな?)✓ B社:インフラ提供(どんな構成が適切かな?)✓ C社:お金・人的リソース提供(知見を貯めたい)✓ ...✓