У меня есть проект MapReduce, над которым я работаю (в частности, я использую Python и библиотеку MrJob и планирую запуск с использованием EMR Amazon). Ниже приведен пример, чтобы подвести итог проблеме, которую я имею:С MapReduce гарантировано, что ВСЕ значения с одним и тем же ключом перейдут к одному и тому же редуктору?
У меня есть тысячи GB файлов json с данными о клиентах. Мне нужно идти и запускать ежедневные, еженедельные и ежемесячные отчеты о каждом клиенте json line/input/object.
Таким образом, для шага карты я в настоящее время сделать:
map_step(_, customer_json_object)
c_uuid = customer_json_object.uuid
if customer_json_object.time is in daily_time_range:
yield "%s-%s" % (DAILY_CONSTANT, c_uuid), customer_json_object
if customer_json_object.time is in weekly_time_range:
yield "%s-%s" % (WEEKLY_CONSTANT, c_uuid), customer_json_object
if customer_json_object.time is in monthly_time_range:
yield "%s-%s" % (MONTHLY_CONSTANT, c_uuid), customer_json_object
А потом редуктор
reducer_step(key, customer_info)
report_type, c_uuid = key.split("-")
yield None, Create_Report(report_type, customer_info)
Мой вопрос:
Гарантируется ли здесь, что все мои данные с тот же ключ (то есть здесь все данные для конкретного клиента и конкретный тип отчета) будет обрабатываться одним и тем же редуктором? Мой Create_Report не может быть распределен по нескольким процессам, поэтому мне нужны все данные, необходимые для обработки отчета одним процессом.
Я опасаюсь, что, если будет слишком много значений для ключа, они будут распространены среди редукторов или что-то в этом роде. Однако из того, что я читал, звучит так, как это работает.
Большое вам спасибо! Я только что понял, что мне нужно многократно выходить с шага карты, так что это последний кусочек головоломки для меня. Если это можно понять, это будет огромная победа, так как я не могу масштабировать мой маленький сервер дальше по вертикали ...
Если из кода выше не видно, у меня есть тысячи файлов json-линий клиента (или действительно пользователи, никто ничего мне не платит). Я хочу иметь возможность создавать отчеты для этих данных, а код отчета генерируется по-разному в зависимости от того, будет ли он ежемесячно, еженедельно или ежедневно. Я на самом деле также дублирую данные до этого, но это мой последний шаг, на самом деле производящий результат. Я очень ценю, что вы нашли время, чтобы прочитать это и помочь!
Havent прочитал все, но из темы, используйте partiotioner, чтобы гарантировать это. – SMA