У меня есть требование парсинга и журналы доступа Apache и журналы кота, один за другим использующие карту, уменьшают. Немного полей извлекаются из журнала кота и отдыха от журнала Apache. Я должен объединиться карта / извлекла поля на основе метки времени, и экспортируйте эти отображенные поля в традиционный реляционный дб (напр. MySQL).
Я могу проанализировать и извлечь информацию с помощью регулярного выражения или свиньи. Проблема, с которой я сталкиваюсь, идет, как отобразить извлеченную информацию и от входит в единственный совокупный формат или файл и от как экспортировать эти данные в MySQL.
Немного подходов я думаю
1) Запишите, что вывод карты уменьшает и от проанализированных журналов доступа Apache и от кота, входит в отдельные файлы и слияние те, которые в единственный файл (снова на основе метки времени). Экспортируйте эти данные в MySQL.
2) Используйте Hbase или Hive, чтобы хранить данные в формате таблицы в hadoop и экспорте это к MySQL
3) Непосредственно запишите, что вывод карты уменьшает до MySQL с помощью JDBC.
Какой подход был бы самым жизнеспособным и также предложите любые другие альтернативные решения, которые Вы знаете.
Почти всегда предпочтительнее иметь меньшие, более простые задания MR и соединять их вместе, чем большие, сложные задания. Я думаю, что лучшим вариантом для вас будет что-то вроде #1. Другими словами:
Вероятно, вы можете выполнить объединение и преобразование (1 и 2) на одном и том же этапе. Используйте карту для преобразования и выполните объединение на стороне уменьшения.
Не похоже, что вам нужны накладные расходы на случайный доступ, поэтому я бы не стал рассматривать HBase. Это не является ее сильной стороной (хотя вы можете сделать это в смысле случайного доступа, просматривая каждую запись в HBase по временной метке, проверяя, существует ли она, объединяя запись или просто вставляя ее, если она не существует, но это очень медленно, сравнительно). Hive может быть удобен для хранения "унифицированного" результата двух форматов, но вам все равно придется преобразовывать записи в этот формат.
Вы совершенно не хотите, чтобы редуктор записывал в MySQL напрямую. Это эффективно создает DDOS-атаку на базу данных. Рассмотрим кластер из 10 узлов, на каждом из которых работает 5 редукторов, у вас будет 50 одновременных писателей в одну и ту же таблицу. По мере роста кластера вы очень быстро превысите максимальное количество соединений и задушите РСУБД.
При всем этом спросите себя, имеет ли смысл помещать такой объем данных в базу данных, если вы рассматриваете полные записи журнала. Этот объем данных как раз относится к тому типу, для хранения и долгосрочной обработки которого предназначен сам Hadoop. Если вы вычисляете агрегаты этих данных, то, конечно, бросайте их в MySQL.
Надеюсь, это поможет.