Устройство хранения данных проанализированных данных логов в hadoop и экспорте его в реляционный DB

У меня есть требование парсинга и журналы доступа Apache и журналы кота, один за другим использующие карту, уменьшают. Немного полей извлекаются из журнала кота и отдыха от журнала Apache. Я должен объединиться карта / извлекла поля на основе метки времени, и экспортируйте эти отображенные поля в традиционный реляционный дб (напр. MySQL).

Я могу проанализировать и извлечь информацию с помощью регулярного выражения или свиньи. Проблема, с которой я сталкиваюсь, идет, как отобразить извлеченную информацию и от входит в единственный совокупный формат или файл и от как экспортировать эти данные в MySQL.

Немного подходов я думаю

1) Запишите, что вывод карты уменьшает и от проанализированных журналов доступа Apache и от кота, входит в отдельные файлы и слияние те, которые в единственный файл (снова на основе метки времени). Экспортируйте эти данные в MySQL.

2) Используйте Hbase или Hive, чтобы хранить данные в формате таблицы в hadoop и экспорте это к MySQL

3) Непосредственно запишите, что вывод карты уменьшает до MySQL с помощью JDBC.

Какой подход был бы самым жизнеспособным и также предложите любые другие альтернативные решения, которые Вы знаете.

1
задан Harsha Hulageri 20 June 2010 в 19:13
поделиться

1 ответ

Почти всегда предпочтительнее иметь меньшие, более простые задания MR и соединять их вместе, чем большие, сложные задания. Я думаю, что лучшим вариантом для вас будет что-то вроде #1. Другими словами:

  1. Обработка логов Apache httpd в единый формат.
  2. Обработать журналы Tomcat в единый формат.
  3. Объедините результаты 1 и 2, используя любую логику, которая имеет смысл, и запишите результат в тот же формат.
  4. Экспортируйте полученный набор данных в вашу базу данных.

Вероятно, вы можете выполнить объединение и преобразование (1 и 2) на одном и том же этапе. Используйте карту для преобразования и выполните объединение на стороне уменьшения.

Не похоже, что вам нужны накладные расходы на случайный доступ, поэтому я бы не стал рассматривать HBase. Это не является ее сильной стороной (хотя вы можете сделать это в смысле случайного доступа, просматривая каждую запись в HBase по временной метке, проверяя, существует ли она, объединяя запись или просто вставляя ее, если она не существует, но это очень медленно, сравнительно). Hive может быть удобен для хранения "унифицированного" результата двух форматов, но вам все равно придется преобразовывать записи в этот формат.

Вы совершенно не хотите, чтобы редуктор записывал в MySQL напрямую. Это эффективно создает DDOS-атаку на базу данных. Рассмотрим кластер из 10 узлов, на каждом из которых работает 5 редукторов, у вас будет 50 одновременных писателей в одну и ту же таблицу. По мере роста кластера вы очень быстро превысите максимальное количество соединений и задушите РСУБД.

При всем этом спросите себя, имеет ли смысл помещать такой объем данных в базу данных, если вы рассматриваете полные записи журнала. Этот объем данных как раз относится к тому типу, для хранения и долгосрочной обработки которого предназначен сам Hadoop. Если вы вычисляете агрегаты этих данных, то, конечно, бросайте их в MySQL.

Надеюсь, это поможет.

2
ответ дан 2 September 2019 в 23:38
поделиться
Другие вопросы по тегам:

Похожие вопросы: