Я извлекаю данные из дампа freebase (название, псевдонимы, имена типов) в avro (еще не в этом задании). Я использую mapreduce streaming с python.Hadoop streaming KeyFieldBasedPartitioner
Этот редуктор заданий предполагает название типа (как правило, любое название объекта) и тип ссылки на объект. Форма записи является: 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
Названия предшествует ссылки (так восстановитель запоминает его и излучает разыменованную запись), и все записи, связанные с один тип должен быть разделен на один редуктор. Это обеспечивается путем сортировки ключей. Поскольку я использую составной ключ, мне нужно правильно разделить записи. Я использую KeyFieldBasedPartitioner с конфигурацией «-k1,1», и я установил разделитель ключевых полей на «%». Он должен разделять данные на идентификатор объекта, например. «common.topic» или «m.01dyhm». Но я думаю, что моя конфигурация неверна. Он работает с одним редуктором (Hortonworks VM), но испускает пустые файлы на 32 узловых кластерах (у меня нет прямого доступа, поэтому я не могу эффективно экспериментировать). Я думаю, что разметка неверна и нет данных для соединения на одном редукторе.
Это моя команда 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 прав, он работает с одним редуктором, когда данные правильно отсортированы. –
Если вы разместите код карты/редуктора, я могу попробовать запустить его в своем кластере на приведенных примерах данных и посмотреть, что я получу. – Nonnib
Мой учитель не отвечает, поэтому я не знаю, помогает ли этот вариант. Не могли бы вы попробовать его в своем кластере? К сожалению, у меня нет подмножества набора данных, содержащего достаточно релевантных данных. На кластере 32 узлов он должен работать менее часа. [Набор данных Freebase Triples] (https://developers.google.com/freebase/data). [Код] (https://github.com/OndroNR/freebase/tree/odovzdanie/python/src/mr_extractor_avro). Дайте мне знать, если вам нужно что-то разъяснить. Большое спасибо. –