分はじめに第一部では,Hadoopなどの並列データ処理系の基礎である並列データベース技術や分散システム技術を解説してきました。第二部では,実際の処理系により焦点を当て,それらの設計と実装を見ていきます。MapReduceを始めとし,当該処理系のリソース管理を行うYARNおよび,汎用的な並列データ処理系であるTezについて解説を行う予定です。今回は,MapReduceにおける設計方針や特徴について解説します。Deanらにより開発が始められました。Hadoopがあります。一般的に,MapReduceは以下のような特性を有します。高い性能スケーラビリティ(スケーラビリティについては第6回を参照してください)高い耐障害性(たとえば,ジョブの実行中に一部の計算機が故障してもジョブが動作し続ける特性。くわしくは第11回を参照してください)上記2つの特徴を実現する機能をプログラマから隠蔽した抽象化インターフェース現在のMapReduceの多くは,上記の3つの特徴を満たすために,ユーザによって指示された処理を実行するMapReduce処理系と,高速なファイルの読み書きが可能な分散ファイルシステムによって構成されます(図1・※1⁠)⁠。以下では,上記の3つの特徴がそれぞれどのような設計方針により実現されているかについて解説します。典型的なシステム構成。MapReduce処理系は,専用の分散ファイルシステムに保存されたデータに対して読み書きを行う※1)性能の観点では,このような分離型のアーキテクチャは必ずしも適切ではない可能性がありますが,当該アーキテクチャは,システムの粗結合化によりソフトウェア開発における生産性やソフトウェアの再利用性が向上するなどの利点があり,Googleにおいては後者をより重視したのではと考えられます。高い性能スケーラビリティを実現する設計方針MapReduceにおいては,次の2つの設計方針により,高い性能スケーラビリティを実現します。System)などの分散ファイルシステムと比較して,ディスクドライブの有する高いシーケンシャルアクセス性能を活用することができます。各計算機においては,自計算機のローカルにあるデータの走査を基本とすることにより,無共有型のアーキテクチャ(第2回)において,高いスケーラビリティ(第6回)を実現することが可能です。各計算機のディスク性能が100MB/sであり,1000台の計算機により各々が並列にディスクを走査する場合は,100GB/s(=100MB/s×1000)に近い性能を出すことが可能です。走査でなく,索引などを用いてアクセスを行う場合は,問い合わせに必要なデータのみにアクセスすることができる反面,多くの場合,ランダムアクセスとなり,ディスクドライブの高いシーケンシャルアクセス性能を活用できません。並列構成においては,グローバル索引(第6回)と称される索引を必要とし,当該ケースにおいては,ネットワークを介した計算機間のインタラクションが発生する場合があるため,計算機の数に比例してスループットを上げることが必ずしも容易ではありません。MapReduceにおいては,ネットワーク入出力を最小限に抑えるべく,転送データの圧縮を始めとする種々の効率化技法が用いられています。MapReduceで集約処理を行う場合,Mapの出力データを集約キーによってネットワークを介して分配し,Reduce側でキーごとの集約を行うのが通常ですが,可換則と結合則を満たす集約処理の場合は,Map側で集約処理を可能な限り行う,いわゆる部分集約という処理を行い,ネットワークへのデータ転送量の削減を試みています。このような方針は,近年の計算機構成を考慮して設計されていると考えられます。近年におけるコモディティサーバは複数のコアや複数のディスクドライブを有することが一般的であり,たとえば,4台のディスクドライブを有する計算機においては400MB/s(=100MB/s×4)程度の読み込み性能が出せる可能性があります。ネットワークスイッチにおいては,10GbpsのEthernetスイッチが普及しつつあるものの,1Gbps(=128MB/s)のものがいまだ主流であり,つまり,多くの場合,ネットワークスイッチのI/O性能が各計算機のI/O性能よりも低いと想定されるため,上記のような設計方針になっていると見ることができます。※2)分散ファイルシステムからOSへのアクセス単位です。OSのドライバからディスクドライブへは,数KB程度に分割されて連続アクセスが行われることが一般的です。複数の計算機から構成されるシステムにおいては,計算機の数に比例してシステム全体の故障率が上がるため,高い耐障害性を有する必要があります。上記の設計方針により,複数の計算機を活用した高い性能スケーラビリティが得られるものの,たとえば,ジョブの処理の途中に計算機が故障してしまった場合に,当該処理をはじめから再開していては,高い性能を実現できているとはいえません。MapReduceでは,分散ファイルシステムにおいてレプリケーション(第11回)を用いることにより,ブロックの高い可用性を実現します。MapReduce処理系が中間データを二次記憶に適宜書き出すことにより(第11回⁠)⁠,ジョブの処理の途中に障害が発生した場合であっても,一部の処理だけを再度実行すればいいような設計となっています。抽象化インターフェース上記の2つの特徴を実現する機能を有する並列データ処理系であれば,高い性能を実現できますが,処理系を用いるプログラマが当該機能を都度記述するのは,困難であり非効率的であると考えられます。MapReduceにおいては,map()とreduce()なる2つの関数だけをプログラマに定義させ,その他の処理はすべて処理系で行うという設計方針をとります。map()とreduce()は制限されたインターフェースであるものの,記述できる処理の内容は幅広く,当該特性がHadoopがフレームワークと称される所以でしょう。MapReduceは,プログラマに高い記述性と生産性を提供しつつ,高いデータ処理性能を提供するソフトウェアであるといえます。MapReduceの設計方針における特徴について説明しました。MapReduceの実装における特徴について説明します。著者プロフィール小沢健史(おざわつよし)2010年日本電信電話(株)に入社。2013年度コンピュータサイエンス領域奨励賞受賞。2014年第9回日本OSS奨励賞受賞。Hadoopコミッタとして活動中。ソフトウェアイノベーションセンタ所属。山田浩之(やまだひろゆき)日本アイ・ビー・エム株式会社を経て,ヤフー株式会社にて分散型全文検索エンジンの研究開発に従事。おいて高性能分散型検索エンジンの開発によりスーパークリエータに認定。高性能並列データ処理系の研究開発に従事。著書に『検索エンジン自作入門』。2019」を開催しました。DAY1・DAY2の様子を注目セッションとともにお伝えします。LINEのエンジニア3名がイベントに先駆けて見どころを紹介します。コードの安全性・安定性を高める開発サイクル~テスト管理の効率を上げ,脆弱性診断を自動で行う~本連載では,連載「業務を改善する情報共有の仕掛け」を受けつつ,安全性・安定性を加えた開発サイクルについて考えていきます。若者世代から圧倒的な人気を誇るライブ配信&動画投稿コミュニティアプリ「MixChannel」(ミクチャ)の裏側(レコメンドシステムやサーバサイド開発など)について解説していきます。その他の連載CSS3アニメーションでつくるインターフェイス表現CSS3によるアニメーション表現を紹介していきます。その中でも,幅広い読者に応用してもらえるだろうインターフェイスを主なお題とします。MySQL道普請便り本連載では,MySQLを使ったアプリ開発・運用に関するノウハウをご紹介していきます。RecipeUbuntuの強力なデスクトップ機能を活用するための,いろいろなレシピをお届けします。JavaScriptセキュリティの基礎知識JavaScriptに関するセキュリティ上の問題はどこで発生し,どうすれば防ぐことができるのか?について解説していきます。〜システムをきちんと運用するための基礎知識システムは「作って終わり」ではなく,運用の中でさまざまな問題が発生します。問題の発生に備えて事前にどのような対応をしておくべきなのか,問題発生時に何をしなければならないのか,ポイントを解説していきます。きたみりゅうじの聞かせて珍プレーソフトウェア開発の現場で体験したトホホな失敗,思わずうなる珍プレーをきたみりゅうじ氏が四コママンガで紹介。Linuxのメンテナンスの傍ら,Linuxやオープンソースソフトと日々を過ごす著者が,その魅力とつきあい方を,エッセイ風味でお届けします。PRESS特別編集部員,さわやか笑顔のスーパーハカーはまちちゃんとネット大好き14歳わかばちゃんが,毎号,読者の皆さんから寄せられたおたよりを紹介します。皆さんの日頃の悩みにも答えちゃいますよ。]メールでのお知らせメールで次の案内をお送りしております。メールの配信を希望する方は,利用したい項目をチェックしてメールアドレスを入力し,[登録]ボタンをクリックしてください。UPDATES[ほぼ週間に1回]新刊メールマガジン[ほぼ週間に1回]電脳会議の各号案内[ほぼ1ヵ月半に1回]※変更する場合や停止する場合は,登録情報変更ページをご覧ください。※登録いただいたメールアドレスには,そのお知らせ以外,配信いたしません。Ltd.ページ内容の全部あるいは一部を無断で利用することを禁止します。個別にライセンスが設定されている記事等はそのライセンスに従います。