2013-05-20 3 views
0

ssvd를 계산해야합니다. 50,000 x 50,000 매트릭스의 경우 300x300으로 줄이면 ssvdlibc 및 기타와 같은 라이브러리에서 3 분 이내에 계산할 수 있습니다.mahout ssvd job performance

큰 데이터의 경우 mahout을 사용해 보았습니다. 첫째로 나는 작은 데이터 세트 (즉, 50000 x 50000)를 로컬로 실행하려고 시도했지만,이 단순한 작업을 완료하는 데 32 분이 걸리며 스필 파일에 5,5GB의 디스크 공간을 사용하고 인텔 i5에 8GiB 램을 사용합니다 SSD 드라이브는 몇 번 동결됩니다.

나는 mahout과 hadoop이 map-reduce 작업으로 모든 것을 수행하기 위해 많은 추가 단계를 수행해야한다는 것을 알고 있지만, 성능이 크게 상승한 것으로 보입니다. 나는 내 설치 과정에서 뭔가 잘못 됐어야한다고 생각합니다.

hadoop 및 mahout 설명서를 읽었으며 구성 파일에 몇 가지 매개 변수가 추가되었지만 여전히 느립니다. 대부분의 경우 CPU를 하나만 사용합니다.

내 설정에 어떤 문제가 있다고 말해 줄 수 있습니까? 그게 어떻게 든 간단하게, 더 큰 배포를 위해 무엇을보아야 하는지를 한 마후 인이 사용하도록 조정할 수 있습니까?

내 설정 파일 : mapred-site.xml 파일 :

<?xml version="1.0"?> 
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?> 

<!-- Put site-specific property overrides in this file. --> 

<configuration> 
<property> 
    <name>mapred.job.tracker</name> 
    <value>local</value> 
</property> 
<property> 
<name>mapred.child.java.opts</name> 
<value>-Xmx5000M</value> 
</property> 

<property> 
<name>mapred.tasktracker.map.tasks.maximum</name> 
<value>3</value> 
</property> 
<property> 
<name>mapred.tasktracker.reduce.tasks.maximum</name> 
<value>3</value> 
</property> 

<property> 
<name>io.sort.factor</name> 
<value>35</value> 
</property> 
</configuration> 

코어를 site.xml :

<?xml version="1.0"?> 
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?> 

<!-- Put site-specific property overrides in this file. --> 

<configuration> 
<property> 
<name>fs.default.name</name> 
<value>file:///</value> 
</property> 
<property> 
<name>fs.defaultFS</name> 
<value>file:///</value> 
</property> 



<!-- 
<property> 
<name>fs.inmemory.size.mb</name> 
<value>200</value> 
</property> 
<property> 
<name>io.sort.factor</name> 
<value>100</value> 
</property> 
--> 
<property> 
<name>io.sort.mb</name> 
<value>200</value> 
</property> 
<property> 
<name>io.file.buffer.size</name> 
<value>131072</value> 
</property> 

</configuration> 

내가 그렇게 내 일을 실행

mahout ssvd --rank 400 --computeU true --computeV true --reduceTasks 3 --input ${INPUT} --output ${OUTPUT} -ow --tempDir /tmp/ssvdtmp/ 

I 또한 -Xmx = 4000m와 함께 hadoop과 mahout을 구성했습니다.

답변

1

그럼 우선 내가 병렬로 실행되는지 확인하고, hdfs replication이 "1"로 설정되었는지 확인하고, 일반적으로 매개 변수를 확인하십시오. 하나의 코어 만 사용된다는 것은 확실히 문제입니다!

하지만!

느린 문제는 완전히 사라지지 않을 것입니다. 적절한 구성으로 속도를 크게 높일 수는 있지만, 결국에는 hadoop 모델이 최적화 된 공유 메모리 모델 라이브러리를 능가하지 않을 것입니다 단일 컴퓨터에서.

hadoop/mahout의 힘은 큰 데이터를위한 것이며 솔직히 50k x 50k는 여전히 작고 쉽게 관리 할 수있는 영역입니다. 근본적으로, Hadoop은 확장 성을 위해 속도를 교환합니다. 따라서 50000 x 50000의 다른 두 제품과 경쟁하지는 못하더라도 Hadoop을 사용하면 분산 된 클러스터에 꽤 앉아있는 반면 300,000 x 300000에서는 작동하도록 할 수 있습니다. mapred.job.tracker 로컬 호스트를 :

+0

내가있어 복제가 1로 설정 HDFS 나는 로컬에서 내 JobTracker를 변경했습니다 54311 지금 내 mapred.map.tasks 속성이 적용됩니다. 지금은 4 코어 중 하나 또는 두 개의 코어에서 작동합니다 - 약간 좋지만 stil poor, 실행 시간은 약 5 분입니다. –

+0

Bt-job은 거대한 누출을 유발하는 원인 중 하나입니다. 나는 io.sort.mb를 5000과 같은 큰 값으로 수정하려고한다. 도움이되는지 확인한다. –

+0

hadoop은 특정 범위에서 선택된 구성 변수를 변경하고 속도 테스트를 실행하기 위해 자동 utilitiy을 사용하기를 원한다. 클러스터를 잘 작동 시키는데 매우 유용 할 것입니다. – greedybuddha