2

だからここに私の状況があります:

HBaseを使用するmapreduceジョブがあります。私のマッパーは1行のテキスト入力を受け取り、HBaseを更新します。レデューサーがなく、ディスクに出力を書き込んでいません。使用率のバーストが予想される場合はクラスターに処理能力を追加し、使用率が低下した場合はスケールダウンする機能が必要です。今のところ、Amazonや他のクラウドプロバイダーを使用できないと仮定しましょう。私はプライベートクラスターで実行しています。

1つの解決策は、より多くの容量が必要なときにクラスターに新しいマシンを追加することです。ただし、これらのマシンを待機したり面倒なことなく追加および削除できるようにしたいと考えています。ノードを追加または削除する必要があるたびにHDFSのバランスを取り直したくありません。

したがって、各マシンがタスクトラッカーとデータノードを実行している「コア」クラスターを用意するのが良い戦略のように思われます。容量を追加する必要がある場合は、タスクトラッカーを実行している「使い捨て」マシンを起動できます。ただし、データノードではありません。これは可能ですか?もしそうなら、どのような影響がありますか?

データノードのないマシンで実行されているタスクトラッカーには、データの局所性のメリットがないことに気づきました。しかし実際には、これはどういう意味ですか?「使い捨て」マシンの1つでジョブをスケジュールすると、ジョブトラッカーはネットワーク経由で入力行をタスクトラッカーに送信します。タスクトラッカーはその入力行を取得して、マッパーに直接フィードします。ディスクに何かを書き込みます。これはどうなりますか?

ああ、私はClouderacdh3u3を使用しています。それが重要かどうかわからない。

4

1 に答える 1

1

「使い捨て」マシンの1つでジョブをスケジュールすると、ジョブトラッカーはネットワーク経由で入力行をタスクトラッカーに送信します。タスクトラッカーはその入力行を取得して、マッパーに直接フィードします。ディスクに何かを書き込みます。これはどうなりますか?

完全ではありませんが、ジョブトラッカーはタスクトラッカーにマップタスクを実行して入力分割を処理するように指示します。JobTrackerはデータをタスクトラッカーに渡しません。さらに、シリアル化された分割情報(ファイル名、開始オフセット、長さ)を渡します。TaskTrackerはMapTaskを実行し、分割情報のInputFormatおよび関連するRecordReaderをインスタンス化するのはMapTaskであり、入力キー/値をマッパーに渡します。

ローカルデータノードがない場合、またはローカルデータノードがあるが、データがローカルデータノードに複製されていない場合、データはネットワークを介して別のデータノード(できればラック)から読み取られます。ローカルですが、それでも他の場所から来る可能性があります)。

Hadoopカウンターの出力で、データブロックがタスクに対してローカルまたはラックに対してローカルであった頻度の統計を確認できます。

于 2012-04-27T10:37:13.820 に答える