sql >> データベース >  >> NoSQL >> HBase

Hadoopの仕組み–Hadoopの仕組みを理解する

    Hadoopが実際に大量のデータを保存および処理する方法を知りたいですか?

    この記事では、Hadoopが内部でどのように機能するかを学習します。 Hadoopが大規模なデータセットをどのように保存および処理するかを見ていきます。この記事では、Hadoopの動作について詳しく説明しています。この記事では、最初にHadoopについて簡単に紹介します。

    次に、HadoopコアコンポーネントとHadoopクラスターで実行されているデーモンが表示されます。次に、この記事では、HDFS、MapReduce、YARNなどのすべてのコアコンポーネントをカバーするHadoopの動作について説明します。

    それでは、最初にHadoopの簡単な紹介を見てみましょう。

    Hadoopの概要

    ビッグデータの増加に伴い、2008年にApache Software Foundationは、すべてのビッグデータの問題に対するソリューションであるApacheHadoopと呼ばれるオープンソースフレームワークを開発しました。

    Apache Hadoopは、テラバイトからペタバイトまでのサイズの膨大な量の非構造化データを保存および処理できるフレームワークです。これは、フォールトトレラント性と可用性の高いシステムです。

    Hadoopは、大量のデータをHDFSに分散して保存します。 Hadoop MapReduceは、データを並列処理するHadoopの処理ユニットです。

    Hadoop YARNは、Hadoopフレームワークのもう1つのコアコンポーネントであり、クラスターで実行されているアプリケーション間のリソースの管理とタスクのスケジューリングを担当します。

    Hadoopが内部でどのように機能するかを学習する前に、まずHadoopの主要なコンポーネントとデーモンを見てみましょう。

    Hadoopのコンポーネントとデーモン

    Hadoopは、HDFS、MapReduce、YARNの3つの主要コンポーネントで構成されています。

    1。 Hadoop HDFS

    これはHadoopのストレージレイヤーです。 Hadoop分散ファイルシステムは、クラスター内のさまざまなノードにデータを保存します。データをブロックに分割し、それらを異なるノードに保存します。 ブロックサイズはデフォルトで128MBです 。要件に応じてブロックサイズを構成できます。

    2。 Hadoop MapReduce

    これはHadoopの処理レイヤーです。 Hadoop MapReduceは、HadoopHDFSに保存されているデータをクラスター内のさまざまなノード間で並行して処理します。ユーザーが送信したタスクを独立したタスクに分割し、コモディティハードウェア全体でサブタスクとして処理します。

    3。 Hadoop YARN

    これは、Hadoopのリソースおよびプロセス管理レイヤーです。 YARNは、クラスターで実行されているアプリケーション間でリソースを共有し、クラスター内のタスクをスケジュールする責任があります。

    これらはHadoopの3つのコアコンポーネントです。

    Hadoopクラスターで実行されているデーモン

    Hadoopクラスターで実行されるデーモンがいくつかあります。 デーモンは、バックグラウンドで実行される軽量プロセスです。

    一部のデーモンはマスターノードで実行され、一部はスレーブノードで実行されます。ここで、Hadoopデーモンについて調べてみましょう。

    主なHadoopデーモンは次のとおりです。

    1。マスターデーモン

    • NameNode: これは、HadoopHDFSのマスターデーモンです。ファイルシステムの名前空間を維持します。ファイルの各ブロックに関するメタデータを保存します。
    • ResourceManager: YARNのマスターデーモンです。クラスタで実行されているすべてのアプリケーション間でリソースを調停します。

    2。スレーブデーモン

    • DataNode: DataNodeは、HadoopHDFSのスレーブデーモンです。スレーブマシンで実行されます。実際のデータまたはブロックを保存します。
    • NodeManager: YARNのスレーブデーモンです。クラスタ内のすべての個々のコンピューティングノードを処理します。

    Hadoopはどのように機能しますか?

    Hadoopは、コモディティハードウェアのクラスター全体に分散してデータを保存および処理します。データを保存して処理するために、クライアントはデータとプログラムをHadoopクラスターに送信します。

    Hadoop HDFSはデータを保存し、MapReduceはHDFSに保存されたデータを処理し、YARNはタスクを分割してリソースを割り当てます。

    これらのコンポーネントについて詳しく見ていきましょう。

    1。 HDFS

    Hadoopのデータは、Hadoop分散ファイルシステムに保存されます。 HadoopHDFSで実行されているデーモンはNameNodeとDataNodeの2つです。

    a。 NameNode

    NameNodeは、HDFSのマスターデーモンです。マスターノードで実行されます。ファイルシステムの名前空間を維持します。 NameNodeは実際のデータを保存しません。ファイルのブロック、ファイルのアクセス許可、ブロックの場所などに関する情報などのメタデータを保存します。

    NameNodeはDataNodeを管理し、それらに命令を提供します。 NameNodeは、3秒ごとにDataNodeからハートビートを受信します。これは、DataNodeが動作していることを示します。

    b。 DataNode

    DataNodeは、HDFSのスレーブデーモンです。 DataNodeは、実際のビジネスデータを格納するスレーブノードです。 NameNodeからの指示に基づいて、クライアントの読み取り/書き込み要求を処理する責任があります。 DataNodeはハートビートメッセージをNameNodeに送信して、それらが生きていることを確認します。

    c。セカンダリNameNode

    これは、HadoopHDFSの別のデーモンです。これは、プライマリNameNodeのヘルパーノードです。セカンダリNameNodeは、プライマリNameNodeから編集ログとFsimageファイルをダウンロードし、編集ログを Fsimageに定期的に適用します。 。

    次に、更新されたFsimageファイルをNameNodeに送り返します。したがって、プライマリNameNodeに障害が発生した場合、セカンダリNameNodeに最後に保存されたFsimageを使用して、ファイルシステムのメタデータが復元されます。

    クライアントがHadoopHDFSに対してデータの読み取りまたは書き込みを行う場合は常に、最初にNameNodeと対話します。 NameNodeは最初にクライアント特権をチェックし、クライアントが十分な特権を持っている場合、NameNodeはクライアントがデータを読み書きできるDataNodeのアドレスを提供します。

    HDFS内のクライアントのファイルは、ブロックに分割されています。ブロックサイズはデフォルトで128MBです。 DataNodeはファイルのブロックを格納します。フォールトトレランスを提供するために、HDFSはレプリケーションファクターに応じてブロックのレプリカを作成します。

    デフォルトのレプリケーション係数は3です。これは、ブロックの3つのコピーがHDFSに保存されることを意味します。 HDFSは、Rack Awarenessアルゴリズムに従って、ブロックのレプリカをさまざまなDataNodeに保存します。

    ファイルの読み取り中に、DataNodeがダウンした場合、NameNodeは、クライアントがダウンタイムなしでデータを読み取ることができるブロックのレプリカを含む別のDataNodeのアドレスを提供します。

    2。 MapReduce

    MapReduceは、Hadoopの処理レイヤーです。クラスター内の複数のマシン間でデータを並行して処理します。タスクを独立したサブタスクに分割し、さまざまなDataNode間で並行して実行することで機能します。

    MapReduceは、データを2つのフェーズ、つまりマップフェーズに処理します。 および削減フェーズ 。両方のフェーズの入力と出力は、キーと値のペアです。キーのタイプと値のペアは、プログラマーがInputFormatクラスを介して指定します。 。デフォルトでは、テキスト入力形式が使用されます。

    プログラマーは2つの関数、つまりマップ関数を指定します および削減機能 。マップ関数では、プログラマーはデータを処理するためのビジネスロジックを記述します。

    Reduce関数では、プログラマーはmap関数の中間出力を要約および集約するためのロジックを記述し、出力を生成します。

    HadoopMapReduceの動作

    クライアントがHadoopクラスター内のデータに対して処理を実行する場合は常に、最初にデータをHadoop HDFSに保存してから、データを処理するためのMapReduceプログラムを作成します。 HadoopMapReduceは次のように機能します。

    1. Hadoopは、ジョブを2つのタイプのタスクに分割します。つまり、タスクのマップとタスクの削減です。 YARNはこれらのタスクをスケジュールしました(これについてはこの記事の後半で説明します)。これらのタスクは異なるDataNodeで実行されます。

    2. MapReduceジョブへの入力は、入力分割と呼ばれる固定サイズの部分に分割されます。

    3.入力分割のレコードごとにユーザー定義のマップ関数を実行する1つのマップタスクが、入力分割ごとに作成されます。これらのマップタスクは、入力データが存在するDataNodeで実行されます。

    4.マップタスクの出力は中間出力であり、ローカルディスクに書き込まれます。

    5.マップタスクの中間出力はシャッフルおよびソートされてから、レデューサーに渡されます。

    6.単一のreduceタスクの場合、マッパーのソートされた中間出力は、reducerタスクが実行されているノードに渡されます。次に、これらの出力はマージされてから、ユーザー定義のreduce関数に渡されます。

    7. reduce関数は、マッパーの出力を要約して出力を生成します。レデューサーの出力はHDFSに保存されます。

    8.複数のリデュース機能の場合、ユーザーはレデューサーの数を指定します。複数のreduceタスクがある場合、マップタスクは出力をパーティション化し、reduceタスクごとに1つのパーティションを作成します。

    YARN

    YARNは、Hadoopのリソース管理レイヤーです。 Hadoopクラスターでタスクをスケジュールし、クラスターで実行されているアプリケーションにリソースを割り当てます。アプリケーションの実行に必要な計算リソースを提供する責任があります。

    YARNコアサービスを提供するために、Hadoopクラスターで実行されている2つのYARNデーモンがあります。それらは:

    a。 ResourceManager

    YARNのマスターデーモンです。クラスタごとにマスターノードで実行され、クラスタ全体のリソースを管理します。 ResourceManagerには、スケジューラーという2つの主要なコンポーネントがあります。 およびApplicationManager。

    スケジューラーは、クラスターで実行されているさまざまなアプリケーションにリソースを割り当てます。

    ApplicationManagerは、クライアントによって送信されたジョブを引き受け、アプリケーション固有のApplicationMasterを実行するためにコンテナーをネゴシエートし、失敗した場合はApplicationMasterコンテナーを再起動します。

    b。 NodeManager

    NodeManagerは、YARNのスレーブデーモンです。クラスタ内のすべてのスレーブノードで実行されます。ノード上のコンテナの起動と管理を担当します。コンテナは、メモリ、CPUなどの制約されたリソースのセットを使用してアプリケーション固有のプロセスを実行します。

    NodeManagerが起動すると、ResourceManagerに自分自身をアナウンスします。定期的にハートビートをResourceManagerに送信します。クラスターにリソースを提供します。

    c。 ApplicationMaster

    アプリケーションごとのApplicationMasterは、スケジューラーからコンテナーをネゴシエートし、コンテナーのステータスを追跡し、コンテナーの進行状況を監視します。

    クライアントは、ResourceManagerにアプリケーションを送信します。 ResourceManagerは、クラスター内のノードで計算コンテナーを起動および監視するNodeManagerに接続します。コンテナはApplicationMasterを実行します。

    MapReduceタスクとApplicationMasterは、ResourceManagerによってスケジュールされ、NodeManagerによって管理されるコンテナーで実行されます。

    ここで、Hadoopが内部でどのように機能するかを要約しましょう:

    1. HDFSは、クライアント入力データをサイズ128MBのブロックに分割します。レプリケーションファクターに応じて、ブロックのレプリカが作成されます。ブロックとそのレプリカは、異なるDataNodeに保存されます。

    2.すべてのブロックがHDFSDataNodeに保存されると、ユーザーはデータを処理できます。

    3.データを処理するために、クライアントはMapReduceプログラムをHadoopに送信します。

    4.次に、ResourceManagerは、クラスター内の個々のノードでユーザーによって送信されたプログラムをスケジュールしました。

    5.すべてのノードの処理が完了すると、出力はHDFSに書き戻されます。

    概要

    この記事では、Hadoopの動作全体を調査しました。この記事を読んだ後、Hadoopが大量のデータを保存および処理する方法を理解していただければ幸いです。

    この記事では、リソース内のアプリケーション間でリソースがどのようにスケジュールされるかも説明しています。この記事では、Hadoopクラスターで実行されている主要なデーモンとHadoopのコアコンポーネントについて説明しています。

    Hadoopが内部でどのように機能するかを理解していただければ幸いです。

    学び続けてください!!


    1. ルックアップから最後のドキュメントを返す

    2. メッセージブローカーとしてのRedis

    3. 複数のワーカーキューを使用するためにredisに接続する際の問題

    4. 何を使うべきですか? Socket.ioルームまたはRedispub-sub?