2013-02-19 2 views
0

출력 파일을 키로 분할하고자하는 Hadoop의 유스 케이스가 있습니다. 지금은 감속기가 단순히 이터레이터의 각 값을 출력하고 있습니다. 예를 들어 파이썬 스트리밍 코드는 다음과 같습니다.하나의 키 값만 포함하는 출력 파일 가져 오기?

for line in sys.stdin: 
    data = line.split("\t") 
    print data[1] 

이 방법은 작은 데이터 세트 (약 4GB)에서 작동합니다. 작업의 각 출력 파일에는 하나의 키 값만 들어 있습니다.

그러나 데이터 세트의 크기를 늘리면 (40GB 이상) 각 파일에는 정렬 된 순서로 키가 혼합되어 있습니다.

더 쉬운 방법이 있나요? 출력이 정렬 된 순서로 표시되며 순차적 스캔을 수행하고 파일에 추가 할 수 있음을 알고 있습니다. 그러나 Hadoop이 키를 정렬하고 분할하기 때문에 이것이 필요하지는 않습니다.

질문이 가장 명확하지 않을 수 있으므로 누구나 의견이 있으면 분명히하겠습니다. 감사합니다

+0

나는 그것에 대해 공개되어있다. 해결책 몇 가지를 말씀해 주시겠습니까? – Shane

+0

각 키에 대해 고유 한 출력 파일을 만들고 싶다고 생각합니까? 100,000 개의 고유 키 (따라서 10 만개의 출력 파일)가 있으면 어떻게됩니까? –

+0

그게 문제지만, 발생하지 않을 것입니다. 입력 데이터 세트를 제어했고 사전에 키의 양을 대략 알 수 있습니다. – Shane

답변

1

Ok 그럼 MapReduce 솔루션의 custom jar implementation을 만들고 MultipleTextOutputFormathere으로 사용 된 OutputFormat으로 지정하십시오. 파일명 (귀하의 경우에는 키)을 감속기의 키와 전체 페이로드를 값으로 내 보내면 키로 명명 된 파일에 데이터가 기록됩니다.

관련 문제