Hadoop-Hive-HBase Советы для веб-аналитики - PullRequest
2 голосов
/ 07 февраля 2012

Команде, в которой я работаю, достаточно повезло, что у нее есть менеджмент, который осознает необходимость совершенствования наших навыков и изучения новых технологий.В результате, когда у нас есть небольшой перерыв между крупными проектами, нам рекомендуется использовать это время, чтобы немного расширить свой кругозор и узнать что-то новое.Мы часто занимаемся большим исследовательским проектом в команде, чтобы каждый мог получить пользу от знаний.Например, мы построили совместимый со спецификацией сервер аутентификации Kerberos, чтобы ознакомиться с подробностями протокола.Мы написали наш собственный веб-сервер, чтобы узнать об эффективных стратегиях проектирования для сетевых приложений.

В последнее время мы очень заинтересовались Map-Reduce, в частности Hadoop и различными вспомогательными компонентами (HBase, HDFS, Pig, Hive,так далее.).Чтобы узнать больше об этом, мы хотели бы написать сервис веб-аналитики.Он будет использовать теги страниц Javascript для сбора метрик, а Hadoop и что-то , чтобы сделать аналитику и отчеты доступными через веб-интерфейс.

Сторона, отличная от Hadoop, проста.Сервлет Java будет анализировать параметры из тега Javascript (достаточно просто - мы магазин Java).Затем сервлет отправит JMS-сообщение для асинхронной обработки (опять же, просто).

Мой вопрос ... Что дальше?Мы немного исследовали такие вещи, как Hive, и это звучит как идеальное решение для запросов к хранилищу данных по различным метрикам, которые мы ищем.Но это высокая задержка.Нам повезло, что мы можем разместить это на веб-сайте, который получает несколько миллионов просмотров в месяц.Мы бы очень хотели получить относительно быстрые метрики, используя веб-интерфейс для нашего аналитического инструмента.Латентность не наш друг.Итак, каков наилучший способ сделать это?Будет ли запускать запросы как запланированное задание, а затем сохранять результаты где-нибудь с более низкой задержкой (PostgreSQL и т. Д.) И получать их оттуда?Если это так, где компонент, слушающий сообщения JMS, должен хранить данные?Может ли Hive напрямую получать данные из HBase?Должны ли мы хранить его где-нибудь в HDFS и читать в Hive?

Как я уже сказал, мы очень техническая команда и любим изучать новые технологии.Это, однако, сильно отличается от всего, что мы узнали раньше, поэтому мы хотели бы получить представление о том, какие «лучшие практики» будут здесь.Любые советы или мнения, которые вы можете дать, с благодарностью приветствуются!

РЕДАКТИРОВАТЬ: Я подумал, что добавлю некоторые пояснения относительно того, что я ищу.Я ищу совет по архитектуре и дизайну для такого решения, как это.Мы будем собирать 20-30 различных показателей на сайте, который получает несколько миллионов просмотров страниц в месяц.Это будет много данных, и мы хотели бы иметь возможность получать метрики как можно ближе к реальному времени.Я ищу лучшие практики и советы по архитектуре такого решения, потому что я не хочу, чтобы мы придумывали что-то собственное, что действительно плохо, что заставило бы нас думать, что мы «эксперты Hadoop» только потому, чтоэто работает.

1 Ответ

2 голосов
/ 07 февраля 2012

Hive, как вы упомянули, имеет высокую задержку для запросов.Можно указать на HBase (см. https://cwiki.apache.org/Hive/hbaseintegration.html),, но интеграция приводит к тому, что в HBase есть таблицы, которые принудительно превращаются в в основном прямоугольную реляционную схему, которая не оптимальна для HBase. Кроме того, затраты на эточрезвычайно дорогостоящие запросы к hbase в моем кластере, по крайней мере, на порядок медленнее, чем в случае простых файлов HDFS.

Одна хорошая стратегия - хранить необработанные метрики в HBase или на простых HDFS (может потребоватьсяпосмотреть на Flume, если эти метрики исходят из файлов журналов) и запустить периодические задания MapReduce (даже каждые 5 минут), чтобы создать предварительно агрегированные результаты, которые вы можете сохранить в виде простых прямоугольных файлов, которые вы можете запросить через Hive.файл и Hive не должны делать ничего особенного (например, сортировку, объединение и т. д.), тогда Hive фактически имеет достаточно низкую задержку - он не запускает MapReduce, он просто передает содержимое файла вам.

Наконец, еще один вариант - использовать что-то вроде Storm (который запускаетсяв Hadoop) для сбора и анализа данных в режиме реального времени и сохранения результатов для запросов, как указано выше, или для их сохранения в HBase для отображения через пользовательский интерфейс, который напрямую запрашивает HBase.

...