たとえば、2 つのデータノードとレプリケーション 2 があります。ファイルを HDFS に保存する「hadoop dfs -put test.log 入力」を実行すると、このファイルは Hadoop クラスターにどのように保存されますか? クラスター全体に分散され、2 つのデータノード サーバーの両方に保存されていますか?
hadoop dfs -put test.log inputを実行すると、ファイルtest.logがinputというディレクトリ内に保存されます。ここまでの流れですが、
ファイルのサイズとブロック サイズに基づいて、ファイルは最初にブロックと呼ばれるn 個の小さなチャンクに分割されます。デフォルトのブロック サイズは64MBですが、構成可能です。ここで、NameNode の助けを借りて、クライアントはどの DataNode にデータを収容するための空き領域があるかを知るようになります。これが完了すると、クライアントはブロックごとに最も近い DataNode にデータをプッシュし始めます。これは、レプリケーション ファクターに基づいて他の DataNode にプッシュされます。
はい、ファイルは両方のマシンに分散されます。Hadoop は、n 個の個別のマシンが単一のシステムとして集合的に機能する分散システムであることを思い出してください。理解を深めるために、以下の図を参照してください。
また、ワードカウント「hadoop -jar word count.jar input output」などの操作を行うと、全体のプロセスはどのようになりますか? jobtracker は 2 つのタスク トラッカーに並列実行を要求し、出力を HDFS に保存しますか?
MapReduce 実行の流れは次のようになります。
ジョブを JobTracker に送信します。JobTracker は、処理対象のデータが存在するマシン上で実行されている (継続的に実行される) TaskTracker に、データをどこにも移動することなく、そこで処理を開始するように指示します。処理したいファイルが n 個のノードにまたがっている場合、これらの n 個のノードすべてで実行されている TaskTracker が並列に処理を開始します。あなたの場合、nは2です。完全なプロセスについて知るには、これを参照してください。
最初のケースは namenode/datanode に関連し、2 番目のケースはジョブ トラッカー/タスク トラッカーに関連していると考えてよいでしょうか?
これについて考えることは何もありません。これが実際に起こることです:)
HTH