はじめに
ビッグデータ解析のためのシステム基盤として、Hadoopをはじめとするオープンソースのデータ処理ソフトウェア(データ処理系)が広く利用されつつありますが、当該データ処理系をすでに利用している、もしくは利用の検討をしている読者の方々の中には、たとえば以下のような問題を抱えている方が少なからずいらっしゃるのではないでしょうか。
- データ処理系の使い方はなんとなくわかるが、その内部をあまり理解できていない。または、内部の動作原理がよくわからないので、本格的に使う気にならない。
- 同様の目的を達成する複数のデータ処理系において、どれを使って良いかがよくわからない。または、適切に使い分けられていない気がする。たとえば、どのような場合にHadoopを用いて、どのような場合に同類のデータ処理系であるImpalaやSparkを用いれば良いかが“明確に”わからない。
このような問題を解決するには、「Hadoopなどのデータ処理系を深く理解すること」が重要であり、これが本連載のテーマです。
本連載の目的
Hadoopをはじめとするデータ処理系は、複数の計算機を用いて並列にデータを処理をすることよりスケーラブルなデータ処理を実現し、加えて、一部のデータ処理系においては、データやデータに対する手続きをデータ処理の最中にバックアップしておくことにより、ハードウェアなどに障害が発生した場合においても、フォールトトレラントなデータ処理を実現します。すなわち、当該データ処理系を用いたシステムでは、アプリケーション開発者(当該データ処理系の利用者)がスケーラビリティやフォールトトレランシに関する処理を記述する必要はありません。
データ処理に関するシステムソフトウェアは複雑化の一途を辿っているため、アプリケーション開発者が当該データ処理系の仕組みを理解しておらずともスケーラブルでフォールトトレラントなデータ処理を記述できるという方向性は、極めて正しいと考えられますが、他方で、どのような動作原理で当該データ処理を実現してるかを理解することは、たとえば「はじめに」で示した点で、とても重要であると言えるでしょう。
このような考えに基づき、本連載では、Hadoopをはじめとするデータ処理系の基本である並列データベース技術や分散システム技術を解説し、読者のみなさんに当該ソフトウェアを深く理解していただきます。
データ処理とは
本連載ではデータ処理系の動作原理を説明する、と言いましたが、そもそも「データ処理」とは何でしょうか。非常に抽象的な言葉であり、人によって捉え方が異なるかもしれないので、念のため、まずはじめに本連載が対象とする「データ処理」をかんたんに定義しておきます。「定義」というと仰々しいですが、読者のみなさんが共通認識を持っておくための事前準備という程度のものですので、さらっと流し読みしていただければ結構です。
本連載におけるデータ処理は、「データを二次記憶装置(HDDやSSDなど)から読み出して、主記憶に格納し、当該データを用いて演算処理などを行い、何らかの結果を取得するもの」であるとします。よって、本連載におけるデータ処理においては、後から参照するために結果や中間状態を二次記憶装置などに書き出す場合はありますが、トランザクションなどの書き出し処理は行いません。なお、この一連の処理は、基本的には複数の計算機を用いて並列に実行されるものとし、当該データ処理を特に並列データ処理と呼ぶこととします。
並列データ処理においては、複数の計算機を用いて並列に処理をするため、計算機の台数に比例してシステム全体の性能が向上する(すなわち、スケーラブルである)ことが望ましいと考えられます。また、複数の計算機を用いる場合、1台の計算機を用いる場合と比較して、システム全体としての故障率が増加するため、一部の計算機が故障した場合であっても、システムが正常に動作し続ける(すなわち、フォールトトレラントである)ことが望ましいと考えられます。
本連載では、このような並列データ処理における望ましい性質を実現するための技術について解説していきます。
今後の流れ
本連載は次のような流れで進めていく予定です。まず第1部では、並列データ処理の基本である並列データベース技術や分散システム技術を、Hadoopなどのデータ処理系の設計や実装との関連性に言及しつつ解説していきます。次に第2部において、それまでの習得した知識を用いて、それぞれのデータ処理系ごとに、その設計と実装を読み解いていきます。
- 第1部 並列データベース・分散システムの基本
- はじめに(今回)
- 並列データ処理の歴史
- 並列と分散
- データ処理の方法
- データ処理の並列化
- データ処理における並列アルゴリズム
- データ処理のモデル化
- クエリ最適化
- データレイアウト
- ロギング
- レプリケーション
- コンセンサスアルゴリズム
- 中間まとめ
- 第2部 Hadoop処理系の設計と実装
- Hadoop
- Impala、Presto
- Dryad、Tez
- Spark
- 最後のまとめ
「HadoopやImpalaの動作原理をすぐに知りたい」という方にとっては、少し遠回りしているように思えるかもしれませんが、当該データ処理系は深い技術をベースにしていますので、まずはその根幹の技術をしっかり押さえることが望ましい、という意図でこのようなトップダウン的な流れにしました。しかし、当然第1部においても、可能な限り現状のデータ処理系の実装を踏まえつつ説明していければと思います。
「Hadoopなどを使用していて、もう一段深く理解したい」という方や、「Hadoopなどは使用していないが、まずその動作原理を理解して使い始めたい」と思っている方、または「単純に並列データベースや分散システムなどの基盤システム技術に興味がある」という方などに楽しんでいただける内容にできればと考えています。