2013-10-01 4 views
3

Hadoop을 사용하여 단어 사이의 동시 발생 유사성을 계산하고 있습니다. 그들 사이의 가장자리를Hadoop : Reduce를 Java HashMap으로 출력하는 방법

a b 
a c 
b c 
b d 

내가 노드와 공동으로 발생하는 단어로 단어를 취급합니다 그래프 기반의 접근 방식을 사용하고 있습니다 : 내가 좋아 보인다 공동 발생하는 단어 쌍으로 구성 파일이 있습니다. 내 알고리즘은 모든 노드의 차수를 계산해야합니다. 현재

a 2 
b 3 
c 2 
d 1 

는 출력 파일로 다시 기록하지만 내가 대신 원하는 것은, 발언권,에 결과를 캡처 할 수 있습니다 : 나는 성공적으로 다음과 같은 출력 총 정도를 계산하는 Map-Reduce 작업을 작성했습니다 java.util.HashMap. 그런 다음이 HashMap을 다른 Reduce 작업에 사용하여 최종 유사성을 계산하고 싶습니다.

  1. 하는 것이 가능 메모리에 작업을 감소의 결과를 (List, Map) 캡처하는 것입니다 : 여기

    내 질문입니다. 그렇다면 어떻게?
  2. 이 방법이 최선의 방법입니까? 그렇지 않다면 어떻게 처리해야합니까?
+0

정확하게 이해한다면 첫 번째 작업의 입력과 두 번째 작업을 실행하는 첫 번째 작업의 출력이 모두 필요합니까? 두 경우 모두 단순히 두 개의 작업을 계단식으로 연결할 수 있어야합니다. 해시 맵의 크기는 얼마입니까? (두 번째 작업을 위해 분산 캐시에 넣을 수 있음) – DDW

+0

맞습니다! 두 번째 작업을 실행하려면 첫 번째 작업의 입력과 첫 번째 작업의 출력이 모두 필요합니다. HashMap은 수십만 개의 항목 에까지 확장 될 수 있습니다. – codemaniac

답변

1

두 가지 가능성이 있습니다. 또는지도/축소 작업의 데이터를 분산 파일 시스템에서 읽습니다. 또는 분산 캐시에 직접 추가하십시오. 난 그냥 분산 캐시 크기를 검색 좀하고 제어 할 수 있습니다. "local.cache.size 매개 변수는 DistributedCache의 크기를 제어 기본적으로 10 GB의 설정입니다."

가 두 번째의 분산 캐시에 첫 번째 작업의 출력을 추가하는 경우

Link to cloudera blog

그래서 당신이 잘되어야 내가 생각합니다. 수십만 개의 항목이 기가 바이트 범위에 없습니다.

당신의 매퍼에를 읽으려면 :

Path[] uris = DistributedCache.getLocalCacheFiles(context.getConfiguration()); 
String patternsFile = uris[0].toString(); 
BufferedReader in = new BufferedReader(new FileReader(patternsFile)); 

가 DBCache에을 추가하려면 :

DistributedCache.addCacheFile(new URI(file), job.getConfiguration()); 

동안 다음과 같이 분산 캐시에 파일을 추가

간다 당신의 두 번째 직업을 설정하십시오.

내가 속임수를 쓰는지 알려주세요.

+0

이 질문에 대한 답변은 '답변 닫기로 동의하십시오' – DDW

관련 문제