1

サイズが不明な複数のマシン (マシンごとのメインメモリ、コア数、サイズなど) で構成されるクラスターで Hadoop ジョブを実行しています。OS固有のライブラリ(つまり* .soファイル)を使用せずに、Hadoop自体のクラスまたはツール、またはHadoop MRジョブの実行中に情報を収集できる追加のライブラリはありますか:

  1. 合計コア数 / ジョブで使用されるコア数
  2. 使用可能なメイン メモリの合計 / 割り当てられた使用可能なメイン メモリ
  3. 各マシンの合計ストレージ容量/割り当てられたストレージ容量
  4. 4.

ハードウェア情報やクラスターの仕様を持っていないため、hadoop コードでこの種の情報をプログラムで収集したいと考えています。

どうすればこれを達成できますか?さまざまな理由から、この種の情報を知りたいと思っています。理由の 1 つは次のエラーです。スペースが不足しているマシンを知りたいです。

12/07/17 14:28:25 INFO mapred.JobClient: Task Id : attempt_201205221754_0208_m_001087_0, Status : FAILED

org.apache.hadoop.util.DiskChecker$DiskErrorException: Could not find any valid local directory for output/spill2.out

        at org.apache.hadoop.fs.LocalDirAllocator$AllocatorPerContext.getLocalPathForWrite(LocalDirAllocator.java:376)

        at org.apache.hadoop.fs.LocalDirAllocator.getLocalPathForWrite(LocalDirAllocator.java:146)

        at org.apache.hadoop.fs.LocalDirAllocator.getLocalPathForWrite(LocalDirAllocator.java:127)

        at org.apache.hadoop.mapred.MapOutputFile.getSpillFileForWrite(MapOutputFile.java:121)

        at org.apache.hadoop.mapred.MapTask$MapOutputBuffer.sortAndSpill(MapTask.java:1247)

        at org.apache.hadoop.mapred.MapTask$MapOutputBuffer.flush(MapTask.java:1155)

        at org.apache.hadoop.mapred.MapTask$NewOutputCollector.close(MapTask.java:582)

        at org.apache.hadoop.mapred.MapTask.runNewMapper(MapTask.java:649)

        at org.apache.hadoop.mapred.MapTask.run(MapTask.java:323)

        at org.apache.hadoop.mapred.Child$4.run(Child.java:270)

        at java.security.AccessController.doPrivileged(Native Method)

        at javax.security.auth.Subject.
4

3 に答える 3

1

マスター ノードはすべてのスレーブに ssh アクセスでき、すべてのノードのリストがファイルに存在する必要がありslavesます。slavesそのため、ファイル内のノードのリストを反復処理し、を使用してファイルをマスターにコピーするスクリプトを作成しますscp

このスクリプトのようなものが動作するはずです

for i in `cat /home/praveensripati/Installations/hadoop-0.21.0/conf/slaves`;
do
scp praveensripati@$i:/proc/cpuinfo cpuinfo_$i
scp praveensripati@$i:/proc/meminfo meminfo_$i
done

ホスト名/IP ($i) は、cpuinfo および meminfo ファイルに追加されます。MR の仕事は、このタスクにはやり過ぎです。

于 2012-07-18T02:55:26.353 に答える
0

ohaiライブラリ (Opscode Chefの一部) は素晴らしいです。マシンからのあらゆる種類の統計の JSON ダンプを出力します。

以前はフラグ -- mapred.max.maps.per.node-- があり、1 つのジョブが 1 つのノードで同時に実行できるタスクの数を制限していましたが、削除されました。ブー。その機能を提供するには、変更されたスケジューラを実行する必要があります。

于 2012-07-27T04:42:02.947 に答える
0

Linux ノードにデプロイされたクラスター上にいると仮定すると、/proc/cpuinfoおよび/proc/meminfoファイルから CPU とメモリの情報を抽出できます。クラスター内の各ノードに確実にアクセスできるカスタム入力形式を作成する必要があります (または、各タスク トラッカー ノードが少なくとも 1 つのタスクを確実に取得できるように、十分な数のマップ タスクが生成されるように分割サイズのテキスト ファイルを処理するだけです)。実行する。

マッパーからの情報 (ホスト名、情報) をペアとして出力し、リデューサーで重複除去することができます。

cpuinfo は、コアの数ではなくハイパースレッド コアの数を報告することに注意してください (互換性のある CPU を使用している場合)。したがって、4 コアのハイパースレッド CPU は、おそらく /proc/cpuinfo に 8 つの「プロセッサ」を表示します。

于 2012-07-17T13:59:07.017 に答える