четверг, 14 июня 2012 г.

Как использовать hive в web-аналитике. Введение


Прошлой осенью на мейлрушной конференции я услышал от тренера из cloudera, что hive являетя любимым инструментом многих пользователей hadoop'а. Эта штука радикальным образом упрощает написание hadoop задач, переводя их из терминова map-reduce команд в более понятный для человека sql-подобный язык. Рассказать подробно про hive за один раз невозможно, поэтому я решил посвятить ему небольшую серию постов.




Что такое hive

Разработка hive началась в 2008 году специалистами из facebook. Объемы внутренних логов социальной сети были настолько большими, что не помещались ни в одну реляционную базу данных. Hadoop и hive предложили решение этой проблемы.
  • hadoop позволил хранить большой объем данных целиком в одном месте в "шаговой доступности"
  • hive дал возможность легко манипулировать ими при помощи SQL подобного синтаксиса
Работа hive основана на нескольких базовых принципах:
  • Каждая таблица в hive является отдельным каталогов в hdfs
  • Содержимое таблиц - это содержимое всех файлов, которые лежат в папке, ассоциированной с таблицей.
  • Данные в каждую из таблиц могут быть записаны только один раз и не могут быть изменены (следует из схемы работы "write-once", на которой построен hdfs)
  • Информация о таблицах, полях в них и тому подобных вещах называется "метаинформацией" и храниться в отдельной реляционной базе данных (по умолчанию в derby)
  • Для написания запросов к таким таблицами используется язык hiveQL, похожий на sql.

Источниками информации по hive для меня ялялись книга Hadoop the definitive guide (12 глава) и вики проекта hive на сайте apache

Установка и запуск hive

Установка и запуск примеров проводились под операционной системой Linux Ubuntu. Найти дистрибудивы hadoop и hive можно на сайте cloudera, еще там есть подробная инструкция по установке под Linux.
Вообще hadoop + hive в локальном режиме номально работают и под windows в одиночном режиме - это же java. Но запускать их под виндой я не пробовал.
После успешной установки hadoop + hive на локальную машину, в результате команды
> hive 
у вас должен запуститься интерфейс командной строки hive:
hive> _
С настройками по умолчанию hadoop работает в локальном режиме. В таком режиме запущенный поверх него hive при вызове простейшей команды
CREATE TABLE test (field1 STRING);
выбрасывает исключение

FAILED: Error in metadata: MetaException(message:Got exception: 
java.io.FileNotFoundException File file:/user/hive/warehouse/test 
does not exist.)

Связано это с тем, что в локальном режиме hadoop использует вместо hdfs локальную файловую систему, при этом не имея достаточных прав, чтобы создать свой «путь по умолчанию» /user/hive/warehouse/test в ней.
Лечится это указанием полного пути до папки, где будет лежать таблица
CREATE TABLE test (field1 STRING) LOCATION '/home/mezentsev/test';
 
Внимание! Не указывайте в качестве папки уже существующую. При удалении таблицы папка тоже будет удалена со всем что в ней находится. В этом я убедился все на собственном опыте, указав в качестве папки /home/mezentsev, а затем выполнив
DROP TABLE test;

hive и веб-аналитика

веб аналитика выглядит так
Я хочу рассказать использование  hive в задачах веб-аналитики.  За страшным термином "веб-аналитика" кроется простая в принципе вещь:
  • вот у вас есть какой-то сервис
  • на него приходят пользователи и что-то делают
  • запросы пользователей обрабатываются веб-серером (apache, nginx или каким нибудь другим)
  • веб сервер, сохраняет историю их действий на диск в виде логов
  • эти логи анализируются и по ним строятся статистики, описывающие посещения вашего ресурса
Аналитикам, маркетологам и владельцам ресурсов всегда интересно узнать о пользователях сервиса: кто приходил на сайт, когда, зачем, почему - в общем получить максимум информации, которую можно из таких логов добыть.
Использование hadoop кластера и hive фреймворка для обработки логов позволяет
  • хранить столько логов, сколько нужно - объем hdfs можно увеличивать практически бесконечно, добавляя новые машины в кластер.
  • считать по любому подмножеству логов любую статистику, причем в хорошо распаралеленом режиме
  • очень быстро писать исследовательские и аналитические задачи по анализу имеющихся в hdfs данных
Согласитесь, ведь круто, когда можно потратить 2 минуты своего времени, потом немного подождать и получить в итоге какую-нибудь хитрую статистику за несколько последних лет!
UPD: Про существующие в веб аналитике статистики рекомендую почитать в Web Analytics Definitions.


Комментариев нет:

Отправить комментарий