2014-12-02 3 views
1

freebase 덤프 (제목, 별칭, 유형 이름)에서 avro로 데이터를 추출 중입니다 (아직이 작업에 포함되지 않음). 나는 파이썬으로 스트리밍하는 mapreduce를 사용하고있다.Hadoop streaming KeyFieldBasedPartitioner

이 직업 감속기는 유형 제목 (일반적으로 모든 객체 제목)과 객체에 대한 유형 ID 참조를 기대합니다. 기록의 형태는 다음과 같습니다

common.topic%title Topic 
common.topic%used_by m.01dyhm 
common.topic%used_by m.03x5qm 
common.topic%used_by m.04pm6 

감속기가 방출 : id%relation\tvalue

예를 들어

m.01dyhm%type Topic 
m.03x5qm%type Topic 
m.04pm6%type Topic 

제목, (그래서 감속기를 기억하고 역 참조 된 기록을 방출) 참조를 진행할 때와와 관련된 모든 기록 하나의 유형은 하나의 감속기로 분할되어야합니다. 이것은 키 정렬에 의해 보장됩니다. 합성 키를 사용하기 때문에 레코드를 올바르게 분할해야합니다. KeyFieldBasedPartitioner를 "-k1,1"구성으로 사용하고 키 필드 구분 기호를 "%"로 설정했습니다. 객체 식별자 (예 : "common.topic"또는 "m.01dyhm". 하지만 내 구성이 잘못되었다고 생각합니다. 단일 감속기 (Hortonworks VM)와 함께 작동하지만 32 노드 클러스터에서 빈 파일을 방출합니다 (직접 액세스 할 수 없기 때문에 효과적으로 실험 할 수 없습니다). 파티션이 잘못되어 단일 감속기에 참여할 데이터가없는 것 같습니다.

이 내 하둡 명령입니다 : 내 파티션 프로그램 구성 권리

hadoop \ 
jar $streaming \ 
-D mapred.job.name='Freebase extract - phase 3' \ 
-D mapreduce.map.output.key.field.separator='%' \ 
-D mapreduce.partition.keypartitioner.options=-k1,1 \ 
-partitioner org.apache.hadoop.mapred.lib.KeyFieldBasedPartitioner \ 
-input freebase/job1output \ 
-input freebase/job2output \ 
-output freebase/job3output \ 
-mapper "python job3mapper.py" \ 
-reducer "python job3reducer.py" \ 
-file job3mapper.py \ 
-file job3reducer.py 

? 어떤 도움을 주셔서 감사합니다.

답변

1

이것은 나에게 좋을 것 같습니다. 키를 두 개의 하위 키로 분할하고 첫 번째 부분을 분할에 사용합니다.

감속기 입력을 정렬 할 수 있도록 복합 키별로 정렬 할 것을 파티션 담당자에게 알리려면 다음 옵션을 추가 할 수 있습니다.

-D stream.num.map.output.key.fields=2 

출력에서 ​​빈 줄이 나오면 줄 바꿈을 추가로 작성하고 있음을 나타냅니다. 줄은 \ n 뒤에 sys.stdin을 통해 입력됩니다. 인쇄 줄을 사용하거나, 매퍼 및 축소 기에서 line.strip()을 인쇄하여 그 경우인지 확인할 수 있습니다.

결과가 전혀 나오지 않는다면 문제는 파이썬 코드에있을 수 있습니다.

+0

감사합니다.이 옵션을 사용해 보겠습니다. 나는 결과물을 얻지 못한다. 파이썬 코드가 맞습니다. 데이터가 올바르게 정렬되면 단일 감속기와 함께 작동합니다. –

+0

맵퍼/감속기 코드를 게시하면 제공된 예제 데이터에서 클러스터에서 실행하고 내가 얻는 것을 볼 수 있습니다. – Nonnib

+0

선생님이 응답하지 않으므로이 옵션이 도움이되는지 알 수 없습니다. 클러스터에서 사용해 볼 수 있습니까? 불행히도 충분한 관련 데이터가 포함 된 데이터 집합의 하위 집합이 없습니다. 32 노드 클러스터에서 1 시간 이내에 실행해야합니다. [Freebase Triples 데이터 세트] (https://developers.google.com/freebase/data). [코드] (https://github.com/OndroNR/freebase/tree/odovzdanie/python/src/mr_extractor_avro). 당신이 무엇인가를 명확히 할 필요가 있다면 알려주세요. 고마워. –