sql >> データベース >  >> RDS >> Database

MapReduceがHadoopでどのように機能するか

    MapReduce は、安価なマシンの大規模なクラスターでビッグデータの問題のクラスを解決する方法としてGoogleによって導入されたモデルでした。 Hadoopは、このモデルを作業プロセスのコアに取り入れています。この記事では、ビッグデータの問題を解決するためにHadoopが使用するMapReduceモデルの概要を説明します。

    概要

    典型的なビッグデータアプリケーションは、スケーラブルなデータの大規模なセットを処理します。単一のデータベースを使用して保存および取得することは、処理の大きなボトルネックになる可能性があります。これは、リレーショナルデータベースで確認できるように、モノリシックデータベースを使用して大量のデータを格納し、それらが単一のリポジトリとしてどのように使用されるかを示す場合に特に当てはまります。これは機能しません。特に、分散環境で大規模なデータセットを処理する必要があります。

    GoogleはMapReduceアルゴリズムを使用して状況に対処し、解決策を考え出しました。アイデアは、大きなタスクを小さな管理可能な部分に分割し、それらをネットワーク内のコンピューターに分散して処理することです。このようにして得られた結果は、最終的なデータセットを形成するために統合されます。このアイデアは、ダグカッティングのHadoopプロジェクトのベースになりました。 Hadoopはこのアルゴリズムを使用して、他のデータと並行してデータを処理し、大規模なデータセットに関する完全な統計分析を提供します。したがって、Hadoopは大きく2つの部分に分けることができます。

    • 処理: MapReduceアルゴリズムによって活用されます
    • ストレージ: HDFSによる活用

    したがって、Hadoop MapReduceは、ApacheHadoopプロジェクトによって開発および保守されているアルゴリズムの実装です。それ自体が機械のように機能し、入力を提供します。エンジンは、入力を出力にすばやく効率的に変換し、複数の段階で処理することで応答します。この明らかに単純化されたアイデアは、その後に続くため、少し詳しく説明する必要があります。

    MapReduce

    MapReduceは、分散アプリケーション環境での高速データ処理に使用される並列プログラミングモデルです。コモディティハードウェアネットワークのクラスター(数千のノード)に分散されたデータセット(数テラバイトのデータ)で機能します。 MapReduceプログラムはHadoopで実行され、Java、C ++、Python、Rubyなどの複数の言語で記述できます。 MapReduceプログラムの主な特徴は、プログラムに並列処理の精神を本質的に取り入れていることです。これにより、並列処理のモデルを実践に活用して、既存のインフラストラクチャから結果をより効率的かつ迅速に絞り出すことができる大規模なデータ分析に最適です。

    仕組み

    Hadoop MapReduceは、タスクを複数のステージに分割します。各ステージには、ビッグデータから目的の結果を抽出するための重要な関数セットがあります。コモディティサーバーのコレクションでホストされているクラスター内のノードで機能します。このプロセスは、MapReduceエンジンを実行するユーザーリクエストで始まり、結果がHDFSに保存されることで終わります。

    JobClient.runJob(conf)を呼び出すことで、実行するMapReduceジョブを開始できます。 方法。これは、新しい JobClientを作成するための便利な方法です。 実例。これにより、 submitJob()が呼び出されます。 毎秒ジョブの進行状況をポーリングし、最後のレポートが生成されてから変更があった場合はコンソールに報告します。これには波及効果があり、舞台裏で一連の操作をトリガーします。最初のステップは、生データを含む入力ファイルを見つけて読み取ることです。ファイル形式は任意であり、処理に適した形式に変換する必要があります。これはInputFormatの仕事です およびRecordReader(RR) InputFormat InputSplitという関数を使用します ファイルを小さな部分に分割します。 RecorReader(RR) 次に、生データを変換し、 mapで処理できるようにします。 。

    マッピング

    データのマッピングが受け入れられると、各入力ペア(キーと値)に個別のインスタンスが作成され、処理が開始されます。マッピング関数が出力を生成し始めるとすぐに、それはディスクに直接書き込まれません。代わりに、事前ソートを行うためにメモリバッファに保存されます。各マップは、出力をリダイレクトする循環バッファーを維持します。しきい値サイズを超えると、コンテンツの流出がディスクに書き戻されます。さらに、データを、次にデータがリダイレクトされるレデューサーに受け入れられるパーティションに分割します。ただし、これらの作業はすべて、Hadoopクラスター内の複数のノードで同時に実行されます。マップタスクの完了後、中間結果がパーティションに蓄積され、シャッフルと並べ替えが行われて出力が最適化され、reduceが入力として引き継がれます。

    削減とマージ

    リデュースが取得するのは、キーと値のペアでもあり、マップと同じように機能します。クラスタ全体のいくつかのマップタスクからマップ出力を収集し、マッピングが完了した後にのみ処理を開始します。マップによって提供される出力をマージしてディスクにスピルするためのコピースレッドのセットがあります。コピーがディスクに蓄積されると、バックグラウンドスレッドがそれらをより大きなソートされたファイルにマージする役割を果たします。また、キーと値のペアの形式で出力を提供し、 OutputFormatによって再フォーマットする必要がある場合があります。 アプリケーションがフォーマットを受け入れることができるようになる前に。 OutputFormat 最後に、キーと値のペアを取得し、処理されたデータをHDFSに書き戻します。ここでは、 RecordWriter RecordReader のように、主要な役割を果たします 、ただし、最初にHDFSからの読み取り中に参加する点が異なります。

    結論

    これは氷山の一角にすぎません。多くの複雑な詳細があり、舞台裏でさらに多くのことが行われています。つまり、Hadoop MapReduceは、ビッグデータをより小さく管理しやすい部分に分割し、分散クラスターで並行して処理し、最後にデータを消費または追加処理に利用できるようにする機能を提供します。今日のHadoopは、時代遅れのビッグデータの問題を解決するためのツールとテクノロジーのより大きなエコシステムに成長し、その機能を改良するために急速に進化しています。


    1. MariaDBでのCOT()のしくみ

    2. SQLServerでのLIKEとCONTAINS

    3. MySQL/MariaDB用のAzureデータベースをオンプレミスサーバーに移行する

    4. SQL ServerでのIIF()のしくみ