我從freebase轉儲(標題,別名,類型名稱)提取數據到avro(尚未在此作業中)。我正在使用Python的mapreduce流。Hadoop流式傳輸KeyFieldBasedPartitioner
此作業縮減器期望類型標題(通常是任何對象標題)和類型id引用對象。記錄格式是: id%relation\tvalue
例如:
common.topic%title Topic
common.topic%used_by m.01dyhm
common.topic%used_by m.03x5qm
common.topic%used_by m.04pm6
減速發出:
m.01dyhm%type Topic
m.03x5qm%type Topic
m.04pm6%type Topic
標題preceeds引用(因此減速記住它,併發出取消引用的記錄),並與相關的所有記錄一種類型必須分區到一個reducer。這通過關鍵排序來保證。由於我使用複合鍵,我需要正確分區記錄。我正在使用配置爲「-k1,1」的KeyFieldBasedPartitioner,並將關鍵字段分隔符設置爲「%」。它應該在對象標識符上劃分數據,例如「common.topic」或「m.01dyhm」。但我認爲我的配置是錯誤的。它適用於單個reducer(Hortonworks VM),但在32個節點羣集上發出空白文件(我沒有直接訪問,因此無法有效地進行實驗)。我想分區是錯誤的,沒有數據要加入單個reducer。
這是我的hadoop命令:
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
是我的分區配置嗎?謝謝你的幫助。
謝謝,我會嘗試這個選項。我根本沒有輸出。 Python代碼是正確的,它可以在數據正確排序時與單個reducer一起工作。 – 2014-12-03 21:25:39
如果您發佈您的映射器/縮減器代碼,我可以嘗試在提供的示例數據的集羣上運行它,並查看我得到的結果。 – Nonnib 2014-12-03 22:03:01
我的老師沒有迴應,所以我不知道這個選項是否有幫助。你可以試試你的羣集嗎?不幸的是,我沒有包含足夠相關數據的數據集子集。在32個節點集羣上,它應該在一個小時內運行。 [Freebase Triples數據集](https://developers.google.com/freebase/data)。 [代碼](https://github.com/OndroNR/freebase/tree/odovzdanie/python/src/mr_extractor_avro)。讓我知道你是否需要澄清任何事情。非常感謝。 – 2014-12-27 22:45:18