スキーマレスカラムナフォーマット「Yosegi」で実現する スキーマの柔軟性と処理性能を両立したログ収集システム / Hadoop / Spark Conference Japan 2019 #hcj2019

1.7K Views

March 12, 19

スライド概要

Hadoop / Spark Conference Japan 2019 で発表させて頂いた、
「スキーマレスカラムナフォーマット「Yosegi」で実現する
スキーマの柔軟性と処理性能を両立したログ収集システム」の発表資料となります。

profile-image

2023年10月からSpeaker Deckに移行しました。最新情報はこちらをご覧ください。 https://speakerdeck.com/lycorptech_jp

シェア

埋め込む »CMSなどでJSが使えない場合

関連スライド

各ページのテキスト
1.

Hadoop / Spark Conference Japan 2019 スキーマレスカラムナフォーマット「Yosegi」で実現する スキーマの柔軟性と処理性能を両立したログ収集システム 2019年03月14日 井島 洸二 / ヤフー株式会社 Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved.

2.

自己紹介 井島 洸二 ヤフー株式会社 データ&サイエンスソリューション統括本部 データプラットフォーム本部データデリバリー部 所属 ヤフーのログを収集する領域を担当する部門 に所属 主に HDFS にログを収集し、ログを処理す るための環境を整える仕組みを担当 Processing Data Source Ingestion Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. Storage Analysis 2

3.

アジェンダ • ヤフーにおけるログ収集システム • ログ収集システムとデータフォーマット • Yosegi と他のデータフォーマットの違い • ネストスキーマの課題とアプローチ • まとめ Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 3

4.

ヤフーにおけるログ収集システム • ヤフーにおけるログ収集システム • ログ収集システムとデータフォーマット • Yosegi と他のデータフォーマットの違い • ネストスキーマの課題とアプローチ • まとめ Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 4

5.

ヤフーのログ収集システム Web/App HDFS Server ヤフーでは日々発生する膨大なログを HDFS に保存し利 用するための「ログ収集システム」を構築している Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 5

6.

ログの提供部門と利用部門 ログの仕様についての業務調整 サービス部門 データサイエンス部門 ヤフーではデータサイエンス部門が試行錯誤を繰り返すた め、ログの仕様変更は日々行われる Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 6

7.

ログ収集のアプローチ Schema-on-read 利用時にスキーマ定義する 収集時に制約が少ない 保存時の効率化が難しい Schema-on-write 保存時にスキーマを定義する 収集時に制約が多い 保存時の効率化が容易 ヤフーではサービスから多種多様なログを収集するため に、 schema-on-read のアプローチが向いている Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 7

8.

ログ収集システムが扱っている種類と量 Hive のテーブル数 約900テーブル 発生するログの件数 約600億件/day Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. ※ヤフー全体ではなく、担当システムで扱っているデータ量となります。 8

9.

HDFS とデータフォーマット 多様なスキーマ 膨大なログ量の処理 アクセスログ 定型レポート 検索ログ アドホック分析 購買ログ 機械学習 予約・決済 etc… etc… HDFS HDFS に保存するデータフォーマットは多様なスキーマ と膨大なログ量を考慮して選択する Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 9

10.

従来のヤフーでのログ仕様変更の対応 共通フィールド(約40項目) ログ Map<String,String> Array<Map<String,>String> サービスA{ 検索に関する情報 } サービス共通のログフィール ドとサービスが任意に拡張で きるフィールドを用意。 サービスB{ 商品に関する情報 } 拡張フィールドには Map を 使って任意の key, value を 付与できる サービスC{ コンテンツに関する情報 } Map 本来の使い方ではなく、JSON のように任意の key, value を入れられる設計が採用された Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 10

11.

ログ収集システムとデータフォーマット • ヤフーにおけるログ収集システム • ログ収集システムとデータフォーマット • Yosegi と他のデータフォーマットの違い • ネストスキーマの課題とアプローチ • まとめ Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 11

12.

保存時のデータフォーマットの要件 保存時のフォーマットに求められる事 複雑なスキーマを扱える スキーマの変更に強い 読み込みの処理性能が良い Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 12

13.

データフォーマットの選択肢 多様なスキーマを扱え、変更に強い JSON 処理性能が良い カラムナフォーマット(ORC, Parquet) Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 13

14.

JSON ルールベースで記述されているテキスト → スキーマを必要としない 複雑なデータ構造も表現可能 Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 14

15.

JSON の Hive テーブルの定義 読みたいデータ構造でテーブルを定義 テーブル定義にあわせて JSON から読み込まれる JSON ではフィールドの順序を持たないため、Key 名で データが参照される。 Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 15

16.

JSON のスキーマの更新業務 1.ログ仕様の変更依頼 サービス担当 データ利用担当 2-1.ログ仕様の更新 2-2.テーブル定義の更新 ログ仕様の更新とテーブル定義の更新は同時に行わなくても良い Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 16

17.

Hive における JSON テーブルの更新 Replace Columns には対応していない カラム単体で追加や更新をしなければならない FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask. Replace columns is not supported for table json_table_1. SerDe may be incompatible. 引用: https://cwiki.apache.org/confluence/display/Hive/SerDe This can be done only for tables with a native SerDe (DynamicSerDe, MetadataTypedColumnsetSerDe, LazySimpleSerDe and ColumnarSerDe). カラムの更新は制約が多いので、テーブルを作成しなおすか、 別にテーブルを作成してしまった方が早い Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 17

18.

JSON を利用したログ収集システム ・HDFS へのアップロード ・パーティショニング Request API JSON message JSON message ETL JSON File HDFS Processing JSON をそのまま HDFS に保存するシンプルな構成が可能 Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 18

19.

JSON を利用した場合の課題 CPUリソースが枯渇 圧縮の展開 テキストのパース スキーマの柔軟性はあるが処理数を増やすことができない Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 19

20.

カラムナフォーマット カラム方向でデータを格納、利用する Apache Parquet , Apache ORC など JSON など Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. カラムナフォーマット 20

21.

カラムナフォーマットの特徴 Pushdown による列、行のスキップ 圧縮の展開やパースの CPU リソースの 削減 カラム毎のエンコーディングと圧縮 データサイズが小さくなる Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 21

22.

自社データでの JSON との比較 今回のデータではそこ まで差はなかった データサイズ(GB) ※1 100 Hive クエリの CPU TIME(min) 700 600 80 500 60 400 40 300 かなりのCPU リソース が削減される ※2 200 20 100 0 0 JSON Parquet JSON Parquet ※1:圧縮は gzip を利用 ※2:root 直下のカラム数30あるうちの2カラムを処理 Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 22

23.

読み込まれたデータ量とプロファイル Parquet JSON 必要なカラムのみが読み出されている JSON 圧縮のCPUリソースが削減されていることが分かる Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. Parquet 23

24.

カラムナフォーマットとスキーマ スキーマからデータ を格納するカラムを 事前に作成する必要 がある。 スキーマ { ログ col1: val1, col2: val2, clo3: val3 パーサー } Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 24

25.

Hive でのカラムの参照の方法 カラムのインデクス(順序)でデータにアクセス カラム名を変更できる カラムの名前でデータにアクセス 柔軟なテーブルスキーマの更新が可能 カラム名は変更できない 参考:https://docs.aws.amazon.com/ja_jp/athena/latest/ug/handling-schema-updates-chapter.html#index-access Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 25

26.

カラムナフォーマットの Hive テーブルの更新 読み込むカラムを指定する テーブル定義にあわせてデータが読み込まれる カラム名で読み込まれるが、データの型は実データとあわ せる必要がある Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 26

27.

カラムナフォーマットのテーブルの更新 Replace column が使えるため、簡単なコマンドでテーブルを更新でき る。 Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 27

28.

スキーマ更新の業務 1.ログ仕様の変更依頼 サービス担当 データ利用担当 2-1-1. 変換用のスキーマの登録/更新 2-1-2.ログ仕様の更新 2-2.テーブル定義の更新 2-1,2-2の作業は個別に実施してもシステムに影響はない Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 28

29.

カラムナフォーマットを利用したログ収集システム ・HDFS へのアップロード ・パーティショニング ・カラムナフォーマットへの変換 ・データの設計 ・スキーマの管理 サービス担当 Request API Schema registry JSON message JSON message ETL HDFS Processing 事前に最終出力のスキーマ情報を登録・更新しなければならな い。システムは同期して ETL に反映する仕組みが必要。 Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 29

30.

カラムナフォーマットでの変化 Hadoop 初期 カラムナフォーマット登場以降 Schema-on-read Schema-on-write カラムナフォーマットの登場により、ログ収集システムは Schema-on-write のアーキテクチャとなった Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 30

31.

カラムナフォーマットを利用した場合の課題 カラムナフォーマットはスキーマが必要 事前のログ設計 変換スキーマ管理の仕組 スキーマの管理とシステム内でスキーマの同期が必要となり、 多様なログを収集する弊害となる Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 31

32.

スキーマの柔軟性と保存、処理性能の整理 大項目 スキーマ変更の強さ 複雑なデータ構造の定義 保存、処理性能 小項目 概要 ルールベースでの書き込み (スキーマレス) スキーマを使わずにルールベースでデータの 保持と復元ができる 要素名でのアクセス 要素の存在の有無に関わらないアクセス 要素の有無に関わらずフィールドにアクセス できる ネストスキーマの定義 ネストを含む複雑なデータ構造を定義できる データサイズ 保存時のデータサイズ 書き込み性能 書き込みの性能 読み込み性能 Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. フィールドをカラム名でアクセスできる 読み込みの性能 32

33.

フォーマットの比較 大項目 スキーマ変更の強さ 複雑なデータ構造の定義 保存、処理性能 Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 小項目 JSON ORC Parquet ルールベースでの書き込み (スキーマレス) ○ × × 要素名でのアクセス ○ ○ ○ △ △ 要素の存在の有無に関わらないアクセス ○ ネストスキーマの定義 ○ ○ ○ データサイズ △ △ ○ 書き込み性能 △ ○ △ 読み込み性能 × ○ ○ データ参照側 データ参照側 で実装 で実装 33

34.

Yosegi と他のデータフォーマットの違い • ヤフーにおけるログ収集システム • ログ収集システムとデータフォーマット • Yosegi と他のデータフォーマットの違い • ネストスキーマの課題とアプローチ • まとめ Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 34

35.

ヤフーのログ収集システムに求められる事 Hadoop 導入初期 カラムナフォーマット登場以降 書き込みのスキーマレス + 高処理効率 Schema-on-read Schema-on-write Schema-on-read schema-on-read を実現するために書き込みのスキーマ レスと、高い処理効率が求められる。 Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 35

36.

スキーマレスカラムナーフォーマットの開発 これまでの背景を課題感に「Yosegi」を 開発し OSS として公開。 Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 36

37.

「Yosegi」とは ヤフーがOSSとして公開しているスキーマレスカラムナフォーマット • スキーマレスな読み書き • カラムナフォーマットの高い圧縮率と高い処理性能 Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 37

38.

カラムナフォーマットの特徴 • カラム単位の書き込み・読み込み • Pushdown のサポート • カラム単位のエンコーディング、圧縮 • etc… Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 38

39.

データサイズと書き込み性能の比較 TPC-H 1000 書き込みの CPU TIME(min) TPC-H 1000 データサイズ(GB) 2000 300 250 1500 200 150 1000 100 500 50 0 0 Yosegi ORC Parquet part customer partsupp orders Yosegi Parquet ORC lineitem ORC が書き込みにおいては早い。今回は gzip で比較を行っているが、ORC はバイナリのタイ プによって圧縮レベルを低くしている。そのため、データサイズが少し大きくなっている。 Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 39

40.

処理性能の比較 TPC-H 1000 CPU TIME(min) 1800 1600 1400 1200 1000 800 600 400 200 0 q6 q16 q14 q1 q15 q11 q22 Yosegi q2 q12 q20 q13 q10 Apache ORC q4 q3 q7 q8 q5 q9 q17 q18 q21 Apache parquet 処理性能は他のカラムナフォーマットと同等 Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 40

41.

スキーマレスなカラム構築 {“col3”: “val”} {“col1”: “val”, “col5”: “val”} {“col2”: “val”, “col4”: “val”, “col5”: “val”} 入力データ col1,col5 を 動的に追加 col2,col4 を 動的に追加 内部データ Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 41

42.

ルールベースのカラムデータ書きこみ カラム名で木構造を作成。 各ノードには同じカラム名 のカラムを配列で保持する 木構造のデータを各ノード毎にバイト 配列として書き出す。 メタと実データは分離し、読み込みの 際はメタを読み込みデータ構造を復元 する。 Root [0] [1] [2] col1 書き込み処理 [0] col2 [2] col3 [0] [1] [2] col1[0] col2[0] col3[0] col1[1] col3[1] col1[2] col2[2] col3[2] 実データ領域 Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 42

43.

Map 型の扱い Yosegi では Map 型は存在せず、データ構造は Struct となる Map 型で参照した場合には以下の制約がある 1.Key の存在の有無が判定できない 2.Key が無くて NULL か、value が NULL か区別できない 3.カラム名で構成されるため Key は String 型のみ Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 43

44.

フォーマットの比較 大項目 スキーマ変更の強さ 複雑なデータ構造の定義 保存、処理性能 Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 小項目 JSON ORC Parquet Yosegi ルールベースでの書き込み (スキーマレス) ○ × × ○ 要素名でのアクセス ○ ○ ○ ○ △ △ 要素の存在の有無に関わらないアクセ ス ○ ネストスキーマの定義 ○ ○ ○ ○ データサイズ △ △ ○ ○ 書き込み性能 △ ○ △ △ 読み込み性能 × ○ ○ ○ データ参照側 データ参照側 で実装 で実装 ○ 44

45.

Yosegi の Hive テーブル更新 JSON と同様に Replace Columns は使えない。 Hive の「DDLTask」で許可されている SerDe のクラス名がハードコードされている。 現時点では JSON 同様にテーブルの再作成をし た方が早い Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 45

46.

スキーマの更新業務 1.ログ仕様の変更依頼 サービス担当 2-1.ログ仕様の更新 データ利用担当 2-2.テーブル定義の更新 ログ仕様の更新とテーブル定義の更新は同時に行わなくても良 い。 Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 46

47.

Yosegi を利用したログ収集システム ・HDFS へのアップロード ・パーティショニング ・Yosegi への変換 Schema registry Request API JSON message JSON message ETL Yosegi File HDFS Processing JSON と同様にシンプルなログ収集システムが構築可能 Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 47

48.

実現したこと Hadoop 導入初期 カラムナフォーマット登場以降 Yosegi Schema-on-read Schema-on-write Schema-on-read 「Yosegi」により Schema-on-read のアーキテクチャと 高い処理性能の両立を実現 Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 48

49.

ネストスキーマの課題とアプローチ • ヤフーにおけるログ収集システム • ログ収集システムとデータフォーマット • Yosegi と他のデータフォーマットの違い • ネストスキーマの課題とアプローチ • まとめ Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 49

50.

従来のヤフーでのログ仕様変更の対応 共通フィールド(約40項目) ログ Map<String,String> Array<Map<String,>String> サービスA{ 検索に関する情報 } サービス共通のログフィール ドとサービスが任意に拡張で きるフィールドを用意。 サービスB{ 商品に関する情報 } 拡張フィールドには Map を 使って任意の key, value を 付与できる サービスC{ コンテンツに関する情報 } Map 本来の使い方ではなく、JSON のように任意の key, value を入れられる設計が採用された Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 50

51.
[beta]
Map型の項目追加と参照
“option” : {
“opt1” : “value” ,
“opt2” : “value” ,
…
}

任意の key, value を
セットするだけ

SELECT option[“opt1”] …

CREATE TABLE t_1(
option MAP<STRING,STRING>
)

SELECT option[“opt2”] …

このフィールドへの項目追加は
テーブルを変更しなくて良い

参照したい Key を指定するだけ

Map 型で便利フィールドを作り、入力データのスキーマとテーブ
ル更新を不要にしてしまう方法
データを入れる側、使う側でスキーマの変更をしなくてよいので
業務への負担が少ない
Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved.

51

52.

肥大化する Map フィールド Map に含まれるユニーク key 数 約3500Key この便利フィールドを使うことにより、日々 のログ仕様の変更の業務負荷を軽減している (任意のフィールドについては管理していないとも言える) Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 52

53.

Map型のデメリット Array Index Key Array Value Array 0 KEY-A v 1 KEY-B v 2 KEY-D v 3 KEY-B v 4 KEY-C v 5 KEY-A v 6 KEY-D v 全ての Key, Value が読み込まれ、 特定の Key のみを読み込むのが困難 MAP{ KEY-A :v , KEY-B:v , KEY-D:v } MAP{ KEY-B:v , KEY-C:v } MAP{ KEY-A :v , KEY-D:v } Key, Value の配列から Map のデータ構造を個別に生成 カラムナフォーマットのメリットである必要なカラムを処 理するというメリットが無くなってしまう Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 53

54.

ヤフーでの Map 多用の影響 Map を多用したせいで以下の二点に影響を 与えている ・カラムナフォーマットを採用しても CPU リソース削減がいまいちだった ・Map を前提にしたログ設計が慣習的に なってしまった Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 54

55.

クエリエンジンとネストスキーマ 処理に必要なカラムは items.price でも親の items 以下全てのカラムが読み込まれる timestamp (BIGINT) 15167737 62 Items (Struct) item_id (STRING) price (BIGINT) number (INT) I_005 350 2 SELECT items.price WHERE … クエリエンジンはネストスキーマの Pushdown が対応していない事が多い (各 OSS の ISSUE で見かけるので対応は進んでいると思われる) Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 55

56.

処理効率が良いスキーマ timestamp (BIGINT) 1516773762 Items (Struct) item_id (STRING) price (BIGINT) number (INT) I_005 350 2 SELECT items.price WHERE … フラットなスキーマに変更 timestamp (BIGINT) Items_item_id (STRING) Items_price (BIGINT) Items_number (INT) 1516773762 I_005 350 2 SELECT items_price WHERE … ネストスキーマではなくフラットなスキーマでログを設計する Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 56

57.

フラットなスキーマは困難 フラットなスキーマにするためには、正 規化が必要となるが、ロギング時に正規 化するのは現実的でない 結果ネストスキーマでの実装が自然とな る Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 57

58.

ヤフーでの課題 Map型の運用軽減を目的にした利用 クエリエンジンはネストスキーマが苦手 フラットスキーマのロギングが困難 Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 58

59.

Yosegi でのアプローチ Items (ARRAY) timestamp (BIGINT) Yosegi File 1516773762 total_price (BIGINT) 1000 Items (Struct) item_id (STRING) price (BIGINT) number (INT) I_001 300 1 I_005 350 2 timestamp (BIGINT) total_price (BIGINT) item_id (STRING) price (BIGINT) number (INT) 1516773762 1000 I_001 300 1 1516773762 1000 I_005 350 2 Array 展開のSQL SQL ファイルを読み込むときに、ネストスキーマをフラットスキーマとして読 み込めれば、クエリエンジンで pushdown が有効になる Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 59

60.

Expand & Flatten Expand , Flatten を設定 Items (ARRAY) timestamp (BIGINT) total_price (BIGINT) 1516773762 1000 1516773765 200 クエリエンジン Items (Struct) Expand : ‘items’ item_id (STRING) price (BIGINT) number (INT) I_001 300 1 I_005 350 2 I_002 50 4 読み込み処理 Flatten : items.item_id -> item_id items.price -> price items.number -> number Expand timestamp (BIGINT) total_price (BIGINT) 1516773762 Flatten Items (STRUCT) item_id (STRING) price (BIGINT) number (INT) 1000 I_001 300 1 1516773762 1000 I_005 350 2 1516773765 200 I_002 50 4 Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. timestamp (BIGINT) total_price (BIGINT) item_id (STRING) price (BIGINT) number (INT) 1516773762 1000 I_001 300 1 1516773762 1000 I_005 350 2 1516773765 200 I_002 50 4 60

61.

読み込みの処理性能 CPU TIME(min) 3000 2500 2000 90% down 1500 1000 500 0 Nest schema Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. Expand & Flatten ※自社内のログでの性能比較 61

62.

ユースケース 定常的な処理や高頻度に実行され る処理性能優先のテーブル定義 低頻度な試験的を行うために運用 コストが低いテーブル定義 Map を含むネストス キーマのテーブル フラットスキーマの テーブル HDFS Processing データ利用担当 ネストスキーマのデータ設計でも運用負荷と処理性能のバ ランスを取ることができる Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 62

63.

まとめ • ヤフーにおけるログ収集システム • ログ収集システムとデータフォーマット • Yosegi と他のデータフォーマットの違い • ネストスキーマの課題とアプローチ • まとめ Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 63

64.

schema-on-read と処理性能の両立 Hadoop 導入初期 カラムナフォーマット登場以降 Yosegi Schema-on-read Schema-on-write Schema-on-read 「Yosegi」によりスキーマの柔軟性と高い処理性能を両立 しつつ、スキーマ管理が不要なログ収集システムを実現 Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 64

65.

ネストスキーマへの対応 Items (ARRAY) timestamp (BIGINT) Yosegi File 1516773762 total_price (BIGINT) 1000 Items (Struct) item_id (STRING) price (BIGINT) number (INT) I_001 300 1 I_005 350 2 timestamp (BIGINT) total_price (BIGINT) item_id (STRING) price (BIGINT) number (INT) 1516773762 1000 I_001 300 1 1516773762 1000 I_005 350 2 Array 展開のSQL SQL ネストスキーマをフラットスキーマとして読み込むことによ り、クエリエンジンの Pushdown を有効にする Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 65

66.

さいごに Yosegi はたくさんの人に使ってもらい改善 をしていきたいと考えています。 メーリングリストもありますので、なんでも 気軽に連絡ください。 ■ 参考資料 - GitHub: https://github.com/yahoojapan/yosegi - Tech Blog: https://techblog.yahoo.co.jp/oss/introduction_of_datalake_and_mds/ Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 66 ※Multiple Dimension Spread(MDS)は Yosegi の旧プロダクト名となります。