3

Windows プラットフォームに Hadoop を他の 2 つのワーカー ノードと共にインストールしました (合計で 3 つのノードがあります)。デモ目的で、約 1 メガバイトの単一ファイルを処理しています。

  1. ワーカー ノードがこのファイルを処理のために分割する方法。異なるワーカー ノードはそれぞれ 341(1024/3)KB を処理します。または、単一のワーカー ノードがファイルを処理します。

  2. そして、そのようなファイルを100個処理するとします。ワーカーノードは、処理するファイルの数をそれらの間で分割しますか?

  3. そして、約100MBの単一ファイルを処理するとします。

4

1 に答える 1

2

ありそうな答え、

ワーカー ノードがこのファイルを処理のために分割する方法。異なるワーカー ノードは、それぞれ 341(1024/3)KB を処理します。それとも、単一のワーカー ノードがファイルを処理しますか?

通常、Hadoop Distributed File System (HDFS) は、Windows で利用可能な NTFS や FAT などの通常のファイル システムと比較して、より大きなブロック サイズを持っています。HDFS のブロックは、レプリケーションによって複数のノード (マシン) に分散されます。ラック トポロジ スクリプトが提供されている場合、レプリケーションはより適切に処理され、データの損失を防ぐためにブロックがより戦略的に配置されます (たとえば、Hadoop が無意識のうちにレプリケーション ファクター 2 のブロックを配置した場合)。 1 つのブロックを 1 つのラックに格納し、複製された他のブロックを別のラックに格納することをお勧めします)。デフォルトでは、1 ブロックのサイズは 64MB です。したがって、1 MB のファイルはおそらく 1 つのブロック内に存在し、もちろん異なるノード間で複製されます。通常、単一の Map は、1 つ以上のブロックで構成できる分割と呼ばれるものに作用します。TextInputFormatは通常、エンドラインを区切り文字として使用するテキスト ファイルを処理し、分割ごとにマップを起動します。これは、おおよそ 1 つのブロックのサイズです。エンドライン境界を確保するために、分割サイズはブロック サイズよりわずかに大きくても小さくてもかまいません。つまり、通常の状態で 64MB の単一ブロックに存在する 1MB のファイルは、単一のマップ タスクによって処理されます。

そして、そのようなファイルを100個処理するとします。ワーカーノードは、処理するファイルの数をそれらの間で分割しますか?

このような個別のファイルが 100 個存在する場合、マップの分割として複数のブロックを組み合わせて処理できるCombineInputFormatのようなものを使用しない限り、100 個のマップ タスクが呼び出される可能性があります。

別のオプションは、可能であればこれらの 100 個のファイルを 1 つのファイルに結合して処理することです。

そして、約100MBの単一のファイルを処理すると?

ここでも、ブロック サイズが 64MB であると仮定すると、TextInputFormat の 100MB ファイルは、大まかに 2 つのマップ タスクで処理されるはずです。さまざまな InputFormat で述べたように、さまざまな方法で処理できます。

注(ここからの抜粋):

投機的実行: Hadoop システムの問題の 1 つは、タスクを多数のノードに分割することにより、少数の低速ノードが残りのプログラムのレートを制限する可能性があることです。たとえば、1 つのノードに低速のディスク コントローラがある場合、他のすべてのノードの 10% の速度で入力を読み取っている可能性があります。そのため、99 個のマップ タスクが既に完了している場合でも、システムは最後のマップ タスクのチェックインを待機しており、他のすべてのノードよりもはるかに時間がかかります。

タスクを相互に分離して実行することを強制することで、個々のタスクは入力がどこから来るのかわかりません。タスクは Hadoop プラットフォームを信頼して、適切な入力を提供するだけです。したがって、マシンの機能の違いを利用するために、同じ入力を複数回並行して処理できます。ジョブのほとんどのタスクが終わりに近づいているため、Hadoop プラットフォームは、他に実行する作業がないいくつかのノードにまたがる残りのタスクの冗長コピーをスケジュールします。このプロセスは、投機的実行として知られています。タスクが完了すると、この事実が JobTracker に通知されます。タスクのどちらのコピーが最初に終了しても、最終的なコピーになります。他のコピーが投機的に実行されていた場合、Hadoop は TaskTracker にタスクを放棄してその出力を破棄するように指示します。

于 2013-08-04T19:26:17.843 に答える