2012-07-17 1 views
0

크기가 알려져 있지 않은 여러 시스템 (주 메모리, 코어 수, 크기 등)으로 구성된 클러스터에서 hadoop 작업을 실행하고 있습니다.하둡 클러스터를 수집하는 방법 크기/코어 수 정보

  1. : 모든 OS 특정 라이브러리 (* 내 말은 .so를 파일)를 사용하지 않고, 내가 하둡 MR 작업이 실행되는 동안 같은 정보를 수집 할 수있는 자체 또는 일부 추가 라이브러리에서 하둡에 대한 모든 클래스 또는 도구가 코어의 총 수/작업
  2. 가능한 총 메인 메모리/할당 가능한 메인 메모리로 사용되는 코어의 수
  3. 각 기계/할당 된 저장 공간에
  4. 총 저장 공간
  5. 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. 
+0

이름 노드 웹 UI를 통해 사용 가능한 디스크 공간을 볼 수 있습니다. 라이브 노드 링크를 클릭하십시오. –

답변

0

리눅스 노드에 배포 클러스터에있는 가정, 당신은 /proc/cpuinfo/proc/meminfo 파일에서 CPU 및 메모리 정보를 추출 할 수 있습니다. 클러스터의 각 노드를 만지게 할 수있는 사용자 정의 입력 형식을 작성해야합니다. 또는 각 작업 추적기 노드가 하나 이상의 작업을 수행 할 수 있도록 충분한 맵 작업이 생성되도록 분할 크기로 텍스트 파일을 처리합니다. 실행합니다.

를 출력 할 수 있습니다 하이퍼 스레드 코어의 수를보고 (호환되는 CPU가있는 경우) 오히려 것 cpuinfo의 매퍼에서 쌍 (호스트 이름, 정보) 및 DEDUP 감속기의

참고로 정보 코어 수보다 많으므로 4 코어 하이퍼 스레딩 CPU는/proc/cpuinfo에 8 개의 프로세서를 표시합니다.

+0

좋은 생각이지만 호스트 이름에 액세스하려면 어떻게해야합니까? 나는 그것을 고전적인지도 감면으로 처리해야합니까? 그냥 주 수업에서 파일을 열고 표준 출력에 쓸 수 없습니까? – Bob

+0

호스트 이름 획득 - http : // stackoverflow.com/questions/5596788/get-host-of-local-machine –

+0

클러스터의 모든 노드의 사양을 알고 싶다면 각 노드에 대한 ssh 액세스가없는 한이를 MR 작업으로 실행해야합니다 ,이 경우 쉘 스크립트는 훨씬 더 쉬울 것입니다). main (String args []) 메소드를 실행하면 현재 사용중인 머신에 대한 정보 만 가져옵니다. –

1

마스터 노드는 모든 슬레이브에 대한 ssh 액세스 권한과 모든 노드는 slaves 파일에 있어야합니다. 따라서 slaves 파일에있는 노드 목록을 반복하고 scp을 사용하여 마스터에 파일을 복사하는 스크립트를 작성하십시오. 이 스크립트 같은

뭔가가 cpuinfo의와 meminfo를 파일에 추가 할 것

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

호 이름/IP ($ i)를 작동합니다. MR 작업은이 작업에 과도기입니다.

+0

마스터 노드와 슬레이브 노드 모두에 대한 ssh 액세스 권한이 있습니다. – Bob

0

ohai 라이브러리 (Opscode Chef의 일부)는 훌륭합니다. 시스템에서 모든 종류의 통계를 JSON 덤프로 출력합니다.

한 노드에서 동시에 실행할 수있는 작업의 수를 제한하기 위해 플래그 -이 있었지만 제거되었습니다. 우우. 이 기능을 제공하려면 수정 된 스케줄러를 실행해야합니다.

관련 문제