我在由多台机器组成的集群上运行我的 hadoop 作业,这些机器的大小未知(主内存、内核数、每台机器的大小等)。在不使用任何特定于操作系统的库(我的意思是 *.so 文件)的情况下,是否有任何用于 hadoop 的类或工具本身或一些其他库,我可以在其中收集信息,例如在执行 Hadoop MR 作业时:
- 内核总数/作业使用的内核数
- 总可用主存/分配的可用主存
- 每台机器上的总存储空间/分配的存储空间 4.
我没有集群的硬件信息或规格,这就是为什么我想在我的 hadoop 代码中以编程方式收集此类信息的原因。
我怎样才能做到这一点?由于不同的原因,我想知道这种信息。以下错误给出了一个原因:我想知道哪台机器空间不足。
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.