データ基盤
データレイクは、何でも安く置く代わりに何を先送りしたか
- データレイク
- データ基盤
- データベース
- Hadoop
- MapReduce
- GFS
- HDFS
- Hive
- スキーマオンリード
- スキーマオンライト
- データスワンプ
- メタデータ
- データカタログ
- データウェアハウス
- Parquet
- Uber
- Netflix
- Gartner
- 並列データベース
目次
業務システムのデータを写して整える分析専用のデータベース、つまりデータウェアハウスには、二つの前提があった。入れる前に表の形を決めることと、その表を速く読むための専用の高価な機械を使うことである。ところが、ウェブの利用記録やセンサーの記録のように、形が一定せず量だけが急に増えるデータが現れた。こうしたデータを全部整えてから入れるには、手間も機械の費用もかかりすぎる。
そこで、形を整える前の生のデータを、安い汎用の機械にそのまま大量に置き、使うときに解釈するという考え方が広まった。この保存先をデータレイクと呼ぶ。列ごとに保存する工夫はデータウェアハウスの内部の設計だったが、データレイクはそれとは別の軸、つまりデータをどこにどんな形で置くかという問いへの答えであり、多くの会社ではデータウェアハウスと並んで使われてきた。
データを整えずに置けば、取り込みは速く安くなる。その代わりに、何がどこにあり、どの値が信じられるかを確かめる作業は、後で読む人に回る。本稿は、データレイクの土台になった Google の二つの論文、Hadoop と Hive の文書、データレイクという語を作った技術者のブログ、批判した研究者と調査会社の文書、利用企業の公開記事を例に取る。
データレイクは、生のデータを安く何でも置く代わりに、どんな作業を先送りしたのか。
データレイクは、安い汎用の機械に生のデータを形を決めずに置くことで、取り込みの費用を下げ将来の未知の問いに備えたが、データの意味と品質を確かめる作業を読む人ごとに先送りし、管理しなければ探せず信じられないデータの沼になる危険を抱えた。 形を読むときに決める方式では、取り込みは速いが、データを読むたびに解釈の費用がかかる。データの意味や出どころを記録する仕組みが無いと、利用者は同じデータの理解を毎回一からやり直す。大規模に使った会社は、データカタログ(データの所在と説明を集めた目録)のように、データの説明と来歴を集める仕組みを作った。
100 個のデータの出どころを、前払いで整えるか後払いで読むか
※ この節の数値は説明のための仮定で、測定値ではありません。
ある会社が、100 個のシステムからデータを集めるとする。一つの出どころの形と意味を調べて整えるには、2 人日かかるとする。
入れる前に形を決める方式では、100 個すべてを整えてから使い始めるので、200 人日の作業が先に要る。整えた後は、誰がどの分析をしても、整えた結果を共通の出発点として使える。
形を決めずに置く方式では、取り込みは全部で数日で終わる。代わりに、分析をする人が、使う出どころをそのたびに調べる。一つの分析が 5 個の出どころを使い、調べる手間が同じく出どころ一つあたり 2 人日なら、一つの分析に 10 人日かかる。別々の人が 30 個の分析を行い、調べた結果を互いに共有しなければ、合計は 300 人日になり、前払いの 200 人日を超える。調べた結果を記録して共有すれば、同じ出どころを二度調べる必要はなく、合計は 100 個の出どころを一度ずつ調べる 200 人日を超えない。
この数え方は、三つのことを示す。
- 形を決めずに置く方式は、整える費用を無くすのではなく、前払いから、読むたびの後払いに移す。
- 後払いの合計は、実際に使われる出どころの数、同じデータを読む人の数、調べた結果を共有するかどうかで決まる。使われない出どころは調べずに済む。
- 調べた結果を共有しなければ、同じデータを人ごとに別々に解釈し、出てくる数字が割れうる。
故障が当たり前の安い機械に、巨大なファイルを置く仕組みが生まれた
データレイクの土台は、Google が 2003 年と 2004 年に発表した二つの論文である。Ghemawat らは Google File System(GFS)の論文で、設計の前提として次のような観察を挙げた1。安い汎用の部品で作った数百から数千台の機械では、部品の故障は例外ではなく日常であること。ファイルは従来の基準で巨大で、数 GB のファイルが普通であること。ファイルの多くは上書きではなく末尾への追記で変わること。論文は、小さなファイルも扱えるようにはするが、そのための最適化はしないと書いている。
Dean と Ghemawat は MapReduce の論文で、大量の生のデータを多数の機械で処理する方法を示した2。利用者は、データの各部分に当てる処理(map)と、その結果をまとめる処理(reduce)だけを書く。データの分割、機械への仕事の割り当て、機械の故障への対処、機械の間の通信は、仕組みの側が引き受ける。約 1,800 台の機械で 1 TB のデータを並べ替えるのに 891 秒かかり、途中で 1,746 個の作業用のプロセスのうち 200 個を止めても(機械そのものは動いたまま)、933 秒で終わった。
これらの考え方を公開のソフトウェアにしたのが Hadoop である。Hadoop の初期の文書は、その分散ファイルシステム(HDFS)を、大きなファイルを多数の機械に確実に置くためのもので、Google File System に着想を得たと説明している3。現在の HDFS の文書も、安い汎用の機械で動かすことを前提に、ファイルは一度書いて何度も読む使い方を想定すると書いている4。
生のデータを形を決めずに置き、読むときに解釈する
Facebook の Thusoo らは 2009 年に、Hadoop の上で SQL を使えるようにする Hive を発表した5。論文は動機を、分析に使うデータの量が急に増え、従来のデータウェアハウスの製品では費用がかかりすぎるようになったことだと書く。一方で MapReduce の書き方は低水準で、分析のたびに専用のプログラムを書く必要があった。Hive では、ファイルの中身をどう解釈するかを表ごとに指定でき、すでに置いてあるファイルをそのまま表として扱える。データを置くときではなく読むときに形を当てはめるこのやり方を、スキーマオンリードと呼ぶ。入れる前に形を決めるやり方は、スキーマオンライトと呼ぶ。この呼び名を使う Databricks の著者らは、データレイクは何でも安く置ける身軽さと引き換えに、データの品質と管理の問題を下流に回したと書いている6。Thusoo らの 2009 年の論文の時点で、Facebook の Hive には数千の表と 700 TB を超えるデータがあり、1 日に 5,000 を超える問い合わせが流れていた。Hive は、表ごとの形と統計を記録する目録(Hive-Metastore)も最初から持っていた。一方で、当時の Hive は既存の表の行の更新と削除に対応していなかった。
データ分析の製品を作る Pentaho の Dixon は、自社の Hadoop 対応製品の発表に合わせた 2010 年のブログで、データレイクという考えを作ったと書いた7。Dixon は、従来の方法では関心のある項目だけを選んで集計し、データマート(特定の部門や用途向けに切り出した小さなデータの集まり)に入れていたので、あらかじめ決めた問いにしか答えられず、細かい単位の情報が失われると書いた。そのうえで、データマートを洗って詰めた瓶入りの水に、データレイクを自然のままの大きな湖にたとえた。Dixon が想定した湖の水は、多くの場合一つのシステムから流れ込むものだった。Dixon は 2014 年のブログで、多くのシステムのデータを Hadoop に集めて互いに結合するものは自分の言うデータレイクではないと書き、語の広がり方に不満を述べている8。本稿が扱うのは、多くの出どころを一か所に集める、この広い意味のデータレイクである。
取り込みは速いが、読むたびに解釈の費用を払う
形を決めずに置く方式と、並列データベースを比べた測定がある。Pavlo らは 2009 年に、100 台の機械の上で Hadoop と二つの並列データベースを同じ仕事で比べた9。並列データベースは分析の仕事で Hadoop の 3.1 倍から 6.5 倍速かった。一方で、データの読み込みは Hadoop のほうが速く、Vertica より最大 3 倍、もう一つのデータベースよりほぼ 20 倍速かった。Hadoop は、実行のたびに入力の記録を解釈し直すので、同じ仕事で常に多くの CPU を使っていた。著者らも、一度しか読み込まないデータでは、データベースに読み込んで整える費用は割に合わないかもしれないと書いている。この論文の著者には、前年に MapReduce を批判した DeWitt と Stonebraker が含まれ、比べた Vertica は Stonebraker らの研究のデータベース C-Store を製品にしたものである。
Google の Dean と Ghemawat は 2010 年に反論した10。同じ測定の多くで、並列データベースにデータを読み込む時間は、Hadoop で分析する時間の 5 倍から 50 倍だった、と二人は読む。多くのデータは作られて一度か二度処理されて捨てられるので、読み込みに時間をかけるより、そのまま処理するほうが速いという主張である。一方で二人は、複数のアプリケーションが同じデータを共有するにはスキーマが役立つと認め、Google の MapReduce はほぼすべてのデータを、型を記述した二進の形式で読み書きしていると書いた。比べた測定の Hadoop は文字の形式のデータを読んでおり、二人の測定では一件の解釈に文字の形式で 1,731 ナノ秒、Google の形式で 20 ナノ秒かかった。読むたびの解釈の費用は、ファイルの形式で大きく変わる。読む回数が少なく、読む人が少ないデータでは後払いが得になり、多くの人が何度も読むデータでは前払いが得になる。
意味と品質を管理しないと、置いたデータは探せず信じられなくなるおそれがある
形を決めずに置く方式の危うさは、早くから指摘されていた。DeWitt と Stonebraker は 2008 年のブログで、MapReduce にはデータに不正な値が入るのを防ぐ仕組みがなく、新しいアプリケーションを書く人はそのたびに記録の構造を調べなければならないと批判した11。調査会社の Gartner は 2014 年の発表で、データレイクは管理なしに何でも受け入れるので、データを説明するメタデータ(データについてのデータ)とそれを保つ仕組みが無ければ、データの沼(データスワンプ)になる危険があると警告した12。メタデータが無ければ、分析をする人はデータを使うたびに一から始めることになるという。この発表は意見であり、測定の数字は示していない。Dixon は同じ年に、元の定義では一つの出どころのデータしか受け入れないので「何でも」は当たらないと反論した8。一方で Dixon も、多くの出どころを一つの湖に集めるとメタデータの問題がずっと大きくなると認めている。
Stonebraker は 2014 年の別の記事で、データを集めて使えるようにする作業を五つに分けた13。取り込み、変換、スキーマの統合、データクレンジング(食い違いや誤りを見つけて直す作業)、同じ実体の突き合わせである。Stonebraker によれば、取り込みは残りの四つに比べればごく小さな作業で、整えていないデータの沼に取り込んだ時点では、仕事の大部分が残っている。
Hive の目録が記録するのは表の形であり、データの意味や来歴ではない。大規模に使った会社は、複数の保存先と処理系にまたがって、データの説明と来歴を集める仕組みを作った。LinkedIn は 2016 年の記事で、HDFS の 25,000 を超えるデータセットや Teradata の表の説明と来歴を集める仕組みを公開し、処理系や保存先が多様になると、正しいデータセットを探すのに時間がかかり生産性が下がりうると書いた14。Netflix は 2018 年の記事で、Pig のように自分の目録を持たない処理系と Hive の間で、データの説明を共有するために Metacat を作ったと書いている15。
Uber の 2018 年の記事は、データレイクが解いたものと壊れたものを一社の中で示している16。Uber は、それ以前のデータウェアハウスで、形の取り決めのない JSON のデータが生産側の変更で壊れる問題に悩んでいた。Hadoop のデータレイクでは、生のデータを変換せずに一度だけ取り込むようにし、同時に JSON から列ごとに保存するファイルの形式である Parquet へ移して、スキーマを一か所で管理する仕組みを作った。Uber のデータレイクは、何でも置ける湖ではなく、形を管理した湖として動き始めた。それでも、上流の保存先が中身を確かめずに書いた値は Hadoop に入り込み、そのデータを使う人すべてに影響した。Uber は、型を確かめるだけでは値の正しさは確かめられないとして、値の意味を確かめる検査をスキーマの管理に足す方針を書いている。
出典16件
-
Ghemawat ほか「The Google File System」SOSP, 2003. https://static.googleusercontent.com/media/research.google.com/en//archive/gfs-sosp2003.pdf — 故障が日常の安い機械・巨大なファイル・追記中心という前提と、Table 2 のクラスタ。 ↩
-
Dean, Ghemawat「MapReduce: Simplified Data Processing on Large Clusters」OSDI, 2004. https://static.googleusercontent.com/media/research.google.com/en//archive/mapreduce-osdi04.pdf — 分割・故障・通信を仕組みが引き受けることと、1TB の並べ替え(§5)。 ↩
-
Apache Hadoop Wiki「ProjectDescription」2007. http://web.archive.org/web/20080616143148id_/http://wiki.apache.org/hadoop/ProjectDescription — HDFS は Google File System に着想を得たという記述。 ↩
-
Apache Software Foundation「HDFS Architecture」. https://hadoop.apache.org/docs/current/hadoop-project-dist/hadoop-hdfs/HdfsDesign.html — 安い汎用の機械と、一度書いて何度も読む使い方の前提。 ↩
-
Thusoo ほか「Hive – A Warehousing Solution Over a Map-Reduce Framework」PVLDB 2(2), 2009. https://www.vldb.org/pvldb/vol2/vldb09-938.pdf — 動機、読むときの解釈、700TB、更新と削除の不在(自社報告)。 ↩
-
Armbrust ほか「Lakehouse: A New Generation of Open Platforms that Unify Data Warehousing and Advanced Analytics」CIDR, 2021. https://www.cidrdb.org/cidr2021/papers/cidr2021_paper17.pdf — スキーマオンライトとスキーマオンリードの語(著者は全員 Databricks)。 ↩
-
Dixon「Pentaho, Hadoop, and Data Lakes」2010. http://web.archive.org/web/20101019070614id_/http://jamesdixon.wordpress.com:80/2010/10/14/ — データマートの限界と、瓶入りの水と湖のたとえ。 ↩
-
Dixon「Data Lakes Revisited」2014. http://web.archive.org/web/20141226052210id_/http://jamesdixon.wordpress.com/2014/09/25/data-lakes-revisited/ — 多くのシステムを結合するものは自分の言うデータレイクではないという説明。 ↩ ↩2
-
Pavlo ほか「A Comparison of Approaches to Large-Scale Data Analysis」SIGMOD, 2009. http://www.cs.cmu.edu/~pavlo/papers/benchmarks-sigmod09.pdf — 100台で並列 DB が 3.1〜6.5倍速く、読み込みは Hadoop が速い。 ↩
-
Dean, Ghemawat「MapReduce: A Flexible Data Processing Tool」CACM 53(1), 2010. http://web.archive.org/web/20130115085651id_/http://cacm.acm.org/magazines/2010/1/55744-mapreduce-a-flexible-data-processing-tool/fulltext — 読み込みは分析の5〜50倍という読みと、スキーマの効用の容認。 ↩
-
DeWitt, Stonebraker「MapReduce: A major step backwards」The Database Column, 2008. http://web.archive.org/web/20090630105004id_/http://databasecolumn.vertica.com:80/2008/01/mapreduce-a-major-step-back.html — 不正な値を防げず構造を毎回調べる必要があるという批判(Vertica 社のブログ)。 ↩
-
Gartner「Gartner Says Beware of the Data Lake Fallacy」2014. http://web.archive.org/web/20140730191301id_/http://www.gartner.com:80/newsroom/id/2809117 — メタデータが無ければデータの沼になるという警告(意見)。 ↩
-
Stonebraker「Why the ‘Data Lake’ is Really a ‘Data Swamp’」BLOG@CACM, 2014. http://web.archive.org/web/20160115063618id_/http://cacm.acm.org/blogs/blog-cacm/181547-why-the-data-lake-is-really-a-data-swamp/fulltext — 取り込みは小さく、残る四つの作業が大きい。 ↩
-
Sun「Open Sourcing WhereHows: A Data Discovery and Lineage Portal」LinkedIn Engineering, 2016. https://engineering.linkedin.com/blog/2016/03/open-sourcing-wherehows—a-data-discovery-and-lineage-portal — HDFS と Teradata のデータの説明と来歴、探す手間(自社報告)。 ↩
-
Majumdar, Li「Metacat: Making Big Data Discoverable and Meaningful at Netflix」Netflix TechBlog, 2018. http://web.archive.org/web/20200113031735id_/https://medium.com/netflix-techblog/metacat-making-big-data-discoverable-and-meaningful-at-netflix-56fb36a53520 — Pig と Hive の間でデータの説明を共有するために作った経緯。 ↩
-
Shiftehfar「Uber’s Big Data Platform: 100+ Petabytes with Minute Latency」Uber Engineering, 2018. http://web.archive.org/web/20200107041352id_/https://eng.uber.com/uber-big-data-platform/ — 湖で解いたもの、スキーマの管理、不正な値の流入と値の検査の方針(自社報告)。 ↩
この記事はAIが執筆しています。内容には誤りが含まれる可能性があります。ご注意ください。