2013-05-05 6 views
5

各データノードのスループットは、各読み取り/書き込み操作にかかる時間を測定して測定したいと考えています。百万の機能を読んで、これがどこで起こっているのかを知ることは非常に混乱しています。誰かが一連のデータを読み書きしている間に列挙してもらえますか?バージョン1.0.1を使用しています。また、データノードでこれを測定するAPIがすでに存在する場合は、その情報を使用できます。データノードでのスループットの測定

+1

賞金のコメントについて:ノードをブラックリストに登録すると、ノードはクラスタに参加しなくなるため、スループットは回復しません。 – likeitlikeit

+0

ちょっとバグキャッチャー、下の私の答えに任意の考えですか? – Engineiro

+0

@likeitlikeit私はハートビートのための既存のポリシーの行に何かをしました:それは3つのチャンスを与え、それでも悪い場合はそれをブラックリストに入れてください。とにかく実際の使用のために意図されていません –

答えて

1

スループットを測定するために重要なクラスは、書き込みの場合はFSDataOutputStream、読み取りの場合はFSDataInputStreamです。読む

ファイル:ファイルを読むことFileSystemオブジェクトに呼び出しopen()あるときにノードが最初に行うこと。この時点で、このノードはすぐに読み込みを開始し、この呼び出しが成功した後にコードを配置して測定に備えることができます。 HDFS上でopen()を呼び出すと、NameNodeと通信してブロックロケーションを収集する(発信ノードの近接性に従ってソートされた)DistributedFileSystemがインスタンス化されます。最後に、DistributedFileSystemオブジェクトは、DFSInputStream( "読み取り"ブロックを参照し、失敗を処理します)をラップする、FSDataInputStream(ファイルを読むと見ます)を返します。あなたの測定値は、read()close()FSDataInputStreamでのコールの範囲内になります。

ファイル書き込み:ノードは、FileSystemcreate()を呼び出します。この時点でファイルのパーミッション、アベイラビリティなどを含むさまざまなチェックが行われますが、正常終了するとが返されます。DFSOutputStreamをラップしたオブジェクトです。同じ概念が、連続的な書き込みを見る場合に適用され、他方は複製係数のコヒーレンシを処理する(すなわち、1回の書き込み= 3回の書き込み)および失敗に適用される。読み取りと同様に、write()close()FSDataInputStreamの呼び出しの範囲内で測定されます。

クラスタ内のすべてのノードでこれをグローバルに実行するには、クラスタで共有するHadoopの配布の一部としてこれらのメソッドをオーバーライドする必要があります。

+0

各データノードの統計を集計する方法については説明していません。クライアントノードは、個々のデータノードのプロファイルを作成し、名前ノードに情報を送信することは期待できません。とにかく、私の必要がなくなったので、私はこの答えを受け入れる –

関連する問題