Hadoop の MapReduce とは何ですか?ビッグデータ Archi構造

Hadoop の MapReduce とは何ですか?

MapReduce は、大量のデータを処理するために使用されるソフトウェア フレームワークおよびプログラミング モデルです。 MapReduce プログラムは、Map と Reduce の XNUMX つのフェーズで動作します。 Map タスクはデータの分割とマッピングを処理し、Reduce タスクはデータをシャッフルして削減します。

Hadoop は、さまざまな言語で記述された MapReduce プログラムを実行できます。 Javaルビー、 Python, C++クラウド コンピューティングにおける Map Reduce のプログラムは本質的に並列であるため、クラスター内の複数のマシンを使用して大規模なデータ分析を実行するのに非常に役立ちます。

各フェーズへの入力は次のとおりです。 Key-Value ペア。 さらに、すべてのプログラマは次の XNUMX つの関数を指定する必要があります。 マップ機能   機能を減らす.

MapReduce Archiビッグデータの構造を例で説明

プロセス全体は、分割、マッピング、シャッフル、リダクションという XNUMX つの実行フェーズを経ます。

この MapReduce チュートリアルでは、MapReduce の例を使って理解しましょう。

MapReduceに次のような入力データがあるとします。 ビッグデータプログラム

Welcome to Hadoop Class
Hadoop is good
Hadoop is bad
MapReduce Archi構造
MapReduce Archi構造

MapReduce タスクの最終出力は次のとおりです。

悪い 1
CLASS 1
良い 1
Hadoopの 3
is 2
〜へ 1
ようこそ 1

データはビッグデータにおけるMapReduceの以下の段階を経る。

入力分割:

MapReduce in Big Data ジョブへの入力は、と呼ばれる固定サイズの部分に分割されます。 入力分割 入力分割は、単一のマップによって消費される入力のチャンクです。

マッピング

これは、マップリデュースプログラムを実行する最初のフェーズです。このフェーズでは、各分割のデータがマッピング関数に渡され、出力値が生成されます。この例では、マッピングフェーズの仕事は、入力分割(入力分割の詳細については後述)から各単語の出現回数をカウントし、次の形式でリストを準備することです。

シャッフリング

このフェーズは、マッピング フェーズの出力を消費します。 そのタスクは、マッピング フェーズの出力から関連するレコードを統合することです。 この例では、同じ単語がそれぞれの頻度とともにまとめられています。

縮小

このフェーズでは、シャッフル フェーズからの出力値が集計されます。このフェーズでは、シャッフル フェーズからの値が結合され、単一の出力値が返されます。つまり、このフェーズでは完全なデータセットが要約されます。

この例では、このフェーズはシャッフリング フェーズからの値を集計します。つまり、各単語の合計出現回数を計算します。

MapReduce Archi構造を詳しく説明

  • スプリットごとに XNUMX つのマップ タスクが作成され、スプリット内の各レコードに対してマップ関数が実行されます。
  • 分割の処理にかかる時間は、入力全体の処理にかかる時間に比べて短いため、複数の分割を行うことは常に有益です。 分割が小さい場合、分割を並列処理するため、処理の負荷分散がより適切になります。
  • ただし、分割のサイズが小さすぎるのも望ましくありません。 スプリットが小さすぎると、スプリットの管理とマップ タスクの作成による過負荷がジョブの合計実行時間の大半を占め始めます。
  • ほとんどのジョブでは、分割サイズを HDFS ブロックのサイズ (デフォルトでは 64 MB) と同じにすることをお勧めします。
  • マップ タスクを実行すると、出力は HDFS ではなく、それぞれのノードのローカル ディスクに書き込まれます。
  • HDFS ではなくローカル ディスクを選択する理由は、HDFS ストア操作の場合に発生するレプリケーションを回避するためです。
  • マップ出力は中間出力であり、reduce タスクによって処理されて最終出力が生成されます。
  • ジョブが完了すると、マップ出力は破棄できます。 したがって、レプリケーションを使用して HDFS に保存するのは過剰になります。
  • ノードに障害が発生した場合、マップ出力がリデュース タスクによって消費される前に、Hadoop は別のノードでマップ タスクを再実行し、マップ出力を再作成します。
  • Reduce タスクはデータの局所性の概念では機能しません。 すべてのマップ タスクの出力は、reduce タスクに供給されます。 マップ出力は、reduce タスクが実行されているマシンに転送されます。
  • このマシンでは、出力はマージされ、ユーザー定義のreduce関数に渡されます。
  • マップ出力とは異なり、reduce 出力は次の場所に保存されます。 HDFS (最初のレプリカはローカル ノードに保存され、他のレプリカはオフラック ノードに保存されます)。 したがって、reduce 出力を書くと、

MapReduce はどのように機能するのでしょうか?

この MapReduce チュートリアルでは、MapReduce がどのように機能するかを学びます

Hadoopの 仕事をタスクに分割します。 タスクには次の XNUMX 種類があります。

  1. マップタスク (分割とマッピング)
  2. タスクを減らす (シャッフル、リダクション)

上記のように。

完全な実行プロセス (Map タスクと Reduce タスクの両方の実行) は、

  1. ジョブトラッカー: のように動作します マスター (送信されたジョブの完全な実行を担当します)
  2. 複数のタスクトラッカー: のように動作します 奴隷、 それぞれが仕事を遂行している

システム内で実行するために送信されたジョブごとに、XNUMX つのジョブが存在します。 ジョブトラッカー に存在する ネームノード そしてあります 複数のタスクトラッカー に存在する データノード.

Hadoop MapReduce の仕組み
Hadoop MapReduce の仕組み
  • ジョブは複数のタスクに分割され、クラスター内の複数のデータ ノード上で実行されます。
  • ジョブ トラッカーは、さまざまなデータ ノードで実行するタスクをスケジュールしてアクティビティを調整する責任があります。
  • 個々のタスクの実行は、ジョブの一部を実行するすべてのデータ ノードに常駐するタスク トラッカーによって管理されます。
  • タスク トラッカーの役割は、進捗レポートをジョブ トラッカーに送信することです。
  • さらに、タスクトラッカーは定期的に送信します 「心臓の鼓動」 Jobtracker に信号を送り、システムの現在の状態を通知します。
  • したがって、ジョブ トラッカーは各ジョブの全体的な進行状況を追跡します。 タスクが失敗した場合、ジョブ トラッカーは別のタスク トラッカーでタスクを再スケジュールできます。