Hadoopはどのように動くのか ─並列・分散システム技術から読み解くHadoop処理系の設計と実装

第3回 並列システムと分散システム

この記事を読むのに必要な時間:およそ 2 分

はじめに

前回は並列データ処理系の歴史や重要性について見てきました。今回は,これまで明確に説明してこなかった「並列」という言葉やその類語を定義し,本連載の対象である並列データ処理系がどのようなものであるかをより明確にしていきます。

並列と分散

ではまず,本連載における「並列(Parallel)⁠という言葉をもう少し明確にしましょう。コンピュータ処理においては,一般的に,2つ以上の処理が「並列」に実行される,という場合は,当該処理が「同時」に実行されることを意味します。同様の概念に「並行(Concurrent)⁠がありますが,2つの処理が並行に処理されるという場合は,必ずしも,2つの処理が同時に実行される必要はありません。すなわち,一般的には,並行は並列を包含する概念であると定義されています1]⁠たとえば,2つの処理を交互に実行する場合は,当該処理は並行に実行されていますが,並列には実行されていない,ということです。

また,並列と類似の概念を表す言葉に「分散(Distributed)⁠があります。本連載のサブタイトルや第1回においても分散という用語を用いました。では,並列と分散は何が異なるのでしょうか。多くの場合,これらを明確に区別することは難しく,専門書などにおいても,これらは明確に区別されることはなく,オーバーラップする概念であると考えられています23]⁠本連載も,上記と同様の考えですが,システムの観点において,次に示す一応の定義を与えておくこととします。

  • 並列システム:複数の計算機や複数の計算ユニットで構成される1つの自律的なシステム(系)※1
  • 分散システム:複数の自律的なシステムをネットワークなどをとおして連携するシステム(系)

ここで言う「自律的なシステム」とは,当該システムのみにおいて1つのジョブを処理できることを意味することとします。

※1)
本連載では,⁠系」「システム」は同じ意味の用語として用います(ただし,並列システムとは言いますが,並列系とは言わないので,そのような場合は適当な言葉を選んで使います)⁠

分散システム技術を活用したデータ処理専用の並列システム

一応の言葉の整理ができましたので,本連載で扱う並列データ処理系をもう少し明確にしておくことにしましょう。これまでは,⁠データ処理を(無共有型の)複数の計算機を用いて並列に実行すること」を本連載が対象とする並列データ処理としてきましたが,まずは,並列データ処理系の動作をもう少し具体的に見てみます。

本連載における並列データ処理は,高速ネットワークによって接続された複数のプロセッサもしくは計算機(以下,計算機とする)を用いて,与えられたデータ処理を並列化して実行することにより,その高速化を目指すものであるとします。多くの並列データ処理系では,事前にデータ処理の対象となるデータセットを分割して計算機が管理する二次記憶に格納しておき,データ処理のジョブが与えられると,当該ジョブを分割もしくは複製して計算機に割り当て,各計算機において割り当てられたジョブを実行します。各々の計算機では,割り当てられた各ジョブにおいて,データの入出力命令を発行して,当該データを用いて演算等の処理を実行することを,対象のすべてのデータを処理し終えるまで繰り返します。

このように,本連載における並列データ処理系は,複数の計算機を用いて1つのジョブを処理するものですので,複数の計算機から構成される1つの自律的なシステムです。すなわち,並列システムであると考えられます。ただし,第1回でもかんたんに述べたように,一部の計算機が故障などにより動作しない場合においてもシステムが自律的に動作する必要があるため,多くの並列データ処理系には分散システムの技術が取り入れられています。たとえば,10台の計算機から構成される並列システムにおいていかなる計算機が1台故障しても動作し続けることを可能とするためには,10台の内のいかなる9台においても,それらの計算機が自律的なシステムを構成している必要があります。このように考えると,本連載が対象とする並列データ処理系は,⁠分散システム技術を活用したデータ処理専用の並列システム」であると言うことができます。

並列データ処理系において活用される分散システム技術

たとえば,並列データ処理の最中に,並列データ処理系を構成する計算機の一部が故障した場合,当該計算機が保持していたデータが失われる可能性があります。そのような場合においてもデータ処理を続けていけるように,データを複数の計算機にコピーしておくことが行われます。このように複数の計算機にデータのコピー(レプリカ)を保持しておく分散システム技術をレプリケーションと呼びます。当該技術は,Hadoopなどの並列データ処理系で用いられている分散ストレージであるHDFSなどにおいて用いられています。

また,並列データ処理系は1つの自律的なシステムであるため,当該処理系を構成する複数の計算機は,常に同一の状態を維持している必要があります。しかしながら,一部の計算機が故障した場合や,当該計算機を接続するネットワークに障害や分断が発生した場合は,全体を同一の状態に保っておくことが難しくなる可能性があります。そのような障害が発生した場合においても,全体の状態を同一に保つための分散システム技術をコンセンサスと呼びます。当該技術はZookeeper※2などにおいても用いられています。

レプリケーションやコンセンサスについては,また後の回で説明します。

※2)
Zookeeperは,Hadoopにおけるリソース管理プラットフォームであるYARN(MRv2)における,高可用性(HA:High Availability)を実現するための機構などに用いられています。

おわりに

今回は,⁠並列」「分散」という言葉を整理し,本連載の対象である並列データ処理系がどのようなものであるかを明らかにしました。これまでは導入的な話が続き少し退屈だったかもしれませんが,次回からは少しずつデータ処理の中身について触れていく予定です。

参考文献

[1] C. Breshears. "The Art of Concurrency" O'Reilly, 2009.

[2] M. T. Özsu, P. Valduriez. "Principles of Distributed Database Systems" Springer, 2011.
[3] S. Ghosh. "Distributed Systems: An Algorithmic Approach" Chapman and Hall/CRC, 2014.

著者プロフィール

山田浩之(やまだひろゆき)

日本アイ・ビー・エム株式会社を経て,ヤフー株式会社にて分散型全文検索エンジンの研究開発に従事。2008年上期未踏IT人材発掘・育成事業において高性能分散型検索エンジンの開発によりスーパークリエータに認定。現在は東京大学生産技術研究所にて高性能並列データ処理系の研究開発に従事。博士(情報理工学)。

著書に『検索エンジン自作入門』。

コメント

コメントの記入