2015-01-29 5 views
1

나는 각 반복마다 결과를 생성하는 반복 알고리즘을 구현하고 그 결과는 다음 반복의 맵 단계에서 사용됩니다.분산 캐시 또는 HDFS 출력에서 ​​읽으려면

분산 캐시를 사용하여 Mapper에 해당 결과를 제공해야합니까? 아니면 HDFS에서 읽어야합니까? 더 효율적인 것은 무엇입니까?

그 파일은 그렇게 크지 않아야합니다. 아이디어는 단지 설치 단계에서 그것을 읽고 그것을 매퍼 (mapper)의 메모리에 보관하는 것입니다. 파일이 그 큰 아니고 매퍼의 설정에서 읽을 경우

감사

답변

0

는 DistributedCache 앞으로 방법입니다. 물론 두 번째 작업으로 다른 것을 읽지 않는 경우 MapReduce 작업을 사용하는 이유가 무엇인지 질문하게됩니다.

HDFS에서 (즉, 파일을 InputFormat을 통해 매퍼로 스트리밍) 읽고 DistributedCache를 사용하면 두 가지 완전히 다른 사용 사례가 있습니다. DistributedCache는 메모리에 저장할 수있는 작은 파일을 위해 설계된 반면, InputFormat을 사용하여 맵퍼로 읽는 것은 분산 프로세스를 사용하여 처리 할 수있는 대규모 분산 데이터 세트를 위해 설계되었습니다.

데이터 세트가 DistributedCache에서 사용하기에 충분히 작은 경우, Java 작업을 사용하여 처리하고 MapReduce의 큰 오버 헤드를 피할 수 있습니다.

+0

설치 프로그램에서 읽은 데이터가 각 레코드의 매퍼에서 사용되므로 그만한 이유가 있습니다. 그러나 각 반복 후에도 데이터가 변경되므로 각 반복 후에 해당 데이터를 분산 된 캐시에 저장 한 다음 다음 작업의 매핑에서 읽어야합니다. 당신의 조언은 여전히 ​​중요합니까? 더 구체적으로 말하자면 두 가지 일이 있습니다. 예를 들어, 첫 번째 작업은 map-reduce를 통해 숫자를 생성합니다. 두 번째 작업은 설정에서 해당 번호를 읽고 해당 번호로 모든 레코드를 나눌 필요가 있습니다. 나는 지나치게 단순화하고 있지만 아이디어를 얻는다. 그래서 분산 된 캐시, 또는 출력에서 ​​읽기? – Marko

+0

아 좋아, 그래서 당신은 두 번째 작업뿐만 아니라 첫 번째 작업에서 작은 출력으로 읽을 수있는 큰 데이터 세트가 있습니다. 그것은 귀하의 질문에 더 명시 적으로 만드는 가치가있을 수 있습니다. 단일 드라이버 클래스에서 인터렉션을 실행하지 않는 한 응답은 여전히 ​​DistributedCache입니다.이 경우 첫 번째 작업에서 생성 한 번호 하나를 Configuration 객체에 추가 한 다음 두 번째 작업에서 간단하게 호출 할 수 있습니다. –

+0

그래, 맞아, 내 질문에 더 명시 적이어야했다. 나는 단일 드라이버에서 반복을 실행하고 있지만, 구성에 첫 번째 작업의 결과를 넣을 수는 없으므로 작지는 않지만 숫자가 아니기 때문에 최대 100-1000 배열의 컬렉션, 각 400 요소 (그래서 몇 MB의). 나는 또한 더 나은 솔루션을 작은 파일의 경우에는 분산 캐시를 사용하는 것 같아요,하지만 난 아니므로 확실하지 않아요 반복을 통해 동일한 파일을 처리하므로 반복 작업의 첫 번째 작업 후에 분산 캐시에 넣어야합니다. 이것은 HDFS에서 읽는 것보다 나은 해결책입니까? – Marko