如何收集信息核心的运行Hadoop集群的大小/数量(How to collect Hadoop Cl

2019-10-17 00:58发布

我正在由多台机器,其大小是不知道的集群上我的Hadoop作业(主内存,核心数量,规模等。每一台机器)。 不使用任何操作系统特定的库(* .so文件我的意思),没有任何类或工具本身的Hadoop或在那里我可以收集喜欢当正在执行Hadoop的MR作业的信息一些其他的库:

  1. 由作业使用的核心的核心总数/数
  2. 总可用主内存/分配的可用主内存
  3. 每个机器/分配的存储空间,总存储空间
  4. 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.

Answer 1:

主节点必须所有的奴隶ssh访问和所有节点的名单应该在那里slaves的文件。 因此,写一个脚本,通过在节点列表迭代slaves使用文件并将该文件复制到主scp

像这样的脚本的东西应该工作

因为我在'猫的/ home / praveensripati /安装/ Hadoop的0.21.0 / conf目录/ slaves`;

SCP praveensripati @ $ I:的/ proc / cpuinfo中cpuinfo_ $ I
SCP praveensripati @ $ I:的/ proc / meminfo中meminfo_ $ I
DONE

居屋名/ IP($ I)将被追加到cpuinfo中的和meminfo中的文件。 MR工作将承担这一任务的矫枉过正。



Answer 2:

假设你是部署在Linux节点群集上,您可以提取从CPU和内存信息/proc/cpuinfo/proc/meminfo的文件。 你需要写一个保证你接触的每个节点的集群中(或只处理与分割尺寸,以确保产生足够的地图任务,以确保每个任务跟踪器节点获得至少一个任务到一个文本文件自定义输入格式执行。

您可以输出的信息作为映射器对(主机名,资讯),以及去重复的减速

请注意,将cpuinfo中报告超线程内核的数量(如果你有一个兼容的CPU),而不是内核数量,所以4核心超线程CPU可能会显示8“处理器”在/ proc / cpuinfo中



Answer 3:

所述ohai库(Opscode公司厨师的一部分)是极好; 它会输出各种从机器的统计资料的JSON转储。

曾经有一个标志- mapred.max.maps.per.node -限制任何一个职业可以在一个节点上同时运行的任务数,但它已被删除。 嘘。 你必须运行一个修改计划,以提供该功能。



文章来源: How to collect Hadoop Cluster Size/Number of Cores Information