Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
LINEのデータプラットフォームにおける新しいテーブルフォーマット導入の取り組み
Search
LINE Developers
February 28, 2022
Technology
300
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
LINEのデータプラットフォームにおける新しいテーブルフォーマット導入の取り組み
齋藤智之(LINE株式会社)
DEIM2022での技術報告資料です
https://cms.dbsj.org/deim2022/program/?oral#/J24
LINE Developers
February 28, 2022
More Decks by LINE Developers
See All by LINE Developers
LINEスタンプのSREing事例集:大きなスパイクアクセスを捌くためのSREing
line_developers
3
2.6k
Java 21 Overview
line_developers
6
1.4k
Code Review Challenge: An example of a solution
line_developers
1
1.7k
KARTEのAPIサーバ化
line_developers
1
660
著作権とは何か?〜初歩的概念から権利利用法、侵害要件まで
line_developers
5
2.4k
生成AIと著作権 〜生成AIによって生じる著作権関連の課題と対処
line_developers
3
2.6k
マイクロサービスにおけるBFFアーキテクチャでのモジュラモノリスの導入
line_developers
9
4.2k
A/B Testing at LINE NEWS
line_developers
3
1.2k
LINEのサポートバージョンの考え方
line_developers
2
1.6k
Other Decks in Technology
See All in Technology
事業成長とデータ活用を止めないためのマネジメントへ挑戦
hiracky16
0
390
⾮構造化データを価値に変える AI エージェント基盤とその組織
ivry_presentationmaterials
0
190
AI駆動で「他アプリの音を加工できる」アプリを作った
satomasahiro2005
0
150
今さら理解するウェブフォントver.2026
takanorip
3
790
分析AIエージェントを育てる、動く環境を育てる
codatum
1
1.1k
遠藤な_めぐろLT #38 「社内のAI活用推進」@麻布台_20261009
endonanana
0
130
re:Invent初参加で変わったこと、2回目にやってみたいこと(JAWS-UG彩の国埼玉 #12)
mhrtech
2
230
初海外で注意すべきこと12選!!!安全快適なre:invent生活にするために
yuuuuuuu168
1
160
DWH の限界突破! AI エージェント向け爆速リアルタイムデータ基盤 ClickHouse
jozono
1
470
[JAWS-UG彩の国埼玉#12]そろそろ準備する?re:Invent2026をやさしく解説 / reinvent2026-sainokuni
sh_fk2
1
340
エンタメ企業のM&Aを支えるデータ基盤 ― 統合から店舗のリアルタイム分析まで / Data Engineering Summit 2026
genda
0
180
その Valkey 使いこなしていますか?
onk
PRO
5
1.5k
Featured
See All Featured
Deep Space Network (abreviated)
tonyrice
0
370
Reflections from 52 weeks, 52 projects
jeffersonlam
356
22k
WCS-LA-2024
lcolladotor
0
890
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
12
1.3k
Google's AI Overviews - The New Search
badams
0
1.6k
Navigating Team Friction
lara
192
16k
A brief & incomplete history of UX Design for the World Wide Web: 1989–2019
jct
2
530
HU Berlin: Industrial-Strength Natural Language Processing with spaCy and Prodigy
inesmontani
PRO
0
750
Beyond borders and beyond the search box: How to win the global "messy middle" with AI-driven SEO
davidcarrasco
3
280
More Than Pixels: Becoming A User Experience Designer
marktimemedia
3
560
DBのスキルで生き残る技術 - AI時代におけるテーブル設計の勘所
soudai
PRO
68
58k
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
PRO
203
77k
Transcript
LINEのデータプラットフォームにおける 新しいテーブルフォーマット導入の取り組み 齋藤 智之 LINE株式会社 Data Platform室 2022年2月28日 J24-6
技術報告
自己紹介 齋藤 智之 - LINE株式会社 Data Platform室 - シニアソフトウェアエンジニア -
2015年3月 東京大学大学院情報理工学系研究科 コンピュータ科学専攻 修士 修了 - 2015年4月 LINE新卒入社 - 2016年〜 データプラットフォームの開発・運用
アジェンダ - LINEのデータプラットフォーム - クエリ処理インフラにおける課題 - Apache Icebergテーブルフォーマット
LINEのデータプラットフォーム
LINE STYLE Always data-driven
LINEのデータプラットフォーム σʔλϓϥοτϑΥʔϜ αʔϏε σʔλαΠΤϯε ػցֶश σʔλϚωδϝϯτ ... σʔλυϦϒϯͳ৫ͮ͘Γ
一般的なデータフロー σʔλιʔε औΓࠐΈ ετϨʔδɾϝλσʔλ ఏڙ σʔλ׆༻ ॲཧ
データプラットフォームの役割 σʔλιʔε औΓࠐΈ ετϨʔδɾϝλσʔλ ఏڙ σʔλ׆༻ ॲཧ Πϯϑϥπʔϧͷఏڙ
LINEデータプラットフォームの特徴 σʔλιʔε औΓࠐΈ ετϨʔδɾϝλσʔλ ఏڙ σʔλ׆༻ ॲཧ Πϯϑϥπʔϧͷఏڙ Big
Big Big Big Big Big
プラットフォーム・データのスケール 5,000+ 40,000+ 290 PB+ サーバ数 データ量 テーブル数 17.5
M+ 700+ 150,000+ ログ流入量 ジョブ実行数 プラットフォーム ユーザ records / s jobs / day
技術的課題 σʔλιʔε औΓࠐΈ ετϨʔδɾϝλσʔλ ఏڙ σʔλ׆༻ ॲཧ
クエリ処理インフラにおける課題
SQLを用いたデータ処理 ετϨʔδɾϝλσʔλ ࢄSQLΫΤϦॲཧΤϯδϯ SQL Spark Hive Trino Flink HDFS
HiveMetastore
分散クエリ処理 SELECT name FROM employee ࣮ߦϓϥϯ Parse Analysis Optimization Planning
分散クエリ処理 ࣮ߦϓϥϯ Parse Analysis Optimization Planning SELECT name FROM employee
ςʔϒϧϑΥʔϚοτʹΑͬͯཧํ๏͕ఆٛ͞ΕΔ Ͳ͏ͬͯ ಡΈॻ͖͢Δ͔ σʔλϑΝΠϧ Ͳ͜ʹ͋Δ͔
デファクトスタンダード - Hiveテーブルフォーマット Metastore DB Hive Metastore Thrift API ςʔϒϧϝλσʔλHive
Metastoreͷ Thrift APIʹΑͬͯরձɾૢ࡞͞ΕΔ ςʔϒϧϝλσʔλRDBMSʹอଘ͞ΕΔ ʢMetastore DBͱݺͿʣ create_table get_partitions ౷ܭใ εΩʔϚ Serde ύʔςΟγ ϣϯ σΟϨΫτϦύεʹΑͬͯσʔλϑΝΠϧͷू߹͕ఆٛ͞ΕΔ /table/date=2021-10-01/
LINEのETLインフラ ετϨʔδ SQL Τϯδϯ Spark Hive Trino ΞυϗοΫ δϣϒ HDFS
Hive Metastore ఆظόονδϣϒ Thrift API Metastore DB
LINEのETLインフラ ετϨʔδ SQL Τϯδϯ Spark Hive Trino ΞυϗοΫ δϣϒ HDFS
Hive Metastore ఆظόονδϣϒ Thrift API Big Big Big Metastore DB
Metastore DB – 通常時QPS(1週間分)
Metastore DB – 通常時CPU使用率(1週間分)
Metastore DB – 異常時CPU使用率 Risk of outages Big blast radius
HiveテーブルフォーマットのLimitation Hive Metastore Table with O(10K) partitions High load Memory
pressure HIVE-13884 ϝλσʔλཧ͕Hive Metastoreʹڧ͘ґଘɽ̍ͭͷ ύʔςΟγϣϯ͕̍ͭͷߦͱͯ͠DBʹอଘ͞ΕΔɽ Metastore DB Limitation: େྔͷύʔςΟγϣϯΛѻ͑ͳ͍ ύʔςΟγϣϯ͕গͳ͘ͳΔΑ͏ςʔϒϧઃܭ͢Δ ͳͲɼϫʔΫΞϥϯυ͕ඞཁ
Hiveテーブルフォーマットの問題点 ςʔϒϧϝλσʔλͷরձੑೳ͕ɼதԝཧ͞ΕΔHive Metastore Metastore DBΠϯελϯεͷੑೳʹ੍ݶ͞ΕΔɽ ཻͷૈ͍ύʔςΟγϣϯͰςʔϒϧ͕ߏ͞Εɼ ඇޮͳσʔλΞΫηεʹͳΔɽ ϑΝΠϧຖͷ౷ܭใΛอଘͯ͠ΫΤϦΛ࠷దԽ͢ΔͳͲͷɼ ϝλσʔλͷվળΛ࣮ݱͮ͠Β͍ɽ ϘτϧωοΫ
ඇޮͳσʔλ ΞΫηεʹͭͳ͕Δ ΫΤϦ࠷దԽͷԸܙΛ ಘͮΒ͍
Apache Icebergテーブルフォーマット
ετϨʔδ ϑΝΠϧ ϑΥʔϚοτ Parquet ORC Avro HDFS S3 ςʔϒϧ ϑΥʔϚοτ
SQLΫΤϦ Τϯδϯ Flink Spark Hive Trino Apache Iceberg An open table format for huge analytic datasets OSS
Icebergテーブルのファイルレイアウト # Spark SQL create table sample (id int) using
iceberg; insert into sample values (100); insert into sample values (200); select * from sample; # Files in HDFS sample ├── data │ ├── 00000-2-26bcfac0-91ba-4374-a879-b780cf0608c3-00001.parquet │ └── 00000-3-4bfb85d8-3283-48f7-980d-28ea115aed80-00001.parquet └── metadata ├── 00000-811eaf6e-b0f4-4bd7-8f87-a6df1d543b34.metadata.json ├── 00001-4041324f-1920-44f4-8ce6-6088ec663e0a.metadata.json ├── 00002-66aac2ec-8f9a-4de8-a679-428bb970b1ff.metadata.json ├── 2a67328f-8386-4d1a-873a-1034824e22f8-m0.avro ├── 91e78f4a-f1df-414f-835d-45488001bba9-m0.avro ├── snap-4758351318332926243-1-2a67328f-8386-4d1a-873a-1034824e22f8.avro └── snap-5465468679579016991-1-91e78f4a-f1df-414f-835d-45488001bba9.avro
キーコンセプト εφοϓγϣοτɿ͋Δ࣌Ͱͷςʔϒϧͷঢ়ଶ s0 time σʔλ εφοϓγϣοτ Icebergがどのようにファイルを追跡するか t0
キーコンセプト s0 time s1 σʔλ Write & Commit εφοϓγϣοτɿ͋Δ࣌Ͱͷςʔϒϧͷঢ়ଶ Icebergがどのようにファイルを追跡するか
ύʔςΟγϣϯ εΩʔϚ ϑΥʔϚοτ ౷ܭใ ϑΝΠϧͷॴ t0 t1 εφοϓγϣοτ
メタデータファイルによるデータ管理 ςʔϒϧεΩʔϚɼύʔςΟγϣχϯάઃఆɼ εφοϓγϣοτΛཧ͢Δ ύʔςΟγϣϯຖͷ౷ܭΛؚΉɼϚχϑΣετϑΝΠϧʹ ͍ͭͯͷϝλσʔλΛอ࣋͢Δ σʔλϑΝΠϧͷϦετɼσʔλϑΝΠϧຖͷϝλσʔλ ౷ܭใΛอଘ͢Δ ςʔϒϧϝλσʔλ ϑΝΠϧ ϚχϑΣετϦετ
ϑΝΠϧ ϚχϑΣετ ϑΝΠϧ s0 s1 m0 m1 m2 m0 m1 d00 d01 m0 d00 d01 d10 m1 d20 m2 d10 d20 σʔλϑΝΠϧ
メタデータファイルによるデータ管理 ςʔϒϧεΩʔϚɼύʔςΟγϣχϯάઃఆɼ εφοϓγϣοτΛཧ͢Δ ύʔςΟγϣϯຖͷ౷ܭΛؚΉɼϚχϑΣετϑΝΠϧʹ ͍ͭͯͷϝλσʔλΛอ࣋͢Δ σʔλϑΝΠϧͷϦετɼσʔλϑΝΠϧຖͷϝλσʔλ ౷ܭใΛอଘ͢Δ ςʔϒϧϝλσʔλ ϑΝΠϧ ϚχϑΣετϦετ
ϑΝΠϧ ϚχϑΣετ ϑΝΠϧ s0 s1 m0 m1 m2 m0 m1 d00 d01 m0 d00 d01 d10 m1 d20 m2 d10 d20 σʔλϑΝΠϧ Hive Metastore
クエリに必要なファイルを見つける 1. ݱࡏͷεφοϓγϣοτ͔Β ϚχϑΣετϦετϑΝΠϧΛݟ͚ͭΔ 2. ύʔςΟγϣϯͷϨϯδ͔ΒɼಡΈࠐΉ͖ ϚχϑΣετϑΝΠϧΛಛఆ͢Δ 3. ϚχϑΣετϑΝΠϧΛಡΈɼ σʔλϑΝΠϧΛݟ͚ͭΔ
manifest-list = ml1 For manifest m2 and partition p, range is [20, 29] d20 file path = hdfs://... s0 s1 m0 m1 m2 m0 m1 d00 d01 m0 d00 d01 d10 m1 d20 m2 d10 d20 σʔλϑΝΠϧ ml1
ファイル毎の統計情報による最適化 ϚχϑΣετϑΝΠϧσʔλॻ͖ࠐΈ࣌ʹɼ ϑΝΠϧ୯ҐΧϥϜ୯Ґͷ౷ܭใΛอଘ͢Δ s0 s1 m0 m1 m2 m0 m1
d00 d01 m0 d00 d01 d10 m1 d20 m2 d10 d20 ml1 file_path string Location URI with FS scheme lower_bounds map<int,binary> Map of column id to lower bound upper_bounds map<int,binary> Map of column id to upper bound
違いと利点 ύʔςΟγϣχϯάཻ Hive Apache Iceberg ϝλσʔλͷอଘॴ Hive Metastore ϑΝΠϧγεςϜ ੍ݶ͞ΕΔ
੍ݶ͕؇͞ΕΔ εέʔϥϏϦςΟ ޮత ౷ܭใ ύʔςΟγϣϯຖ ϑΝΠϧຖ ύϑΥʔϚϯε
その他の機能 Serializable isolation ߦϨϕϧআ ࠩಡΈࠐΈ λΠϜτϥϕϧ εΩʔϚਐԽ Hidden partitioning
まとめ ΫΤϦॲཧΠϯϑϥʹ͓͍ͯɼதԝཧ͞ΕΔϝλσʔλετΞ͕ ϘτϧωοΫͱͳΓɼεέʔϥϏϦςΟͷ՝͕ൃੜͨ͠ɽ Apache IcebergʹΑͬͯϘτϧωοΫ͕ղফ͞ΕΔ͜ͱ͕ظ͞ΕΔɽ ·ͨɼσʔλੳʹ͓͚Δଞͷ՝ղফʹཱͭͱظ͞ΕΔɽ LINEͷσʔλϓϥοτϑΥʔϜͰద༻ʹ͚ͯϓϩδΣΫτΛਐߦதɽ
Thank you