>100 Views
December 04, 18
スライド概要
Apache Arrow東京ミートアップ2018にて発表させて頂いた資料となります。
https://speee.connpass.com/event/103514/
MDS(Multiple Dimension Spread)は、スキーマレスのカラム型ストレージフォーマットです。
MDS については以下の資料をご覧ください。
https://www.slideshare.net/techblogyahoo/multiple-dimension-spread
2023年10月からSpeaker Deckに移行しました。最新情報はこちらをご覧ください。 https://speakerdeck.com/lycorptech_jp
Multiple-Dimension-Spreadと Apache Arrow 2018年12月4日 ヤフー株式会社 Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 井島 洸二
自己紹介 井島 洸二 ヤフー株式会社 データ&サイエンスソリューション統括本部 データプラットフォーム本部データデリバリー部 所属 • Hadoopで分析するためのデータを収集するシステムを担当 Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 2
この資料の目的 ヤフー株式会社が OSS として公開したファイルフォー マットの Multiple-Dimension-Spread (MDS) が Apache Arrow に対応した事例を紹介します。 Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 3
目次 • はじめに • MDS のクエリエンジン対応 • Apache Arrow 対応 • まとめ Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 4
はじめに Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved.
Multiple-Dimension-Spread とは • ヤフー株式会社がOSSとして公開しているカラム指向型のファイルフォーマット • スキーマレスな書き込みをサポート • 略称:MDS MDS については別途資料を公開していますのでよろしければご覧ください。 興味がありましたら気軽に連絡ください! SlideShare: https://www.slideshare.net/te chblogyahoo/multipledimension-spread GitHub: https://github.com/yahoojapan/multiple-dimension-spread Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 6
MDS の特徴 • カラムナーフォーマットの処理性能 • 書き込みにスキーマを必要としない Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 7
ユースケース Schema registry MR/TEZ Request Web/App API JSON message Spark MDS ETL HDFS HIVE/Presto Schema-less data pipeline Server Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 8
Apache Arrow とは 引用:https://arrow.apache.org/ データ交換において低コストな共通仕様を提供 Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 9
今日の内容 MDS Arrow Memory Apache Spark MDS を Apache Spark に対応するために Apache Arrow を使った事例 Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 10
MDSの クエリエンジン対応 Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved.
ファイルフォーマット × クエリエンジン select col1 , col2 where col1 > 100 Pushdown Need columns: [col1 , col2] Filters: col1 > 100 MDS File File Header MDSReader Block-1 クエリエンジン Disk,Network/IO Decompress(CPU) Block-2 Col-1 Col-1 Col-2 Col-3 Col-4 Col-2 Copy/Link Col-1 Col-2 Col-5 今回の内容の範囲 Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 12
期待される事 TPC-H 1,000GB Hive CPU TIME(SEC) TPC-H 1,000GB Spark CPU TIME(SEC) 100000 80000 90000 70000 80000 60000 70000 60000 50000 50000 40000 40000 30000 30000 20000 Law is better 20000 Law is better 10000 10000 0 0 q6 q16 q14 q1 q15 q11 q22 q2 q12 q20 q13 q10 q4 MDS Apache ORC q3 Apache parquet q7 q8 q5 q9 q17 q18 q21 q6 q14 q12 q1 q10 MDS q13 q3 Apache ORC q20 q8 q7 q5 q9 q4 q17 Apache parquet 様々なクエリエンジンで低コストが求められる Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 13
共通的にやる事 Col value value ColumnVector (Hive) MDS File File Header Block-1 Block-2 MDS Reader Col value value ColumnVector (Spark) Col value value Block (Presto) クエリエンジンが期待しているデータ構造を作る事 Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 14
データ交換について よくやるデータ交換の方法は二通り • コピー/参照 • ロード Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 15
データ交換 - コピー/参照 MDS Reader Col Storage Load Hive Connector value Copy/Link value Copy/Link value Copy/Link value Copy/Link IColumn (MDS) Col value value value value ColumnVector (Hive) ファイルフォーマットのデータ構造からクエリエンジンのデータ構造にデータをコピー/参照を行う。 クエリエンジンのデータ構造は仕様が異なるため、コピー/参照をする処理は個別に開発する必要がある。 Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 16
データ交換 - ロード MDS Reader Spark Loader Col value Load Storage Presto Loader value ColumnVector (Spark) Col Load value value Block (Presto) ファイル読み込み時にクエリエンジンの期待するデータ構造に直接ロードする。 クエリエンジンのデータ構造は仕様が異なるため、ロードをする処理は個別に開発する必要がある。 Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 17
MDSのデータ交換の課題 • 処理コスト • • 処理コストを下げるためには個別に特性を理解し実 装する必要がある メンテナンス • • 処理は似ているのに仕様が異なるため似たコード が散在 バージョンアップに伴う仕様変更の追従がつらい Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 18
Apache Arrow 引用:https://arrow.apache.org/ この課題にマッチしたのが Apache Arrow Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 19
Apache Arrow 対応 Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved.
Apache Arrow 対応方法 MDS Reader Storage Arrow Loader Col value Load value ValueVector (Arrow) Apache Arrow 特有の仕様は特に無く、他 の連携方法と同様にロードするだけ。 Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 21
Spark 連携 MDS Reader Arrow Loader Col-1 Col-2 Col-3 value value value value value value ValueVector ValueVector ValueVector ArrowVector (ColumnVector) ArrowVector ArrowVector (ColumnVector) (ColumnVector) Spark Processing Spark-2.3.0 から ColumnVector のインターフェー スを持った ArrowVector が利用可能 Arrow の ValueVector をセットするだけ ColumnarBatch Arrow の構造体を Spark が期待するインターフェースに揃える部分は実装が必要となるが Spark とのデータ交換の処理を書かなくて良いためメンテナンスがしやすくなる。 Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 22
Apache Arrow の恩恵 Apache Spark MDS Arrow Memory Apache Arrow 対応 クエリエンジン Apache Arrow 対応 クエリエンジン 今後はApache Arrow に対応したクエリエンジンに対しては少ない開発工数で連携が可能! Apache Arrow に対して効率化に専念すれば全体の効率が向上! Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 23
メモリにロードするまでの課題 Int型カラムでの CPU TIME を比較した時の比率 2 1.8 1.6 1.4 1.2 約1.8倍のCPU時間 1 0.8 0.6 0.4 0.2 0 独自実装 Arrow 実装 単純な実装ではパフォーマンスが約1.8倍CPU時間を使う結果なった。 (vectorにvalueをsetする関数が色々あるが、setSafe() を使ったのが良くなかったのかも・・・) 現在は独自の Spark の Column にロードする処理も実装しているが、この部分を改善すれば Apache Arrow に対応するほうがメリットが大きい! Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 24
まとめ Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved.
良いところ • 処理コスト • Apache Arrow の効率化に集中すれば全 体の効率化に繋がる • メンテナンス • データ交換の実装がすっきりする • クエリエンジンの仕様変更の影響が軽減 Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 26