SlideShare a Scribd company logo
1 of 66
Download to read offline
Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved.
2019年03月14日
井島 洸二 / ヤフー株式会社
Hadoop / Spark Conference Japan 2019
スキーマレスカラムナフォーマット「Yosegi」で実現する
スキーマの柔軟性と処理性能を両立したログ収集システム
Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved.
自己紹介
2
井島 洸二
ヤフー株式会社 データ&サイエンスソリューション統括本部
データプラットフォーム本部データデリバリー部 所属
Data Source Storage
Processing
Ingestion Analysis
ヤフーのログを収集する領域を担当する部門
に所属
主に HDFS にログを収集し、ログを処理す
るための環境を整える仕組みを担当
Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved.
アジェンダ
3
• ヤフーにおけるログ収集システム
• ログ収集システムとデータフォーマット
• Yosegi と他のデータフォーマットの違い
• ネストスキーマの課題とアプローチ
• まとめ
Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved.
ヤフーにおけるログ収集システム
4
• ヤフーにおけるログ収集システム
• ログ収集システムとデータフォーマット
• Yosegi と他のデータフォーマットの違い
• ネストスキーマの課題とアプローチ
• まとめ
Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved.
ヤフーのログ収集システム
5
Server
Web/App
ヤフーでは日々発生する膨大なログを HDFS に保存し利
用するための「ログ収集システム」を構築している
HDFS
Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved.
ログの提供部門と利用部門
6
サービス部門 データサイエンス部門
ログの仕様についての業務調整
ヤフーではデータサイエンス部門が試行錯誤を繰り返すた
め、ログの仕様変更は日々行われる
Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved.
ログ収集のアプローチ
7
Schema-on-read
利用時にスキーマ定義する
収集時に制約が少ない
保存時の効率化が難しい
Schema-on-write
保存時にスキーマを定義する
収集時に制約が多い
保存時の効率化が容易
ヤフーではサービスから多種多様なログを収集するため
に、 schema-on-read のアプローチが向いている
Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved.
ログ収集システムが扱っている種類と量
8
Hive のテーブル数
約900テーブル
発生するログの件数
約600億件/day
※ヤフー全体ではなく、担当システムで扱っているデータ量となります。
Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved.
HDFS とデータフォーマット
9
HDFS
アクセスログ
検索ログ
購買ログ
予約・決済
etc…
定型レポート
アドホック分析
機械学習
etc…
HDFS に保存するデータフォーマットは多様なスキーマ
と膨大なログ量を考慮して選択する
多様なスキーマ 膨大なログ量の処理
Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved.
従来のヤフーでのログ仕様変更の対応
10
Map 本来の使い方ではなく、JSON のように任意の
key, value を入れられる設計が採用された
ログ
共通フィールド(約40項目)
Map<String,String>
Array<Map<String,>String>
サービス共通のログフィール
ドとサービスが任意に拡張で
きるフィールドを用意。
サービスA{
検索に関する情報
}
サービスB{
商品に関する情報
}
サービスC{
コンテンツに関する情報
}
拡張フィールドには Map を
使って任意の key, value を
付与できる
Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved.
ログ収集システムとデータフォーマット
11
• ヤフーにおけるログ収集システム
• ログ収集システムとデータフォーマット
• Yosegi と他のデータフォーマットの違い
• ネストスキーマの課題とアプローチ
• まとめ
Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved.
保存時のデータフォーマットの要件
12
保存時のフォーマットに求められる事
複雑なスキーマを扱える
スキーマの変更に強い
読み込みの処理性能が良い
Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved.
データフォーマットの選択肢
13
多様なスキーマを扱え、変更に強い
JSON
処理性能が良い
カラムナフォーマット(ORC, Parquet)
Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved.
JSON
14
ルールベースで記述されているテキスト
→ スキーマを必要としない
複雑なデータ構造も表現可能
Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved.
JSON の Hive テーブルの定義
15
読みたいデータ構造でテーブルを定義 テーブル定義にあわせて JSON から読み込まれる
JSON ではフィールドの順序を持たないため、Key 名で
データが参照される。
Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved.
JSON のスキーマの更新業務
16
サービス担当 データ利用担当
1.ログ仕様の変更依頼
2-1.ログ仕様の更新 2-2.テーブル定義の更新
ログ仕様の更新とテーブル定義の更新は同時に行わなくても良い
Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved.
Hive における JSON テーブルの更新
17
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.
カラムの更新は制約が多いので、テーブルを作成しなおすか、
別にテーブルを作成してしまった方が早い
This can be done only for tables with a native SerDe (DynamicSerDe, MetadataTypedColumnsetSerDe,
LazySimpleSerDe and ColumnarSerDe).
引用: https://cwiki.apache.org/confluence/display/Hive/SerDe
Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved.
JSON を利用したログ収集システム
18
API
Request JSON
message
ETL
HDFS
JSON
message
Processing
・HDFS へのアップロード
・パーティショニング
JSON をそのまま HDFS に保存するシンプルな構成が可能
JSON
File
Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved.
JSON を利用した場合の課題
19
CPUリソースが枯渇
圧縮の展開
テキストのパース
スキーマの柔軟性はあるが処理数を増やすことができない
Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved.
カラムナフォーマット
20
カラム方向でデータを格納、利用する
Apache Parquet , Apache ORC など
JSON など カラムナフォーマット
Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved.
カラムナフォーマットの特徴
21
Pushdown による列、行のスキップ
圧縮の展開やパースの CPU リソースの
削減
カラム毎のエンコーディングと圧縮
データサイズが小さくなる
Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved.
0
100
200
300
400
500
600
700
JSON Parquet
Hive クエリの CPU TIME(min)
自社データでの JSON との比較
22
※1:圧縮は gzip を利用
※2:root 直下のカラム数30あるうちの2カラムを処理
かなりのCPU リソース
が削減される ※2
0
20
40
60
80
100
JSON Parquet
データサイズ(GB) ※1
今回のデータではそこ
まで差はなかった
Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved.
読み込まれたデータ量とプロファイル
23
必要なカラムのみが読み出されている
JSON Parquet
圧縮のCPUリソースが削減されていることが分かる
JSON Parquet
Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved.
カラムナフォーマットとスキーマ
24
パーサーログ
{
col1: val1,
col2: val2,
clo3: val3
}
スキーマからデータ
を格納するカラムを
事前に作成する必要
がある。
スキーマ
Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved.
Hive でのカラムの参照の方法
25
カラムのインデクス(順序)でデータにアクセス
カラム名を変更できる
カラムの名前でデータにアクセス
柔軟なテーブルスキーマの更新が可能
カラム名は変更できない
参考: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.
カラムナフォーマットの Hive テーブルの更新
26
読み込むカラムを指定する テーブル定義にあわせてデータが読み込まれる
カラム名で読み込まれるが、データの型は実データとあわ
せる必要がある
Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved.
カラムナフォーマットのテーブルの更新
27
Replace column が使えるため、簡単なコマンドでテーブルを更新でき
る。
Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved.
スキーマ更新の業務
28
サービス担当 データ利用担当
1.ログ仕様の変更依頼
2-1-1. 変換用のスキーマの登録/更新
2-1-2.ログ仕様の更新
2-2.テーブル定義の更新
2-1,2-2の作業は個別に実施してもシステムに影響はない
Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved.
カラムナフォーマットを利用したログ収集システム
29
・HDFS へのアップロード
・パーティショニング
・カラムナフォーマットへの変換
API
Request JSON
message
ETL HDFS
JSON
message
Processing
事前に最終出力のスキーマ情報を登録・更新しなければならな
い。システムは同期して ETL に反映する仕組みが必要。
Schema registryサービス担当
・データの設計
・スキーマの管理
Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved.
カラムナフォーマットでの変化
30
Schema-on-read Schema-on-write
Hadoop 初期 カラムナフォーマット登場以降
カラムナフォーマットの登場により、ログ収集システムは
Schema-on-write のアーキテクチャとなった
Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved.
カラムナフォーマットを利用した場合の課題
31
カラムナフォーマットはスキーマが必要
事前のログ設計
変換スキーマ管理の仕組
スキーマの管理とシステム内でスキーマの同期が必要となり、
多様なログを収集する弊害となる
Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved.
スキーマの柔軟性と保存、処理性能の整理
32
大項目 小項目 概要
スキーマ変更の強さ
ルールベースでの書き込み
(スキーマレス)
スキーマを使わずにルールベースでデータの
保持と復元ができる
要素名でのアクセス フィールドをカラム名でアクセスできる
要素の存在の有無に関わらないアクセス
要素の有無に関わらずフィールドにアクセス
できる
複雑なデータ構造の定義 ネストスキーマの定義 ネストを含む複雑なデータ構造を定義できる
保存、処理性能
データサイズ 保存時のデータサイズ
書き込み性能 書き込みの性能
読み込み性能
読み込みの性能
Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved.
フォーマットの比較
33
大項目 小項目 JSON ORC Parquet
スキーマ変更の強さ
ルールベースでの書き込み
(スキーマレス)
○ × ×
要素名でのアクセス ○ ○ ○
要素の存在の有無に関わらないアクセス ○
△
データ参照側
で実装
△
データ参照側
で実装
複雑なデータ構造の定義 ネストスキーマの定義 ○ ○ ○
保存、処理性能
データサイズ △ △ ○
書き込み性能 △ ○ △
読み込み性能 × ○ ○
Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved.
Yosegi と他のデータフォーマットの違い
34
• ヤフーにおけるログ収集システム
• ログ収集システムとデータフォーマット
• Yosegi と他のデータフォーマットの違い
• ネストスキーマの課題とアプローチ
• まとめ
Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved.
ヤフーのログ収集システムに求められる事
35
Schema-on-read Schema-on-write
Hadoop 導入初期 カラムナフォーマット登場以降
Schema-on-read
書き込みのスキーマレス +
高処理効率
schema-on-read を実現するために書き込みのスキーマ
レスと、高い処理効率が求められる。
Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved.
スキーマレスカラムナーフォーマットの開発
36
これまでの背景を課題感に「Yosegi」を
開発し OSS として公開。
Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved.
「Yosegi」とは
37
ヤフーがOSSとして公開しているスキーマレスカラムナフォーマット
• スキーマレスな読み書き
• カラムナフォーマットの高い圧縮率と高い処理性能
Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved.
カラムナフォーマットの特徴
38
• カラム単位の書き込み・読み込み
• Pushdown のサポート
• カラム単位のエンコーディング、圧縮
• etc…
Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved.
データサイズと書き込み性能の比較
39
0
500
1000
1500
2000
part customer partsupp orders lineitem
TPC-H 1000 書き込みの CPU TIME(min)
Yosegi ORC Parquet
ORC が書き込みにおいては早い。今回は gzip で比較を行っているが、ORC はバイナリのタイ
プによって圧縮レベルを低くしている。そのため、データサイズが少し大きくなっている。
0
50
100
150
200
250
300
Yosegi ORC Parquet
TPC-H 1000 データサイズ(GB)
Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved.
処理性能の比較
40
0
200
400
600
800
1000
1200
1400
1600
1800
q6 q16 q14 q1 q15 q11 q22 q2 q12 q20 q13 q10 q4 q3 q7 q8 q5 q9 q17 q18 q21
TPC-H 1000 CPU TIME(min)
Yosegi Apache ORC Apache parquet
処理性能は他のカラムナフォーマットと同等
Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved.
スキーマレスなカラム構築
41
{“col3”: “val”}
{“col1”: “val”, “col5”: “val”}
{“col2”: “val”, “col4”: “val”, “col5”:
“val”} 入力データ
内部データ
col2,col4 を
動的に追加
col1,col5 を
動的に追加
Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved.
ルールベースのカラムデータ書きこみ
42
col1[0] col1[1] col1[2]
col2[0] col2[2]
col3[0] col3[1] col3[2]
Root
col1 col2 col3
[0]
[1]
[2]
[0]
[2]
[0]
[1]
[2]
カラム名で木構造を作成。
各ノードには同じカラム名
のカラムを配列で保持する
書き込み処理
木構造のデータを各ノード毎にバイト
配列として書き出す。
メタと実データは分離し、読み込みの
際はメタを読み込みデータ構造を復元
する。
実データ領域
Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved.
Map 型の扱い
43
Yosegi では Map 型は存在せず、データ構造は Struct となる
Map 型で参照した場合には以下の制約がある
1.Key の存在の有無が判定できない
2.Key が無くて NULL か、value が NULL か区別できない
3.カラム名で構成されるため Key は String 型のみ
Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved.
フォーマットの比較
44
大項目 小項目 JSON ORC Parquet Yosegi
スキーマ変更の強さ
ルールベースでの書き込み
(スキーマレス)
○ × × ○
要素名でのアクセス ○ ○ ○ ○
要素の存在の有無に関わらないアクセ
ス
○
△
データ参照側
で実装
△
データ参照側
で実装
○
複雑なデータ構造の定義 ネストスキーマの定義 ○ ○ ○ ○
保存、処理性能
データサイズ △ △ ○ ○
書き込み性能 △ ○ △ △
読み込み性能 × ○ ○ ○
Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved.
Yosegi の Hive テーブル更新
45
JSON と同様に Replace Columns は使えない。
Hive の「DDLTask」で許可されている SerDe
のクラス名がハードコードされている。
現時点では JSON 同様にテーブルの再作成をし
た方が早い
Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved.
スキーマの更新業務
46
サービス担当 データ利用担当
1.ログ仕様の変更依頼
2-1.ログ仕様の更新 2-2.テーブル定義の更新
ログ仕様の更新とテーブル定義の更新は同時に行わなくても良
い。
Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved.
Yosegi を利用したログ収集システム
47
API
Request JSON
message
ETL
HDFS
JSON
message
Processing
・HDFS へのアップロード
・パーティショニング
・Yosegi への変換
JSON と同様にシンプルなログ収集システムが構築可能
Yosegi
File
Schema registry
Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved.
実現したこと
48
Schema-on-read Schema-on-write
Hadoop 導入初期 カラムナフォーマット登場以降
Schema-on-read
Yosegi
「Yosegi」により Schema-on-read のアーキテクチャと
高い処理性能の両立を実現
Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved.
ネストスキーマの課題とアプローチ
49
• ヤフーにおけるログ収集システム
• ログ収集システムとデータフォーマット
• Yosegi と他のデータフォーマットの違い
• ネストスキーマの課題とアプローチ
• まとめ
Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved.
従来のヤフーでのログ仕様変更の対応
50
Map 本来の使い方ではなく、JSON のように任意の
key, value を入れられる設計が採用された
ログ
共通フィールド(約40項目)
Map<String,String>
Array<Map<String,>String>
サービス共通のログフィール
ドとサービスが任意に拡張で
きるフィールドを用意。
サービスA{
検索に関する情報
}
サービスB{
商品に関する情報
}
サービスC{
コンテンツに関する情報
}
拡張フィールドには Map を
使って任意の key, value を
付与できる
Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved.
Map型の項目追加と参照
51
Map 型で便利フィールドを作り、入力データのスキーマとテーブ
ル更新を不要にしてしまう方法
データを入れる側、使う側でスキーマの変更をしなくてよいので
業務への負担が少ない
CREATE TABLE t_1(
option MAP<STRING,STRING>
)
SELECT option[“opt1”] …
SELECT option[“opt2”] …
参照したい Key を指定するだけ
“option” : {
“opt1” : “value” ,
“opt2” : “value” ,
…
}
任意の key, value を
セットするだけ
このフィールドへの項目追加は
テーブルを変更しなくて良い
Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved.
肥大化する Map フィールド
52
この便利フィールドを使うことにより、日々
のログ仕様の変更の業務負荷を軽減している
(任意のフィールドについては管理していないとも言える)
Map に含まれるユニーク key 数
約3500Key
Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved.
Map型のデメリット
53
カラムナフォーマットのメリットである必要なカラムを処
理するというメリットが無くなってしまう
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
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 が読み込まれ、
特定の Key のみを読み込むのが困難
Key, Value の配列から Map
のデータ構造を個別に生成
Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved.
ヤフーでの Map 多用の影響
54
Map を多用したせいで以下の二点に影響を
与えている
・カラムナフォーマットを採用しても CPU
リソース削減がいまいちだった
・Map を前提にしたログ設計が慣習的に
なってしまった
Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved.
クエリエンジンとネストスキーマ
55
クエリエンジンはネストスキーマの Pushdown が対応していない事が多い
(各 OSS の ISSUE で見かけるので対応は進んでいると思われる)
timestamp
(BIGINT)
Items
(Struct)
item_id
(STRING)
price
(BIGINT)
number
(INT)
15167737
62
I_005 350 2
SELECT
items.price
WHERE
…
処理に必要なカラムは items.price でも親の items 以下全てのカラムが読み込まれる
Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved.
処理効率が良いスキーマ
56
timestamp
(BIGINT)
Items_item_id
(STRING)
Items_price
(BIGINT)
Items_number
(INT)
1516773762 I_005 350 2
timestamp
(BIGINT)
Items
(Struct)
item_id
(STRING)
price
(BIGINT)
number
(INT)
1516773762 I_005 350 2
SELECT
items_price
WHERE
…
フラットなスキーマに変更
SELECT
items.price
WHERE
…
ネストスキーマではなくフラットなスキーマでログを設計する
Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved.
フラットなスキーマは困難
57
フラットなスキーマにするためには、正
規化が必要となるが、ロギング時に正規
化するのは現実的でない
結果ネストスキーマでの実装が自然とな
る
Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved.
ヤフーでの課題
58
Map型の運用軽減を目的にした利用
クエリエンジンはネストスキーマが苦手
フラットスキーマのロギングが困難
Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved.
Yosegi でのアプローチ
59
ファイルを読み込むときに、ネストスキーマをフラットスキーマとして読
み込めれば、クエリエンジンで pushdown が有効になる
timestamp
(BIGINT)
total_price
(BIGINT)
Items
(ARRAY)
Items
(Struct)
item_id
(STRING)
price
(BIGINT)
number
(INT)
1516773762 1000
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
Yosegi File
Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved.
Expand & Flatten
60
timestamp
(BIGINT)
total_price
(BIGINT)
Items
(STRUCT)
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
読み込み処理
クエリエンジンtimestamp
(BIGINT)
total_price
(BIGINT)
Items
(ARRAY)
Items
(Struct)
item_id
(STRING)
price
(BIGINT)
number
(INT)
1516773762 1000
I_001 300 1
I_005 350 2
1516773765 200 I_002 50 4
Expand , Flatten を設定
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
Expand : ‘items’
Flatten :
items.item_id -> item_id
items.price -> price
items.number -> number
Expand
Flatten
Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved.
読み込みの処理性能
61
0
500
1000
1500
2000
2500
3000
Nest schema Expand & Flatten
CPU TIME(min)
90% down
※自社内のログでの性能比較
Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved.
ユースケース
62
HDFS
Processing
データ利用担当
Map を含むネストス
キーマのテーブル
フラットスキーマの
テーブル
低頻度な試験的を行うために運用
コストが低いテーブル定義
定常的な処理や高頻度に実行され
る処理性能優先のテーブル定義
ネストスキーマのデータ設計でも運用負荷と処理性能のバ
ランスを取ることができる
Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved.
まとめ
63
• ヤフーにおけるログ収集システム
• ログ収集システムとデータフォーマット
• Yosegi と他のデータフォーマットの違い
• ネストスキーマの課題とアプローチ
• まとめ
Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved.
schema-on-read と処理性能の両立
64
Schema-on-read Schema-on-write
Hadoop 導入初期 カラムナフォーマット登場以降
Schema-on-read
Yosegi
「Yosegi」によりスキーマの柔軟性と高い処理性能を両立
しつつ、スキーマ管理が不要なログ収集システムを実現
Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved.
ネストスキーマへの対応
65
ネストスキーマをフラットスキーマとして読み込むことによ
り、クエリエンジンの Pushdown を有効にする
timestamp
(BIGINT)
total_price
(BIGINT)
Items
(ARRAY)
Items
(Struct)
item_id
(STRING)
price
(BIGINT)
number
(INT)
1516773762 1000
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
Yosegi File
Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved.
さいごに
66
Yosegi はたくさんの人に使ってもらい改善
をしていきたいと考えています。
メーリングリストもありますので、なんでも
気軽に連絡ください。
■ 参考資料
- GitHub:
https://github.com/yahoojapan/yosegi
- Tech Blog:
https://techblog.yahoo.co.jp/oss/introduction_of_datalake_and_mds/
※Multiple Dimension Spread(MDS)は Yosegi の旧プロダクト名となります。

More Related Content

What's hot

Elasticsearchを使うときの注意点 公開用スライド
Elasticsearchを使うときの注意点 公開用スライドElasticsearchを使うときの注意点 公開用スライド
Elasticsearchを使うときの注意点 公開用スライド崇介 藤井
 
GoldenGateテクニカルセミナー3「Oracle GoldenGate Technical Deep Dive」(2016/5/11)
GoldenGateテクニカルセミナー3「Oracle GoldenGate Technical Deep Dive」(2016/5/11)GoldenGateテクニカルセミナー3「Oracle GoldenGate Technical Deep Dive」(2016/5/11)
GoldenGateテクニカルセミナー3「Oracle GoldenGate Technical Deep Dive」(2016/5/11)オラクルエンジニア通信
 
Apache Sparkに手を出してヤケドしないための基本 ~「Apache Spark入門より」~ (デブサミ 2016 講演資料)
Apache Sparkに手を出してヤケドしないための基本 ~「Apache Spark入門より」~ (デブサミ 2016 講演資料)Apache Sparkに手を出してヤケドしないための基本 ~「Apache Spark入門より」~ (デブサミ 2016 講演資料)
Apache Sparkに手を出してヤケドしないための基本 ~「Apache Spark入門より」~ (デブサミ 2016 講演資料)NTT DATA OSS Professional Services
 
[B31] LOGMinerってレプリケーションソフトで使われているけどどうなってる? by Toshiya Morita
[B31] LOGMinerってレプリケーションソフトで使われているけどどうなってる? by Toshiya Morita[B31] LOGMinerってレプリケーションソフトで使われているけどどうなってる? by Toshiya Morita
[B31] LOGMinerってレプリケーションソフトで使われているけどどうなってる? by Toshiya MoritaInsight Technology, Inc.
 
並行処理初心者のためのAkka入門
並行処理初心者のためのAkka入門並行処理初心者のためのAkka入門
並行処理初心者のためのAkka入門Yoshimura Soichiro
 
JDKの選択肢とサーバーサイドでの選び方
JDKの選択肢とサーバーサイドでの選び方JDKの選択肢とサーバーサイドでの選び方
JDKの選択肢とサーバーサイドでの選び方Takahiro YAMADA
 
Apache Kafkaって本当に大丈夫?~故障検証のオーバービューと興味深い挙動の紹介~
Apache Kafkaって本当に大丈夫?~故障検証のオーバービューと興味深い挙動の紹介~Apache Kafkaって本当に大丈夫?~故障検証のオーバービューと興味深い挙動の紹介~
Apache Kafkaって本当に大丈夫?~故障検証のオーバービューと興味深い挙動の紹介~NTT DATA OSS Professional Services
 
HDFSのスケーラビリティの限界を突破するためのさまざまな取り組み | Hadoop / Spark Conference Japan 2019 #hc...
HDFSのスケーラビリティの限界を突破するためのさまざまな取り組み | Hadoop / Spark Conference Japan 2019  #hc...HDFSのスケーラビリティの限界を突破するためのさまざまな取り組み | Hadoop / Spark Conference Japan 2019  #hc...
HDFSのスケーラビリティの限界を突破するためのさまざまな取り組み | Hadoop / Spark Conference Japan 2019 #hc...Yahoo!デベロッパーネットワーク
 
トランザクションの設計と進化
トランザクションの設計と進化トランザクションの設計と進化
トランザクションの設計と進化Kumazaki Hiroki
 
Dockerからcontainerdへの移行
Dockerからcontainerdへの移行Dockerからcontainerdへの移行
Dockerからcontainerdへの移行Akihiro Suda
 
ポスト・ラムダアーキテクチャの切り札? Apache Hudi(NTTデータ テクノロジーカンファレンス 2020 発表資料)
ポスト・ラムダアーキテクチャの切り札? Apache Hudi(NTTデータ テクノロジーカンファレンス 2020 発表資料)ポスト・ラムダアーキテクチャの切り札? Apache Hudi(NTTデータ テクノロジーカンファレンス 2020 発表資料)
ポスト・ラムダアーキテクチャの切り札? Apache Hudi(NTTデータ テクノロジーカンファレンス 2020 発表資料)NTT DATA Technology & Innovation
 
Oracle GoldenGateでの資料採取(トラブル時に採取すべき資料)
Oracle GoldenGateでの資料採取(トラブル時に採取すべき資料)Oracle GoldenGateでの資料採取(トラブル時に採取すべき資料)
Oracle GoldenGateでの資料採取(トラブル時に採取すべき資料)オラクルエンジニア通信
 
単なるキャッシュじゃないよ!?infinispanの紹介
単なるキャッシュじゃないよ!?infinispanの紹介単なるキャッシュじゃないよ!?infinispanの紹介
単なるキャッシュじゃないよ!?infinispanの紹介AdvancedTechNight
 
Oracle Database: リリースモデルとアップグレード・パッチ計画 (2021年2月版)
Oracle Database: リリースモデルとアップグレード・パッチ計画 (2021年2月版)Oracle Database: リリースモデルとアップグレード・パッチ計画 (2021年2月版)
Oracle Database: リリースモデルとアップグレード・パッチ計画 (2021年2月版)オラクルエンジニア通信
 
分散処理基盤Apache Hadoop入門とHadoopエコシステムの最新技術動向 (オープンソースカンファレンス 2015 Tokyo/Spring 講...
分散処理基盤Apache Hadoop入門とHadoopエコシステムの最新技術動向 (オープンソースカンファレンス 2015 Tokyo/Spring 講...分散処理基盤Apache Hadoop入門とHadoopエコシステムの最新技術動向 (オープンソースカンファレンス 2015 Tokyo/Spring 講...
分散処理基盤Apache Hadoop入門とHadoopエコシステムの最新技術動向 (オープンソースカンファレンス 2015 Tokyo/Spring 講...NTT DATA OSS Professional Services
 

What's hot (20)

Elasticsearchを使うときの注意点 公開用スライド
Elasticsearchを使うときの注意点 公開用スライドElasticsearchを使うときの注意点 公開用スライド
Elasticsearchを使うときの注意点 公開用スライド
 
GoldenGateテクニカルセミナー3「Oracle GoldenGate Technical Deep Dive」(2016/5/11)
GoldenGateテクニカルセミナー3「Oracle GoldenGate Technical Deep Dive」(2016/5/11)GoldenGateテクニカルセミナー3「Oracle GoldenGate Technical Deep Dive」(2016/5/11)
GoldenGateテクニカルセミナー3「Oracle GoldenGate Technical Deep Dive」(2016/5/11)
 
Apache Sparkに手を出してヤケドしないための基本 ~「Apache Spark入門より」~ (デブサミ 2016 講演資料)
Apache Sparkに手を出してヤケドしないための基本 ~「Apache Spark入門より」~ (デブサミ 2016 講演資料)Apache Sparkに手を出してヤケドしないための基本 ~「Apache Spark入門より」~ (デブサミ 2016 講演資料)
Apache Sparkに手を出してヤケドしないための基本 ~「Apache Spark入門より」~ (デブサミ 2016 講演資料)
 
[B31] LOGMinerってレプリケーションソフトで使われているけどどうなってる? by Toshiya Morita
[B31] LOGMinerってレプリケーションソフトで使われているけどどうなってる? by Toshiya Morita[B31] LOGMinerってレプリケーションソフトで使われているけどどうなってる? by Toshiya Morita
[B31] LOGMinerってレプリケーションソフトで使われているけどどうなってる? by Toshiya Morita
 
並行処理初心者のためのAkka入門
並行処理初心者のためのAkka入門並行処理初心者のためのAkka入門
並行処理初心者のためのAkka入門
 
JDKの選択肢とサーバーサイドでの選び方
JDKの選択肢とサーバーサイドでの選び方JDKの選択肢とサーバーサイドでの選び方
JDKの選択肢とサーバーサイドでの選び方
 
Apache Sparkのご紹介 (後半:技術トピック)
Apache Sparkのご紹介 (後半:技術トピック)Apache Sparkのご紹介 (後半:技術トピック)
Apache Sparkのご紹介 (後半:技術トピック)
 
Apache Kafkaって本当に大丈夫?~故障検証のオーバービューと興味深い挙動の紹介~
Apache Kafkaって本当に大丈夫?~故障検証のオーバービューと興味深い挙動の紹介~Apache Kafkaって本当に大丈夫?~故障検証のオーバービューと興味深い挙動の紹介~
Apache Kafkaって本当に大丈夫?~故障検証のオーバービューと興味深い挙動の紹介~
 
Oracle GoldenGate アーキテクチャと基本機能
Oracle GoldenGate アーキテクチャと基本機能Oracle GoldenGate アーキテクチャと基本機能
Oracle GoldenGate アーキテクチャと基本機能
 
HDFSのスケーラビリティの限界を突破するためのさまざまな取り組み | Hadoop / Spark Conference Japan 2019 #hc...
HDFSのスケーラビリティの限界を突破するためのさまざまな取り組み | Hadoop / Spark Conference Japan 2019  #hc...HDFSのスケーラビリティの限界を突破するためのさまざまな取り組み | Hadoop / Spark Conference Japan 2019  #hc...
HDFSのスケーラビリティの限界を突破するためのさまざまな取り組み | Hadoop / Spark Conference Japan 2019 #hc...
 
Oracle Database (CDB) on Docker を動かしてみる
Oracle Database (CDB) on Docker を動かしてみるOracle Database (CDB) on Docker を動かしてみる
Oracle Database (CDB) on Docker を動かしてみる
 
トランザクションの設計と進化
トランザクションの設計と進化トランザクションの設計と進化
トランザクションの設計と進化
 
Dockerからcontainerdへの移行
Dockerからcontainerdへの移行Dockerからcontainerdへの移行
Dockerからcontainerdへの移行
 
Oracle GoldenGate導入Tips
Oracle GoldenGate導入TipsOracle GoldenGate導入Tips
Oracle GoldenGate導入Tips
 
ポスト・ラムダアーキテクチャの切り札? Apache Hudi(NTTデータ テクノロジーカンファレンス 2020 発表資料)
ポスト・ラムダアーキテクチャの切り札? Apache Hudi(NTTデータ テクノロジーカンファレンス 2020 発表資料)ポスト・ラムダアーキテクチャの切り札? Apache Hudi(NTTデータ テクノロジーカンファレンス 2020 発表資料)
ポスト・ラムダアーキテクチャの切り札? Apache Hudi(NTTデータ テクノロジーカンファレンス 2020 発表資料)
 
Structured Streaming - The Internal -
Structured Streaming - The Internal -Structured Streaming - The Internal -
Structured Streaming - The Internal -
 
Oracle GoldenGateでの資料採取(トラブル時に採取すべき資料)
Oracle GoldenGateでの資料採取(トラブル時に採取すべき資料)Oracle GoldenGateでの資料採取(トラブル時に採取すべき資料)
Oracle GoldenGateでの資料採取(トラブル時に採取すべき資料)
 
単なるキャッシュじゃないよ!?infinispanの紹介
単なるキャッシュじゃないよ!?infinispanの紹介単なるキャッシュじゃないよ!?infinispanの紹介
単なるキャッシュじゃないよ!?infinispanの紹介
 
Oracle Database: リリースモデルとアップグレード・パッチ計画 (2021年2月版)
Oracle Database: リリースモデルとアップグレード・パッチ計画 (2021年2月版)Oracle Database: リリースモデルとアップグレード・パッチ計画 (2021年2月版)
Oracle Database: リリースモデルとアップグレード・パッチ計画 (2021年2月版)
 
分散処理基盤Apache Hadoop入門とHadoopエコシステムの最新技術動向 (オープンソースカンファレンス 2015 Tokyo/Spring 講...
分散処理基盤Apache Hadoop入門とHadoopエコシステムの最新技術動向 (オープンソースカンファレンス 2015 Tokyo/Spring 講...分散処理基盤Apache Hadoop入門とHadoopエコシステムの最新技術動向 (オープンソースカンファレンス 2015 Tokyo/Spring 講...
分散処理基盤Apache Hadoop入門とHadoopエコシステムの最新技術動向 (オープンソースカンファレンス 2015 Tokyo/Spring 講...
 

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

Apache Kafkaによるログ転送とパフォーマンスチューニング - Bonfire Backend #2 -
Apache Kafkaによるログ転送とパフォーマンスチューニング - Bonfire Backend #2 -Apache Kafkaによるログ転送とパフォーマンスチューニング - Bonfire Backend #2 -
Apache Kafkaによるログ転送とパフォーマンスチューニング - Bonfire Backend #2 -Yahoo!デベロッパーネットワーク
 
Introduction to JIT Compiler in JVM
Introduction to JIT Compiler in JVMIntroduction to JIT Compiler in JVM
Introduction to JIT Compiler in JVMKoichi Sakata
 
MBAAで覚えるDBREの大事なおしごと
MBAAで覚えるDBREの大事なおしごとMBAAで覚えるDBREの大事なおしごと
MBAAで覚えるDBREの大事なおしごとInsight Technology, Inc.
 
20130313 OSCA Hadoopセミナー
20130313 OSCA Hadoopセミナー20130313 OSCA Hadoopセミナー
20130313 OSCA HadoopセミナーIchiro Fukuda
 
Beginner must-see! A future that can be opened by learning Hadoop
Beginner must-see! A future that can be opened by learning HadoopBeginner must-see! A future that can be opened by learning Hadoop
Beginner must-see! A future that can be opened by learning HadoopDataWorks Summit
 
FPGAによる大規模データ処理の高速化
FPGAによる大規模データ処理の高速化FPGAによる大規模データ処理の高速化
FPGAによる大規模データ処理の高速化Kazunori Sato
 
Hadoop conferencejapan2011
Hadoop conferencejapan2011Hadoop conferencejapan2011
Hadoop conferencejapan2011Ichiro Fukuda
 
Unification of the middle scale services by Nuxt.js
Unification of the middle scale services by Nuxt.jsUnification of the middle scale services by Nuxt.js
Unification of the middle scale services by Nuxt.jsHajimeSasanuma
 
Apache Pulsarの近況 & meetup 北京の参加報告 @PulsarMeetupJapan_20190904
Apache Pulsarの近況 & meetup 北京の参加報告 @PulsarMeetupJapan_20190904Apache Pulsarの近況 & meetup 北京の参加報告 @PulsarMeetupJapan_20190904
Apache Pulsarの近況 & meetup 北京の参加報告 @PulsarMeetupJapan_20190904Nozomi Kurihara
 
DLモデル開発中の雑務が嫌で支援プラットフォームを作った話
DLモデル開発中の雑務が嫌で支援プラットフォームを作った話DLモデル開発中の雑務が嫌で支援プラットフォームを作った話
DLモデル開発中の雑務が嫌で支援プラットフォームを作った話Kamonohashi
 
CloudHubのログバックアップについて
CloudHubのログバックアップについてCloudHubのログバックアップについて
CloudHubのログバックアップについてMuleSoft Meetup Tokyo
 
DLLAB Engineer Days:AIチームが履歴やリソース管理で疲弊してたので開発基盤作ってOSS化した話
DLLAB Engineer Days:AIチームが履歴やリソース管理で疲弊してたので開発基盤作ってOSS化した話DLLAB Engineer Days:AIチームが履歴やリソース管理で疲弊してたので開発基盤作ってOSS化した話
DLLAB Engineer Days:AIチームが履歴やリソース管理で疲弊してたので開発基盤作ってOSS化した話Kamonohashi
 

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

Apache Kafkaによるログ転送とパフォーマンスチューニング - Bonfire Backend #2 -
Apache Kafkaによるログ転送とパフォーマンスチューニング - Bonfire Backend #2 -Apache Kafkaによるログ転送とパフォーマンスチューニング - Bonfire Backend #2 -
Apache Kafkaによるログ転送とパフォーマンスチューニング - Bonfire Backend #2 -
 
Introduction to JIT Compiler in JVM
Introduction to JIT Compiler in JVMIntroduction to JIT Compiler in JVM
Introduction to JIT Compiler in JVM
 
MBAAで覚えるDBREの大事なおしごと
MBAAで覚えるDBREの大事なおしごとMBAAで覚えるDBREの大事なおしごと
MBAAで覚えるDBREの大事なおしごと
 
Multiple Dimension Spreadのご紹介
Multiple Dimension Spreadのご紹介Multiple Dimension Spreadのご紹介
Multiple Dimension Spreadのご紹介
 
20130313 OSCA Hadoopセミナー
20130313 OSCA Hadoopセミナー20130313 OSCA Hadoopセミナー
20130313 OSCA Hadoopセミナー
 
YJTC18 A-1 データセンタネットワークの取り組み
YJTC18 A-1 データセンタネットワークの取り組みYJTC18 A-1 データセンタネットワークの取り組み
YJTC18 A-1 データセンタネットワークの取り組み
 
Beginner must-see! A future that can be opened by learning Hadoop
Beginner must-see! A future that can be opened by learning HadoopBeginner must-see! A future that can be opened by learning Hadoop
Beginner must-see! A future that can be opened by learning Hadoop
 
現場のインフラエンジニアから見たヤフー #ヤフー名古屋
現場のインフラエンジニアから見たヤフー #ヤフー名古屋現場のインフラエンジニアから見たヤフー #ヤフー名古屋
現場のインフラエンジニアから見たヤフー #ヤフー名古屋
 
マルチビッグデータの活用を支える DWHの作り方
マルチビッグデータの活用を支える DWHの作り方マルチビッグデータの活用を支える DWHの作り方
マルチビッグデータの活用を支える DWHの作り方
 
FPGAによる大規模データ処理の高速化
FPGAによる大規模データ処理の高速化FPGAによる大規模データ処理の高速化
FPGAによる大規模データ処理の高速化
 
ヤフーを支えるフラッシュストレージ
ヤフーを支えるフラッシュストレージヤフーを支えるフラッシュストレージ
ヤフーを支えるフラッシュストレージ
 
Hadoop conferencejapan2011
Hadoop conferencejapan2011Hadoop conferencejapan2011
Hadoop conferencejapan2011
 
YJTC18 A-1 大規模サーバの戦略
YJTC18 A-1 大規模サーバの戦略YJTC18 A-1 大規模サーバの戦略
YJTC18 A-1 大規模サーバの戦略
 
Apache Hadoopの現在と未来
Apache Hadoopの現在と未来Apache Hadoopの現在と未来
Apache Hadoopの現在と未来
 
Unification of the middle scale services by Nuxt.js
Unification of the middle scale services by Nuxt.jsUnification of the middle scale services by Nuxt.js
Unification of the middle scale services by Nuxt.js
 
Storm の新機能について @HSCR #hadoopreading
Storm の新機能について @HSCR #hadoopreadingStorm の新機能について @HSCR #hadoopreading
Storm の新機能について @HSCR #hadoopreading
 
Apache Pulsarの近況 & meetup 北京の参加報告 @PulsarMeetupJapan_20190904
Apache Pulsarの近況 & meetup 北京の参加報告 @PulsarMeetupJapan_20190904Apache Pulsarの近況 & meetup 北京の参加報告 @PulsarMeetupJapan_20190904
Apache Pulsarの近況 & meetup 北京の参加報告 @PulsarMeetupJapan_20190904
 
DLモデル開発中の雑務が嫌で支援プラットフォームを作った話
DLモデル開発中の雑務が嫌で支援プラットフォームを作った話DLモデル開発中の雑務が嫌で支援プラットフォームを作った話
DLモデル開発中の雑務が嫌で支援プラットフォームを作った話
 
CloudHubのログバックアップについて
CloudHubのログバックアップについてCloudHubのログバックアップについて
CloudHubのログバックアップについて
 
DLLAB Engineer Days:AIチームが履歴やリソース管理で疲弊してたので開発基盤作ってOSS化した話
DLLAB Engineer Days:AIチームが履歴やリソース管理で疲弊してたので開発基盤作ってOSS化した話DLLAB Engineer Days:AIチームが履歴やリソース管理で疲弊してたので開発基盤作ってOSS化した話
DLLAB Engineer Days:AIチームが履歴やリソース管理で疲弊してたので開発基盤作ってOSS化した話
 

More from Yahoo!デベロッパーネットワーク

ヤフーでは開発迅速性と品質のバランスをどう取ってるか
ヤフーでは開発迅速性と品質のバランスをどう取ってるかヤフーでは開発迅速性と品質のバランスをどう取ってるか
ヤフーでは開発迅速性と品質のバランスをどう取ってるかYahoo!デベロッパーネットワーク
 
データの価値を最大化させるためのデザイン~データビジュアライゼーションの方法~ #devsumi 17-E-2
データの価値を最大化させるためのデザイン~データビジュアライゼーションの方法~ #devsumi 17-E-2データの価値を最大化させるためのデザイン~データビジュアライゼーションの方法~ #devsumi 17-E-2
データの価値を最大化させるためのデザイン~データビジュアライゼーションの方法~ #devsumi 17-E-2Yahoo!デベロッパーネットワーク
 
ヤフーを支えるセキュリティ ~サイバー攻撃を防ぐエンジニアの仕事とは~ #yjtc
ヤフーを支えるセキュリティ ~サイバー攻撃を防ぐエンジニアの仕事とは~ #yjtcヤフーを支えるセキュリティ ~サイバー攻撃を防ぐエンジニアの仕事とは~ #yjtc
ヤフーを支えるセキュリティ ~サイバー攻撃を防ぐエンジニアの仕事とは~ #yjtcYahoo!デベロッパーネットワーク
 
Yahoo! JAPANのIaaSを支えるKubernetesクラスタ、アップデート自動化への挑戦 #yjtc
Yahoo! JAPANのIaaSを支えるKubernetesクラスタ、アップデート自動化への挑戦 #yjtcYahoo! JAPANのIaaSを支えるKubernetesクラスタ、アップデート自動化への挑戦 #yjtc
Yahoo! JAPANのIaaSを支えるKubernetesクラスタ、アップデート自動化への挑戦 #yjtcYahoo!デベロッパーネットワーク
 
ヤフーのAIプラットフォーム紹介 ~AIテックカンパニーを支えるデータ基盤~ #yjtc
ヤフーのAIプラットフォーム紹介 ~AIテックカンパニーを支えるデータ基盤~ #yjtcヤフーのAIプラットフォーム紹介 ~AIテックカンパニーを支えるデータ基盤~ #yjtc
ヤフーのAIプラットフォーム紹介 ~AIテックカンパニーを支えるデータ基盤~ #yjtcYahoo!デベロッパーネットワーク
 
新技術を使った次世代の商品の見せ方 ~ヤフオク!のマルチビュー機能~ #yjtc
新技術を使った次世代の商品の見せ方 ~ヤフオク!のマルチビュー機能~ #yjtc新技術を使った次世代の商品の見せ方 ~ヤフオク!のマルチビュー機能~ #yjtc
新技術を使った次世代の商品の見せ方 ~ヤフオク!のマルチビュー機能~ #yjtcYahoo!デベロッパーネットワーク
 
PC版Yahoo!メールリニューアル ~サービスのUI/UX統合と改善プロセス~ #yjtc
PC版Yahoo!メールリニューアル ~サービスのUI/UX統合と改善プロセス~ #yjtcPC版Yahoo!メールリニューアル ~サービスのUI/UX統合と改善プロセス~ #yjtc
PC版Yahoo!メールリニューアル ~サービスのUI/UX統合と改善プロセス~ #yjtcYahoo!デベロッパーネットワーク
 
モブデザインによる多職種チームのコミュニケーション改善 #yjtc
モブデザインによる多職種チームのコミュニケーション改善 #yjtcモブデザインによる多職種チームのコミュニケーション改善 #yjtc
モブデザインによる多職種チームのコミュニケーション改善 #yjtcYahoo!デベロッパーネットワーク
 
ユーザーの地域を考慮した検索入力補助機能の改善の試み #yjtc
ユーザーの地域を考慮した検索入力補助機能の改善の試み #yjtcユーザーの地域を考慮した検索入力補助機能の改善の試み #yjtc
ユーザーの地域を考慮した検索入力補助機能の改善の試み #yjtcYahoo!デベロッパーネットワーク
 

More from Yahoo!デベロッパーネットワーク (20)

ゼロから始める転移学習
ゼロから始める転移学習ゼロから始める転移学習
ゼロから始める転移学習
 
継続的なモデルモニタリングを実現するKubernetes Operator
継続的なモデルモニタリングを実現するKubernetes Operator継続的なモデルモニタリングを実現するKubernetes Operator
継続的なモデルモニタリングを実現するKubernetes Operator
 
ヤフーでは開発迅速性と品質のバランスをどう取ってるか
ヤフーでは開発迅速性と品質のバランスをどう取ってるかヤフーでは開発迅速性と品質のバランスをどう取ってるか
ヤフーでは開発迅速性と品質のバランスをどう取ってるか
 
オンプレML基盤on Kubernetes パネルディスカッション
オンプレML基盤on Kubernetes パネルディスカッションオンプレML基盤on Kubernetes パネルディスカッション
オンプレML基盤on Kubernetes パネルディスカッション
 
LakeTahoe
LakeTahoeLakeTahoe
LakeTahoe
 
オンプレML基盤on Kubernetes 〜Yahoo! JAPAN AIPF〜
オンプレML基盤on Kubernetes 〜Yahoo! JAPAN AIPF〜オンプレML基盤on Kubernetes 〜Yahoo! JAPAN AIPF〜
オンプレML基盤on Kubernetes 〜Yahoo! JAPAN AIPF〜
 
Persistent-memory-native Database High-availability Feature
Persistent-memory-native Database High-availability FeaturePersistent-memory-native Database High-availability Feature
Persistent-memory-native Database High-availability Feature
 
データの価値を最大化させるためのデザイン~データビジュアライゼーションの方法~ #devsumi 17-E-2
データの価値を最大化させるためのデザイン~データビジュアライゼーションの方法~ #devsumi 17-E-2データの価値を最大化させるためのデザイン~データビジュアライゼーションの方法~ #devsumi 17-E-2
データの価値を最大化させるためのデザイン~データビジュアライゼーションの方法~ #devsumi 17-E-2
 
eコマースと実店舗の相互利益を目指したデザイン #yjtc
eコマースと実店舗の相互利益を目指したデザイン #yjtceコマースと実店舗の相互利益を目指したデザイン #yjtc
eコマースと実店舗の相互利益を目指したデザイン #yjtc
 
ヤフーを支えるセキュリティ ~サイバー攻撃を防ぐエンジニアの仕事とは~ #yjtc
ヤフーを支えるセキュリティ ~サイバー攻撃を防ぐエンジニアの仕事とは~ #yjtcヤフーを支えるセキュリティ ~サイバー攻撃を防ぐエンジニアの仕事とは~ #yjtc
ヤフーを支えるセキュリティ ~サイバー攻撃を防ぐエンジニアの仕事とは~ #yjtc
 
Yahoo! JAPANのIaaSを支えるKubernetesクラスタ、アップデート自動化への挑戦 #yjtc
Yahoo! JAPANのIaaSを支えるKubernetesクラスタ、アップデート自動化への挑戦 #yjtcYahoo! JAPANのIaaSを支えるKubernetesクラスタ、アップデート自動化への挑戦 #yjtc
Yahoo! JAPANのIaaSを支えるKubernetesクラスタ、アップデート自動化への挑戦 #yjtc
 
ビッグデータから人々のムードを捉える #yjtc
ビッグデータから人々のムードを捉える #yjtcビッグデータから人々のムードを捉える #yjtc
ビッグデータから人々のムードを捉える #yjtc
 
サイエンス領域におけるMLOpsの取り組み #yjtc
サイエンス領域におけるMLOpsの取り組み #yjtcサイエンス領域におけるMLOpsの取り組み #yjtc
サイエンス領域におけるMLOpsの取り組み #yjtc
 
ヤフーのAIプラットフォーム紹介 ~AIテックカンパニーを支えるデータ基盤~ #yjtc
ヤフーのAIプラットフォーム紹介 ~AIテックカンパニーを支えるデータ基盤~ #yjtcヤフーのAIプラットフォーム紹介 ~AIテックカンパニーを支えるデータ基盤~ #yjtc
ヤフーのAIプラットフォーム紹介 ~AIテックカンパニーを支えるデータ基盤~ #yjtc
 
Yahoo! JAPAN Tech Conference 2022 Day2 Keynote #yjtc
Yahoo! JAPAN Tech Conference 2022 Day2 Keynote #yjtcYahoo! JAPAN Tech Conference 2022 Day2 Keynote #yjtc
Yahoo! JAPAN Tech Conference 2022 Day2 Keynote #yjtc
 
新技術を使った次世代の商品の見せ方 ~ヤフオク!のマルチビュー機能~ #yjtc
新技術を使った次世代の商品の見せ方 ~ヤフオク!のマルチビュー機能~ #yjtc新技術を使った次世代の商品の見せ方 ~ヤフオク!のマルチビュー機能~ #yjtc
新技術を使った次世代の商品の見せ方 ~ヤフオク!のマルチビュー機能~ #yjtc
 
PC版Yahoo!メールリニューアル ~サービスのUI/UX統合と改善プロセス~ #yjtc
PC版Yahoo!メールリニューアル ~サービスのUI/UX統合と改善プロセス~ #yjtcPC版Yahoo!メールリニューアル ~サービスのUI/UX統合と改善プロセス~ #yjtc
PC版Yahoo!メールリニューアル ~サービスのUI/UX統合と改善プロセス~ #yjtc
 
モブデザインによる多職種チームのコミュニケーション改善 #yjtc
モブデザインによる多職種チームのコミュニケーション改善 #yjtcモブデザインによる多職種チームのコミュニケーション改善 #yjtc
モブデザインによる多職種チームのコミュニケーション改善 #yjtc
 
「新しいおうち探し」のためのAIアシスト検索 #yjtc
「新しいおうち探し」のためのAIアシスト検索 #yjtc「新しいおうち探し」のためのAIアシスト検索 #yjtc
「新しいおうち探し」のためのAIアシスト検索 #yjtc
 
ユーザーの地域を考慮した検索入力補助機能の改善の試み #yjtc
ユーザーの地域を考慮した検索入力補助機能の改善の試み #yjtcユーザーの地域を考慮した検索入力補助機能の改善の試み #yjtc
ユーザーの地域を考慮した検索入力補助機能の改善の試み #yjtc
 

Recently uploaded

デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)UEHARA, Tetsutaro
 
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...博三 太田
 
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)Hiroki Ichikura
 
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案sugiuralab
 
論文紹介: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
 
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfクラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfFumieNakayama
 
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
 
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfAWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfFumieNakayama
 
論文紹介: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
 
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
 
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものですiPride Co., Ltd.
 
論文紹介: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
 

Recently uploaded (12)

デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
 
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
 
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
 
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
 
論文紹介: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
 
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfクラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
 
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
 
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfAWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.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...
 
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」の紹介
 
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものです
 
論文紹介: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
 

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

  • 1. Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 2019年03月14日 井島 洸二 / ヤフー株式会社 Hadoop / Spark Conference Japan 2019 スキーマレスカラムナフォーマット「Yosegi」で実現する スキーマの柔軟性と処理性能を両立したログ収集システム
  • 2. Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 自己紹介 2 井島 洸二 ヤフー株式会社 データ&サイエンスソリューション統括本部 データプラットフォーム本部データデリバリー部 所属 Data Source Storage Processing Ingestion Analysis ヤフーのログを収集する領域を担当する部門 に所属 主に HDFS にログを収集し、ログを処理す るための環境を整える仕組みを担当
  • 3. Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. アジェンダ 3 • ヤフーにおけるログ収集システム • ログ収集システムとデータフォーマット • Yosegi と他のデータフォーマットの違い • ネストスキーマの課題とアプローチ • まとめ
  • 4. Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. ヤフーにおけるログ収集システム 4 • ヤフーにおけるログ収集システム • ログ収集システムとデータフォーマット • Yosegi と他のデータフォーマットの違い • ネストスキーマの課題とアプローチ • まとめ
  • 5. Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. ヤフーのログ収集システム 5 Server Web/App ヤフーでは日々発生する膨大なログを HDFS に保存し利 用するための「ログ収集システム」を構築している HDFS
  • 6. Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. ログの提供部門と利用部門 6 サービス部門 データサイエンス部門 ログの仕様についての業務調整 ヤフーではデータサイエンス部門が試行錯誤を繰り返すた め、ログの仕様変更は日々行われる
  • 7. Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. ログ収集のアプローチ 7 Schema-on-read 利用時にスキーマ定義する 収集時に制約が少ない 保存時の効率化が難しい Schema-on-write 保存時にスキーマを定義する 収集時に制約が多い 保存時の効率化が容易 ヤフーではサービスから多種多様なログを収集するため に、 schema-on-read のアプローチが向いている
  • 8. Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. ログ収集システムが扱っている種類と量 8 Hive のテーブル数 約900テーブル 発生するログの件数 約600億件/day ※ヤフー全体ではなく、担当システムで扱っているデータ量となります。
  • 9. Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. HDFS とデータフォーマット 9 HDFS アクセスログ 検索ログ 購買ログ 予約・決済 etc… 定型レポート アドホック分析 機械学習 etc… HDFS に保存するデータフォーマットは多様なスキーマ と膨大なログ量を考慮して選択する 多様なスキーマ 膨大なログ量の処理
  • 10. Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 従来のヤフーでのログ仕様変更の対応 10 Map 本来の使い方ではなく、JSON のように任意の key, value を入れられる設計が採用された ログ 共通フィールド(約40項目) Map<String,String> Array<Map<String,>String> サービス共通のログフィール ドとサービスが任意に拡張で きるフィールドを用意。 サービスA{ 検索に関する情報 } サービスB{ 商品に関する情報 } サービスC{ コンテンツに関する情報 } 拡張フィールドには Map を 使って任意の key, value を 付与できる
  • 11. Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. ログ収集システムとデータフォーマット 11 • ヤフーにおけるログ収集システム • ログ収集システムとデータフォーマット • Yosegi と他のデータフォーマットの違い • ネストスキーマの課題とアプローチ • まとめ
  • 12. Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 保存時のデータフォーマットの要件 12 保存時のフォーマットに求められる事 複雑なスキーマを扱える スキーマの変更に強い 読み込みの処理性能が良い
  • 13. Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. データフォーマットの選択肢 13 多様なスキーマを扱え、変更に強い JSON 処理性能が良い カラムナフォーマット(ORC, Parquet)
  • 14. Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. JSON 14 ルールベースで記述されているテキスト → スキーマを必要としない 複雑なデータ構造も表現可能
  • 15. Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. JSON の Hive テーブルの定義 15 読みたいデータ構造でテーブルを定義 テーブル定義にあわせて JSON から読み込まれる JSON ではフィールドの順序を持たないため、Key 名で データが参照される。
  • 16. Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. JSON のスキーマの更新業務 16 サービス担当 データ利用担当 1.ログ仕様の変更依頼 2-1.ログ仕様の更新 2-2.テーブル定義の更新 ログ仕様の更新とテーブル定義の更新は同時に行わなくても良い
  • 17. Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. Hive における JSON テーブルの更新 17 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. カラムの更新は制約が多いので、テーブルを作成しなおすか、 別にテーブルを作成してしまった方が早い This can be done only for tables with a native SerDe (DynamicSerDe, MetadataTypedColumnsetSerDe, LazySimpleSerDe and ColumnarSerDe). 引用: https://cwiki.apache.org/confluence/display/Hive/SerDe
  • 18. Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. JSON を利用したログ収集システム 18 API Request JSON message ETL HDFS JSON message Processing ・HDFS へのアップロード ・パーティショニング JSON をそのまま HDFS に保存するシンプルな構成が可能 JSON File
  • 19. Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. JSON を利用した場合の課題 19 CPUリソースが枯渇 圧縮の展開 テキストのパース スキーマの柔軟性はあるが処理数を増やすことができない
  • 20. Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. カラムナフォーマット 20 カラム方向でデータを格納、利用する Apache Parquet , Apache ORC など JSON など カラムナフォーマット
  • 21. Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. カラムナフォーマットの特徴 21 Pushdown による列、行のスキップ 圧縮の展開やパースの CPU リソースの 削減 カラム毎のエンコーディングと圧縮 データサイズが小さくなる
  • 22. Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 0 100 200 300 400 500 600 700 JSON Parquet Hive クエリの CPU TIME(min) 自社データでの JSON との比較 22 ※1:圧縮は gzip を利用 ※2:root 直下のカラム数30あるうちの2カラムを処理 かなりのCPU リソース が削減される ※2 0 20 40 60 80 100 JSON Parquet データサイズ(GB) ※1 今回のデータではそこ まで差はなかった
  • 23. Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 読み込まれたデータ量とプロファイル 23 必要なカラムのみが読み出されている JSON Parquet 圧縮のCPUリソースが削減されていることが分かる JSON Parquet
  • 24. Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. カラムナフォーマットとスキーマ 24 パーサーログ { col1: val1, col2: val2, clo3: val3 } スキーマからデータ を格納するカラムを 事前に作成する必要 がある。 スキーマ
  • 25. Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. Hive でのカラムの参照の方法 25 カラムのインデクス(順序)でデータにアクセス カラム名を変更できる カラムの名前でデータにアクセス 柔軟なテーブルスキーマの更新が可能 カラム名は変更できない 参考:https://docs.aws.amazon.com/ja_jp/athena/latest/ug/handling-schema-updates-chapter.html#index-access
  • 26. Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. カラムナフォーマットの Hive テーブルの更新 26 読み込むカラムを指定する テーブル定義にあわせてデータが読み込まれる カラム名で読み込まれるが、データの型は実データとあわ せる必要がある
  • 27. Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. カラムナフォーマットのテーブルの更新 27 Replace column が使えるため、簡単なコマンドでテーブルを更新でき る。
  • 28. Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. スキーマ更新の業務 28 サービス担当 データ利用担当 1.ログ仕様の変更依頼 2-1-1. 変換用のスキーマの登録/更新 2-1-2.ログ仕様の更新 2-2.テーブル定義の更新 2-1,2-2の作業は個別に実施してもシステムに影響はない
  • 29. Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. カラムナフォーマットを利用したログ収集システム 29 ・HDFS へのアップロード ・パーティショニング ・カラムナフォーマットへの変換 API Request JSON message ETL HDFS JSON message Processing 事前に最終出力のスキーマ情報を登録・更新しなければならな い。システムは同期して ETL に反映する仕組みが必要。 Schema registryサービス担当 ・データの設計 ・スキーマの管理
  • 30. Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. カラムナフォーマットでの変化 30 Schema-on-read Schema-on-write Hadoop 初期 カラムナフォーマット登場以降 カラムナフォーマットの登場により、ログ収集システムは Schema-on-write のアーキテクチャとなった
  • 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. フォーマットの比較 33 大項目 小項目 JSON ORC Parquet スキーマ変更の強さ ルールベースでの書き込み (スキーマレス) ○ × × 要素名でのアクセス ○ ○ ○ 要素の存在の有無に関わらないアクセス ○ △ データ参照側 で実装 △ データ参照側 で実装 複雑なデータ構造の定義 ネストスキーマの定義 ○ ○ ○ 保存、処理性能 データサイズ △ △ ○ 書き込み性能 △ ○ △ 読み込み性能 × ○ ○
  • 34. Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. Yosegi と他のデータフォーマットの違い 34 • ヤフーにおけるログ収集システム • ログ収集システムとデータフォーマット • Yosegi と他のデータフォーマットの違い • ネストスキーマの課題とアプローチ • まとめ
  • 35. Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. ヤフーのログ収集システムに求められる事 35 Schema-on-read Schema-on-write Hadoop 導入初期 カラムナフォーマット登場以降 Schema-on-read 書き込みのスキーマレス + 高処理効率 schema-on-read を実現するために書き込みのスキーマ レスと、高い処理効率が求められる。
  • 36. Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. スキーマレスカラムナーフォーマットの開発 36 これまでの背景を課題感に「Yosegi」を 開発し OSS として公開。
  • 37. Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 「Yosegi」とは 37 ヤフーがOSSとして公開しているスキーマレスカラムナフォーマット • スキーマレスな読み書き • カラムナフォーマットの高い圧縮率と高い処理性能
  • 38. Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. カラムナフォーマットの特徴 38 • カラム単位の書き込み・読み込み • Pushdown のサポート • カラム単位のエンコーディング、圧縮 • etc…
  • 39. Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. データサイズと書き込み性能の比較 39 0 500 1000 1500 2000 part customer partsupp orders lineitem TPC-H 1000 書き込みの CPU TIME(min) Yosegi ORC Parquet ORC が書き込みにおいては早い。今回は gzip で比較を行っているが、ORC はバイナリのタイ プによって圧縮レベルを低くしている。そのため、データサイズが少し大きくなっている。 0 50 100 150 200 250 300 Yosegi ORC Parquet TPC-H 1000 データサイズ(GB)
  • 40. Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 処理性能の比較 40 0 200 400 600 800 1000 1200 1400 1600 1800 q6 q16 q14 q1 q15 q11 q22 q2 q12 q20 q13 q10 q4 q3 q7 q8 q5 q9 q17 q18 q21 TPC-H 1000 CPU TIME(min) Yosegi Apache ORC Apache parquet 処理性能は他のカラムナフォーマットと同等
  • 41. Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. スキーマレスなカラム構築 41 {“col3”: “val”} {“col1”: “val”, “col5”: “val”} {“col2”: “val”, “col4”: “val”, “col5”: “val”} 入力データ 内部データ col2,col4 を 動的に追加 col1,col5 を 動的に追加
  • 42. Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. ルールベースのカラムデータ書きこみ 42 col1[0] col1[1] col1[2] col2[0] col2[2] col3[0] col3[1] col3[2] Root col1 col2 col3 [0] [1] [2] [0] [2] [0] [1] [2] カラム名で木構造を作成。 各ノードには同じカラム名 のカラムを配列で保持する 書き込み処理 木構造のデータを各ノード毎にバイト 配列として書き出す。 メタと実データは分離し、読み込みの 際はメタを読み込みデータ構造を復元 する。 実データ領域
  • 43. Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. Map 型の扱い 43 Yosegi では Map 型は存在せず、データ構造は Struct となる Map 型で参照した場合には以下の制約がある 1.Key の存在の有無が判定できない 2.Key が無くて NULL か、value が NULL か区別できない 3.カラム名で構成されるため Key は String 型のみ
  • 44. Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. フォーマットの比較 44 大項目 小項目 JSON ORC Parquet Yosegi スキーマ変更の強さ ルールベースでの書き込み (スキーマレス) ○ × × ○ 要素名でのアクセス ○ ○ ○ ○ 要素の存在の有無に関わらないアクセ ス ○ △ データ参照側 で実装 △ データ参照側 で実装 ○ 複雑なデータ構造の定義 ネストスキーマの定義 ○ ○ ○ ○ 保存、処理性能 データサイズ △ △ ○ ○ 書き込み性能 △ ○ △ △ 読み込み性能 × ○ ○ ○
  • 45. Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. Yosegi の Hive テーブル更新 45 JSON と同様に Replace Columns は使えない。 Hive の「DDLTask」で許可されている SerDe のクラス名がハードコードされている。 現時点では JSON 同様にテーブルの再作成をし た方が早い
  • 46. Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. スキーマの更新業務 46 サービス担当 データ利用担当 1.ログ仕様の変更依頼 2-1.ログ仕様の更新 2-2.テーブル定義の更新 ログ仕様の更新とテーブル定義の更新は同時に行わなくても良 い。
  • 47. Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. Yosegi を利用したログ収集システム 47 API Request JSON message ETL HDFS JSON message Processing ・HDFS へのアップロード ・パーティショニング ・Yosegi への変換 JSON と同様にシンプルなログ収集システムが構築可能 Yosegi File Schema registry
  • 48. Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 実現したこと 48 Schema-on-read Schema-on-write Hadoop 導入初期 カラムナフォーマット登場以降 Schema-on-read Yosegi 「Yosegi」により Schema-on-read のアーキテクチャと 高い処理性能の両立を実現
  • 49. Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. ネストスキーマの課題とアプローチ 49 • ヤフーにおけるログ収集システム • ログ収集システムとデータフォーマット • Yosegi と他のデータフォーマットの違い • ネストスキーマの課題とアプローチ • まとめ
  • 50. Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 従来のヤフーでのログ仕様変更の対応 50 Map 本来の使い方ではなく、JSON のように任意の key, value を入れられる設計が採用された ログ 共通フィールド(約40項目) Map<String,String> Array<Map<String,>String> サービス共通のログフィール ドとサービスが任意に拡張で きるフィールドを用意。 サービスA{ 検索に関する情報 } サービスB{ 商品に関する情報 } サービスC{ コンテンツに関する情報 } 拡張フィールドには Map を 使って任意の key, value を 付与できる
  • 51. Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. Map型の項目追加と参照 51 Map 型で便利フィールドを作り、入力データのスキーマとテーブ ル更新を不要にしてしまう方法 データを入れる側、使う側でスキーマの変更をしなくてよいので 業務への負担が少ない CREATE TABLE t_1( option MAP<STRING,STRING> ) SELECT option[“opt1”] … SELECT option[“opt2”] … 参照したい Key を指定するだけ “option” : { “opt1” : “value” , “opt2” : “value” , … } 任意の key, value を セットするだけ このフィールドへの項目追加は テーブルを変更しなくて良い
  • 52. Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 肥大化する Map フィールド 52 この便利フィールドを使うことにより、日々 のログ仕様の変更の業務負荷を軽減している (任意のフィールドについては管理していないとも言える) Map に含まれるユニーク key 数 約3500Key
  • 53. Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. Map型のデメリット 53 カラムナフォーマットのメリットである必要なカラムを処 理するというメリットが無くなってしまう 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 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 が読み込まれ、 特定の Key のみを読み込むのが困難 Key, Value の配列から Map のデータ構造を個別に生成
  • 54. Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. ヤフーでの Map 多用の影響 54 Map を多用したせいで以下の二点に影響を 与えている ・カラムナフォーマットを採用しても CPU リソース削減がいまいちだった ・Map を前提にしたログ設計が慣習的に なってしまった
  • 55. Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. クエリエンジンとネストスキーマ 55 クエリエンジンはネストスキーマの Pushdown が対応していない事が多い (各 OSS の ISSUE で見かけるので対応は進んでいると思われる) timestamp (BIGINT) Items (Struct) item_id (STRING) price (BIGINT) number (INT) 15167737 62 I_005 350 2 SELECT items.price WHERE … 処理に必要なカラムは items.price でも親の items 以下全てのカラムが読み込まれる
  • 56. Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 処理効率が良いスキーマ 56 timestamp (BIGINT) Items_item_id (STRING) Items_price (BIGINT) Items_number (INT) 1516773762 I_005 350 2 timestamp (BIGINT) Items (Struct) item_id (STRING) price (BIGINT) number (INT) 1516773762 I_005 350 2 SELECT items_price WHERE … フラットなスキーマに変更 SELECT items.price WHERE … ネストスキーマではなくフラットなスキーマでログを設計する
  • 57. Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. フラットなスキーマは困難 57 フラットなスキーマにするためには、正 規化が必要となるが、ロギング時に正規 化するのは現実的でない 結果ネストスキーマでの実装が自然とな る
  • 58. Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. ヤフーでの課題 58 Map型の運用軽減を目的にした利用 クエリエンジンはネストスキーマが苦手 フラットスキーマのロギングが困難
  • 59. Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. Yosegi でのアプローチ 59 ファイルを読み込むときに、ネストスキーマをフラットスキーマとして読 み込めれば、クエリエンジンで pushdown が有効になる timestamp (BIGINT) total_price (BIGINT) Items (ARRAY) Items (Struct) item_id (STRING) price (BIGINT) number (INT) 1516773762 1000 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 Yosegi File
  • 60. Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. Expand & Flatten 60 timestamp (BIGINT) total_price (BIGINT) Items (STRUCT) 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 読み込み処理 クエリエンジンtimestamp (BIGINT) total_price (BIGINT) Items (ARRAY) Items (Struct) item_id (STRING) price (BIGINT) number (INT) 1516773762 1000 I_001 300 1 I_005 350 2 1516773765 200 I_002 50 4 Expand , Flatten を設定 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 Expand : ‘items’ Flatten : items.item_id -> item_id items.price -> price items.number -> number Expand Flatten
  • 61. Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 読み込みの処理性能 61 0 500 1000 1500 2000 2500 3000 Nest schema Expand & Flatten CPU TIME(min) 90% down ※自社内のログでの性能比較
  • 62. Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. ユースケース 62 HDFS Processing データ利用担当 Map を含むネストス キーマのテーブル フラットスキーマの テーブル 低頻度な試験的を行うために運用 コストが低いテーブル定義 定常的な処理や高頻度に実行され る処理性能優先のテーブル定義 ネストスキーマのデータ設計でも運用負荷と処理性能のバ ランスを取ることができる
  • 63. Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. まとめ 63 • ヤフーにおけるログ収集システム • ログ収集システムとデータフォーマット • Yosegi と他のデータフォーマットの違い • ネストスキーマの課題とアプローチ • まとめ
  • 64. Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. schema-on-read と処理性能の両立 64 Schema-on-read Schema-on-write Hadoop 導入初期 カラムナフォーマット登場以降 Schema-on-read Yosegi 「Yosegi」によりスキーマの柔軟性と高い処理性能を両立 しつつ、スキーマ管理が不要なログ収集システムを実現
  • 65. Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. ネストスキーマへの対応 65 ネストスキーマをフラットスキーマとして読み込むことによ り、クエリエンジンの Pushdown を有効にする timestamp (BIGINT) total_price (BIGINT) Items (ARRAY) Items (Struct) item_id (STRING) price (BIGINT) number (INT) 1516773762 1000 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 Yosegi File
  • 66. Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. さいごに 66 Yosegi はたくさんの人に使ってもらい改善 をしていきたいと考えています。 メーリングリストもありますので、なんでも 気軽に連絡ください。 ■ 参考資料 - GitHub: https://github.com/yahoojapan/yosegi - Tech Blog: https://techblog.yahoo.co.jp/oss/introduction_of_datalake_and_mds/ ※Multiple Dimension Spread(MDS)は Yosegi の旧プロダクト名となります。