У меня есть интересная проблема, которую я пытаюсь вписать в MapReduce. У меня есть куча записей журнала. Что мне нужно сделать, это что-то вроде этого:
Проверьте, имеет ли какая-либо запись для данного IP установленный флаг. Если это так, примените преобразование к всем записям с этим IP, иначе не преобразовывайте.
Самый простой способ сделать это - отключить IP, затем в редукторе выполнить итерацию один раз над значениями, чтобы проверить, установлен ли этот флаг, и снова преобразовать (если необходимо). К сожалению, кажется, что я могу перебрать итерацию, переданную в редуктор, только один раз.
Возможные решения, которые я вижу:
- В редукторе сериализуйте значения, которые я читаю на диск, чтобы потом можно было лениво десериализоваться, чтобы выполнить итерацию во второй раз. Это похоже на взлом.
- Заранее запустите какое-нибудь задание, которое генерирует список IP-адресов для преобразования, и сохраните его в HBase или что-то в этом роде. Это, очевидно, требует HBase и большого количества сетевых коммуникаций.
Я бы хотел придерживаться стандартного MapReduce, чтобы можно было легко работать на Amazon Elastic MapReduce. Я чувствую, что должен быть какой-то способ сделать это с помощью скованных работ, но я не могу ничего придумать. У кого-нибудь есть советы, как мне это сделать?