У меня есть проект MapReduce, над которым я работаю (в частности, я использую Python и библиотеку MrJob и планируйте использовать Amazon EMR). Вот пример, чтобы подвести итог моей проблемы:
У меня есть тысячи ГБ json-файлов, полных данных о клиентах. Мне нужно запускать ежедневные, еженедельные и ежемесячные отчеты по каждой строке/вводу/объекту json клиента.
Итак, для шага карты, который я сейчас делаю:
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-строк данных о клиентах (или на самом деле о пользователях, никто мне ничего не платит). Я хочу иметь возможность создавать отчеты для этих данных, и код отчета генерируется по-разному в зависимости от того, ежемесячно, еженедельно или ежедневно. На самом деле я также дедуплицирую данные перед этим, но это мой последний шаг, фактически производящий вывод. Я очень ценю, что вы нашли время, чтобы прочитать это и помочь!!