Upgrade to Pro — share decks privately, control downloads, hide ads and more …

LINEのデータプラットフォームにおける新しいテーブルフォーマット導入の取り組み

 LINEのデータプラットフォームにおける新しいテーブルフォーマット導入の取り組み

齋藤智之(LINE株式会社)
DEIM2022での技術報告資料です
https://cms.dbsj.org/deim2022/program/?oral#/J24

A3966f193f4bef226a0d3e3c1f728d7f?s=128

LINE Developers
PRO

February 28, 2022
Tweet

More Decks by LINE Developers

Other Decks in Technology

Transcript

  1. LINEのデータプラットフォームにおける 新しいテーブルフォーマット導入の取り組み 齋藤 智之 LINE株式会社 Data Platform室  2022年2月28日 J24-6

    技術報告
  2. 自己紹介 齋藤 智之 - LINE株式会社 Data Platform室 - シニアソフトウェアエンジニア -

    2015年3月 東京大学大学院情報理工学系研究科 コンピュータ科学専攻 修士 修了 - 2015年4月 LINE新卒入社 - 2016年〜 データプラットフォームの開発・運用 
  3. アジェンダ - LINEのデータプラットフォーム - クエリ処理インフラにおける課題 - Apache Icebergテーブルフォーマット 

  4. LINEのデータプラットフォーム 

  5. LINE STYLE  Always data-driven

  6. LINEのデータプラットフォーム σʔλϓϥοτϑΥʔϜ αʔϏε σʔλαΠΤϯε ػցֶश σʔλϚωδϝϯτ ...  σʔλυϦϒϯͳ૊৫ͮ͘Γ

  7. 一般的なデータフロー σʔλιʔε औΓࠐΈ ετϨʔδɾϝλσʔλ ఏڙ σʔλ׆༻ ॲཧ 

  8. データプラットフォームの役割 σʔλιʔε औΓࠐΈ ετϨʔδɾϝλσʔλ ఏڙ σʔλ׆༻ ॲཧ  Πϯϑϥ΍πʔϧͷఏڙ

  9. LINEデータプラットフォームの特徴 σʔλιʔε औΓࠐΈ ετϨʔδɾϝλσʔλ ఏڙ σʔλ׆༻ ॲཧ  Πϯϑϥ΍πʔϧͷఏڙ Big

    Big Big Big Big Big
  10. プラットフォーム・データのスケール 5,000+ 40,000+ 290 PB+ サーバ数 データ量 テーブル数  17.5

    M+ 700+ 150,000+ ログ流入量 ジョブ実行数 プラットフォーム ユーザ records / s jobs / day
  11. 技術的課題 σʔλιʔε औΓࠐΈ ετϨʔδɾϝλσʔλ ఏڙ σʔλ׆༻ ॲཧ 

  12. クエリ処理インフラにおける課題 

  13. SQLを用いたデータ処理 ετϨʔδɾϝλσʔλ ෼ࢄSQLΫΤϦॲཧΤϯδϯ SQL Spark Hive Trino Flink  HDFS

    HiveMetastore
  14. 分散クエリ処理 SELECT name FROM employee ࣮ߦϓϥϯ Parse Analysis Optimization Planning

    
  15. 分散クエリ処理 ࣮ߦϓϥϯ Parse Analysis Optimization Planning SELECT name FROM employee

    ςʔϒϧϑΥʔϚοτʹΑͬͯ؅ཧํ๏͕ఆٛ͞ΕΔ  Ͳ͏΍ͬͯ ಡΈॻ͖͢Δ͔ σʔλϑΝΠϧ͸ Ͳ͜ʹ͋Δ͔
  16. デファクトスタンダード - Hiveテーブルフォーマット Metastore DB Hive Metastore Thrift API ςʔϒϧϝλσʔλ͸Hive

    Metastoreͷ Thrift APIʹΑͬͯরձɾૢ࡞͞ΕΔ ςʔϒϧϝλσʔλ͸RDBMSʹอଘ͞ΕΔ ʢMetastore DBͱݺͿʣ create_table get_partitions ౷ܭ৘ใ εΩʔϚ Serde ύʔςΟγ ϣϯ σΟϨΫτϦύεʹΑͬͯσʔλϑΝΠϧͷू߹͕ఆٛ͞ΕΔ /table/date=2021-10-01/ 
  17. LINEのETLインフラ ετϨʔδ SQL Τϯδϯ Spark Hive Trino ΞυϗοΫ δϣϒ HDFS

    Hive Metastore ఆظόονδϣϒ Thrift API Metastore DB 
  18. LINEのETLインフラ ετϨʔδ SQL Τϯδϯ Spark Hive Trino ΞυϗοΫ δϣϒ HDFS

    Hive Metastore ఆظόονδϣϒ Thrift API Big Big Big Metastore DB 
  19. Metastore DB – 通常時QPS(1週間分) 

  20. Metastore DB – 通常時CPU使用率(1週間分) 

  21. Metastore DB – 異常時CPU使用率 Risk of outages Big blast radius

    
  22. HiveテーブルフォーマットのLimitation Hive Metastore Table with O(10K) partitions High load Memory

    pressure HIVE-13884 ϝλσʔλ؅ཧ͕Hive Metastoreʹڧ͘ґଘɽ̍ͭͷ ύʔςΟγϣϯ͕̍ͭͷߦͱͯ͠DBʹอଘ͞ΕΔɽ Metastore DB Limitation: େྔͷύʔςΟγϣϯΛѻ͑ͳ͍ ύʔςΟγϣϯ͕গͳ͘ͳΔΑ͏ςʔϒϧઃܭ͢Δ ͳͲɼϫʔΫΞϥ΢ϯυ͕ඞཁ 
  23. Hiveテーブルフォーマットの問題点 ςʔϒϧϝλσʔλͷরձੑೳ͕ɼதԝ؅ཧ͞ΕΔHive Metastore΍ Metastore DBΠϯελϯεͷੑೳʹ੍ݶ͞ΕΔɽ ཻ౓ͷૈ͍ύʔςΟγϣϯͰςʔϒϧ͕ߏ੒͞Εɼ ඇޮ཰ͳσʔλΞΫηεʹͳΔɽ ϑΝΠϧຖͷ౷ܭ৘ใΛอଘͯ͠ΫΤϦΛ࠷దԽ͢ΔͳͲͷɼ ϝλσʔλͷվળΛ࣮ݱͮ͠Β͍ɽ ϘτϧωοΫ

    ඇޮ཰ͳσʔλ ΞΫηεʹͭͳ͕Δ ΫΤϦ࠷దԽͷԸܙΛ ಘͮΒ͍ 
  24. Apache Icebergテーブルフォーマット 

  25. ετϨʔδ ϑΝΠϧ ϑΥʔϚοτ Parquet ORC Avro HDFS S3 ςʔϒϧ ϑΥʔϚοτ

    SQLΫΤϦ Τϯδϯ Flink Spark Hive Trino Apache Iceberg An open table format for huge analytic datasets OSS 
  26. 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 
  27. キーコンセプト εφοϓγϣοτɿ͋Δ࣌఺Ͱͷςʔϒϧͷঢ়ଶ s0 time σʔλ εφοϓγϣοτ Icebergがどのようにファイルを追跡するか t0 

  28. キーコンセプト s0 time s1 σʔλ Write & Commit εφοϓγϣοτɿ͋Δ࣌఺Ͱͷςʔϒϧͷঢ়ଶ Icebergがどのようにファイルを追跡するか

    ύʔςΟγϣϯ εΩʔϚ ϑΥʔϚοτ ౷ܭ৘ใ ϑΝΠϧͷ৔ॴ t0 t1  εφοϓγϣοτ
  29. メタデータファイルによるデータ管理 ςʔϒϧεΩʔϚɼύʔςΟγϣχϯάઃఆɼ εφοϓγϣοτΛ؅ཧ͢Δ ύʔςΟγϣϯຖͷ౷ܭΛؚΉɼϚχϑΣετϑΝΠϧʹ ͍ͭͯͷϝλσʔλΛอ࣋͢Δ σʔλϑΝΠϧͷϦετɼσʔλϑΝΠϧຖͷϝλσʔλ ΍౷ܭ৘ใΛอଘ͢Δ ςʔϒϧϝλσʔλ ϑΝΠϧ ϚχϑΣετϦετ

    ϑΝΠϧ ϚχϑΣετ ϑΝΠϧ s0 s1 m0 m1 m2 m0 m1 d00 d01 m0 d00 d01 d10 m1 d20 m2 d10 d20 σʔλϑΝΠϧ 
  30. メタデータファイルによるデータ管理 ςʔϒϧεΩʔϚɼύʔςΟγϣχϯάઃఆɼ εφοϓγϣοτΛ؅ཧ͢Δ ύʔςΟγϣϯຖͷ౷ܭΛؚΉɼϚχϑΣετϑΝΠϧʹ ͍ͭͯͷϝλσʔλΛอ࣋͢Δ σʔλϑΝΠϧͷϦετɼσʔλϑΝΠϧຖͷϝλσʔλ ΍౷ܭ৘ใΛอଘ͢Δ ςʔϒϧϝλσʔλ ϑΝΠϧ ϚχϑΣετϦετ

    ϑΝΠϧ ϚχϑΣετ ϑΝΠϧ s0 s1 m0 m1 m2 m0 m1 d00 d01 m0 d00 d01 d10 m1 d20 m2 d10 d20 σʔλϑΝΠϧ  Hive Metastore
  31. クエリに必要なファイルを見つける 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 
  32. ファイル毎の統計情報による最適化 ϚχϑΣετϑΝΠϧ͸σʔλॻ͖ࠐΈ࣌ʹɼ ϑΝΠϧ୯ҐΧϥϜ୯Ґͷ౷ܭ৘ใΛอଘ͢Δ 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 
  33. 違いと利点 ύʔςΟγϣχϯάཻ౓ Hive Apache Iceberg ϝλσʔλͷอଘ৔ॴ Hive Metastore ϑΝΠϧγεςϜ ੍ݶ͞ΕΔ

    ੍ݶ͕؇࿨͞ΕΔ εέʔϥϏϦςΟ ޮ཰త ౷ܭ৘ใ ύʔςΟγϣϯຖ ϑΝΠϧຖ ύϑΥʔϚϯε 
  34. その他の機能 Serializable isolation ߦϨϕϧ࡟আ ࠩ෼ಡΈࠐΈ λΠϜτϥϕϧ εΩʔϚਐԽ Hidden partitioning 

  35. まとめ ΫΤϦॲཧΠϯϑϥʹ͓͍ͯɼதԝ؅ཧ͞ΕΔϝλσʔλετΞ͕ ϘτϧωοΫͱͳΓɼεέʔϥϏϦςΟͷ՝୊͕ൃੜͨ͠ɽ Apache IcebergʹΑͬͯϘτϧωοΫ͕ղফ͞ΕΔ͜ͱ͕ظ଴͞ΕΔɽ ·ͨɼσʔλ෼ੳʹ͓͚Δଞͷ՝୊ղফʹ΋໾ཱͭͱظ଴͞ΕΔɽ LINEͷσʔλϓϥοτϑΥʔϜͰ͸ద༻ʹ޲͚ͯϓϩδΣΫτΛਐߦதɽ 

  36. Thank you