내 매퍼가 다른 매퍼가 처리 할 새 키/값을 생성하는 경우가 있습니다. 이것을 할 수있는 좋은 방법이 있습니까? 이를 달성하기 위해 내 자신의 사용자 지정 입력 형식 (큐?)을 작성하는 방법에 대해 생각해 보았습니다. 어떤 아이디어? 감사!하둡 재귀 적 매핑
편집 : 그래서 완전히 재귀입니다
방법 1
Map Step 1 (foo1, bar1) -> out1 (foo2, bar2) -> out2 (foo3, bar3) -> (fooA, barA), (fooB, barB) (foo4, bar4) -> (fooC, barC) Reduction Step 1: (out1) -> ok (out2) -> ok ((fooA, barA), (fooB, barB)) -> create Map Step 2 ((fooC, barC)) -> also send this to Map Step 2 Map Step 2: (fooA, barA) -> out3 (fooB, barB) -> (fooD, barD) (fooC, barC) -> out4 Reduction Step 2: (out3) -> ok ((fooD, barD)) -> create Map Step 3 (out4) -> ok Map Step 3: (fooD, barD) -> out5 Reduction Step 3: (out5) -> ok -- no more map steps. finished --
을 명확히해야한다. 일부 키/값은 감소를 위해 출력을 내보내고, 일부는 매핑을 위해 새 키/값을 생성합니다. 주어진 실행에서 얼마나 많은지도 또는 축소 단계가 발생할 수 있는지 실제로 알지 못합니다.
이 방법은 그 자체가 입력 목록을 공급하는 매퍼를 얻을 것 2
Map Step 1 (foo1, bar1) -> out1 (foo2, bar2) -> out2 (foo3, bar3) -> (fooA, barA), (fooB, barB) (foo4, bar4) -> (fooC, barC) (fooA, barA) -> out3 (fooB, barB) -> (fooD, barD) (fooC, barC) -> out4 (fooD, barD) -> out5 Reduction Step 1: (out1) -> ok (out2) -> ok (out3) -> ok (out4) -> ok (out5) -> ok
방법. 마지막으로 어떤 방법으로 구현하는 것이 더 쉬운 지 잘 모르겠습니다.
다른 입력의 MR 프로세싱의 깊이가 다르다는 것을 알았습니까? 하나의 MR에 의한 처리 중 일부는 체인이 필요합니까? –
네, 맞습니다. 좋은 비유는 재귀적인 디렉토리 목록 일 것입니다. 매퍼는 디렉토리를 가져 와서 파일을 방출합니다. 내가 다른 디렉토리를 쳤다면, 나는 그것을 매퍼로 다시 공급할 것이다. – eric
잠깐, 나는 그것이 다른 방향이라고 생각한다. 필자는 파일을 가져 와서 내보내는 매퍼 (mapper)와 유사하다고 말할 것입니다. 파일 중 하나가 디렉토리 일 경우 디렉토리의 내용을 읽고 각 파일을 다시 매퍼에 공급합니다. – eric