minminの備忘録

フルスタックになりたいエンジニアの備忘録 → https://zuminblog.com/ へ引越し中

MapReduceについて

最近、大規模分散処理について学ぼうという機運が高まっており、Hadoopについて学んでいるのでその備忘録です。(勉強を始めたばかりなので、間違っていることもあるかもしれませんが、その場合は指摘していただけると嬉しいです)

今回は、MapReduceに関する記事になります。

一応、HDFS(Hadoop Distributed File System)について書いた記事の続きのつもりで書いているので、HadoopHDFSってなんぞやって人はそこから読んでもらうと良いかもしれません。

https://minmin-21.hatenablog.com/entry/2019/08/19/185459minmin-21.hatenablog.com

MapReduceとは

MapReduceとはHadoopで使われている、大規模データの並列分散処理のアルゴリズムです。

MapReduceの説明に入る前に、まずは前提としてHadoopでの分散処理の概要について説明したいと思います。

Hadoopにおける分散処理概要

Hadoopでは分散処理の仕組みとして、以下のようなマスタースレーブ方式をとっており、大きく3つの要素から構成されています。(HDFSとほとんど似たような感じです。)

  • Hadoopクライアント
    • Hadoopクラスタとクライアント(User)の仲介役として、JobTrackerに対して処理の実行を依頼する
  • JobTracker
    • TaskTrackerに対して、処理タスクの割り当てを行うサーバー
    • TaskTrackerの状況監視も行う
  • TaskTracker
    • JobTrackerからの指示を受けて、実際に処理を行うサーバー
    • JobTrackerに定期的に状況報告を行う(ハートビート)

f:id:minmin_21:20190824150208p:plain
Hadoop分散処理概要

最終的な処理結果はHDFSに書き出して終了という感じです。

アルゴリズム概要

今回は説明のために以下のように、複数の食料品店の在庫データから全ての店舗を合計した各食料品の在庫数を調べる、ということを例にして説明していきたいと思います。

f:id:minmin_21:20190824150306p:plain

MapReduceアルゴリズムは、Map, Shuffle, Reduceの3つのフェーズから構成されています。

各ステップについて、それぞれ詳しく見ていきたいと思います。

Mapフェーズ

このフェーズでは、HDFSに保存されているデータを読み込んで、Key-Valueの形にデータを変換し、データに対して意味づけを行います。

具体的には、以下のような感じです。

f:id:minmin_21:20190824150345p:plain
Mapフェーズ

DataNodeとMapperタスクを行うTaskTrackerは同じにした方が、通信コストがなくなるので処理を早くすることができますが、必ずしも同じにする必要はありません。(データのローカリティと言います)

Shuffleフェーズ

Shuffleフェーズでは、Mapフェーズで意味付けしたデータの整理を行い、Reduceフェーズに向けてどの処理をどのTaskTrackerに割り当てるかを決定します。

具体的には、以下のような感じです。

f:id:minmin_21:20190824150422p:plain
Shuffleフェーズ

「各TaskTrackerにどのデータを処理を担当させるか割り当て」のフェーズでは、実際にデータを動かしてまとめるのではなく、どのTaskTrackerに割り当てるかを決めるだけです。概念をわかりやすく説明するために、図ではまとめているように見せています。(間違ってたらすみません。。)

Reduceフェーズ

このフェーズでは、Shuffleフェーズで割り当てられたタスクを実行するために、担当分のデータを取得し処理を行います。

今回の場合、各データの集計処理を行います。

具体的には以下のような感じです。

f:id:minmin_21:20190824150453p:plain
Reduceフェーズ

Shuffleフェーズではどのデータを担当するか割り当てているだけなので、Reduceフェーズの始めに各TaskTrackerは担当分のデータを他のTaskTrackerからコピーしてきます。

どのTaskTrackerに担当のデータがあるかの情報はJobTrackerに問い合わせることで取得しています。

まとめ

これまでに説明した各フェーズをまとめた図を以下においておきます。

f:id:minmin_21:20190824150527p:plain
MapReduce

最後に

Hadoop(主にMapReduce)について学ぶ時に、以下の書籍・資料が非常に分かりやすかったので、詳しく勉強したい・この記事じゃ分からんって人は、以下の資料を見てみることをお勧めします。

参考