サイズが不明な複数のマシン (マシンごとのメインメモリ、コア数、サイズなど) で構成されるクラスターで Hadoop ジョブを実行しています。OS固有のライブラリ(つまり* .soファイル)を使用せずに、Hadoop自体のクラスまたはツール、またはHadoop MRジョブの実行中に情報を収集できる追加のライブラリはありますか:
- 合計コア数 / ジョブで使用されるコア数
- 使用可能なメイン メモリの合計 / 割り当てられた使用可能なメイン メモリ
- 各マシンの合計ストレージ容量/割り当てられたストレージ容量 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.