2012-11-19 14 views
6

HadoopでI/Oアクティビティをテストするためにディスク集中型のHadoopアプリケーションを探していましたが、ディスク使用率を50%以上に保ったアプリケーションは見つかりませんでした実際にディスクをビジー状態に保つアプリケーション。私はランダムライターを試みましたが、それは驚くべきことにディスクI/O集約ではありません。HadoopでHDFSのファイルに書き込む

私はMapperでファイルを作成し、テキストを書き込むための小さなプログラムを作成しました。このアプリケーションは正常に機能しますが、マスターノードでも使用率が高くなります。マスターノードは、名前ノード、ジョブトラッカー、およびスレーブの1つです。他のタスクトラッカーでは、ディスク使用率はNILまたは無視されます。私はなぜディスクI/Oがタスクトラッカーで非常に低いのか理解できません。誰かが間違ったことをしているなら、誰も私を正しい方向に向かわせてください。前もって感謝します。ここで

は、私はそれぞれの行のセルごとのJavaオブジェクトを作成し、任意のメカニズムと思い、私は、ファイル -

Configuration conf = new Configuration(); 
FileSystem fs = FileSystem.get(conf); 
Path outFile; 
while (itr.hasMoreTokens()) { 
    word.set(itr.nextToken()); 
    context.write(word, one); 
    outFile = new Path("./dummy"+ context.getTaskAttemptID()); 
    FSDataOutputStream out = fs.create(outFile); 

    out.writeUTF("helloworld"); 
    out.close(); 
    fs.delete(outFile); 
    } 
+0

I/Oベンチマークの場合は、TestDFSIOをご覧ください。http://answers.oreilly.com/topic/460-how-to-benchmark-a-hadoop-cluster/ –

+0

@ LorandBendig私は、私が14ノードのクラスタで見つけたTestDFSIOの最高ディスク使用率はわずか2.4%で、平均は約0.07%です。 _iostat_コマンドからディスク使用率を測定していますが、ジョブは約300秒実行されました。私がやっていることに気づいていない、本当に愚かなことがありますか? –

+0

あなたはパラメータ(ファイルのnr、サイズ)で遊ぶかもしれませんが、私はあなたがすでに行ったと思います。試してみることができるテストがあります。http://www.michael-noll.com/blog/2011/04/09/benchmarking-and-stress-testing-an-hadoop-cluster-with-terasort -testdfsio-nnbench-mrbench/ –

答えて

0

OK。私は前にチェックしていないのは本当に馬鹿だったに違いない。実際の問題は、すべてのデータノードが実際には動作していないことでした。私はnamodeodeを再フォーマットし、すべてが元に戻った、私はWCに悪くない15-20%の利用率を得ていた。私はTestDFSIOのためにそれを実行し、ディスクをさらに利用できるかどうかを確認します。

1

にUTF文字列を作成し、書き込みにWordCount.javaファイルに書いた私のサンプルコードセグメントでありますディスクに保存する前にJavaオブジェクトのシリアライズを実行することはIOを利用する機会がほとんどありません。
私の経験では、シリアル化は毎秒数MBの速度で動作しますが、それ以上の速度は100MB /秒ではありません。
出力パスにhadoopレイヤーを避けたのはかなり正しいです。 HDFSへの書き込みがどのように機能するかを検討しましょう。データは、ローカルデータノードを介してローカルディスクに書き込まれ、次にレプリケーションファクタに応じてネットワーク内の他のノードに同期して書き込まれます。この場合、HDFSにデータを書き込んだ後、ネットワーク帯域幅を書き込むことはできません。あなたのクラスターが比較的小さい場合は価値があります。 3ノードクラスタと3重レプリケーションでは、すべてのデータをすべてのノードに渡すため、クラスタ全体のHDFS書き込み帯域幅は約1GBitになります。
私は次のように提案します:
a)複製係数を1に減らし、ネットワークにバインドされなくなりました。
b)マッパーへの1回の呼び出しで、より大きなデータチャンクを書き込む

+0

レプリケーション係数を1に変更し、ブロックサイズをそれぞれ1KBと1MBに変更しました。私の見解では、map-reduceは非常にゆっくりと実行され、IOはマスターノードでのみ高位になります。私はまた、上記のコードとは異なり、すべての単語が見つかったときにファイルに書き込むのとは異なり、マッパーで一度だけ書き込もうとしました。それでも、動作は同じままです。 –

+0

複数のマッパーが同時に実行されていますか?あなたが観察するノードごとにディスク帯域幅は何ですか? –

+0

マップタスクを開始しました。= 3、reduce tasks = 1、mapred。tasktracker.map.tasks.maximum = 2、mapred.tasktracker.reduce.tasks.maximum = 2。 3つのノードでのディスク使用率はほぼ0で、マスターノードでは100%です。 –

関連する問題