Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Multiple-Dimension-Spread と Apache Arrow

238 views

Published on

Apache Arrow東京ミートアップ2018にて発表させて頂いた資料となります。
https://speee.connpass.com/event/103514/

MDS(Multiple Dimension Spread)は、スキーマレスのカラム型ストレージフォーマットです。
MDS については以下の資料をご覧ください。
https://www.slideshare.net/techblogyahoo/multiple-dimension-spread

Published in: Technology
  • Be the first to comment

  • Be the first to like this

Multiple-Dimension-Spread と Apache Arrow

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

×