Прошлой осенью на мейлрушной конференции я услышал от тренера из cloudera, что hive являетя любимым инструментом многих пользователей hadoop'а. Эта штука радикальным образом упрощает написание hadoop задач, переводя их из терминова map-reduce команд в более понятный для человека sql-подобный язык. Рассказать подробно про hive за один раз невозможно, поэтому я решил посвятить ему небольшую серию постов.
Что такое hive
Разработка hive началась в 2008 году специалистами из facebook. Объемы внутренних логов социальной сети были настолько большими, что не помещались ни в одну реляционную базу данных. Hadoop и hive предложили решение этой проблемы.- hadoop позволил хранить большой объем данных целиком в одном месте в "шаговой доступности"
- hive дал возможность легко манипулировать ими при помощи SQL подобного синтаксиса
- Каждая таблица в 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 и веб-аналитика
веб аналитика выглядит так |
- вот у вас есть какой-то сервис
- на него приходят пользователи и что-то делают
- запросы пользователей обрабатываются веб-серером (apache, nginx или каким нибудь другим)
- веб сервер, сохраняет историю их действий на диск в виде логов
- эти логи анализируются и по ним строятся статистики, описывающие посещения вашего ресурса
Использование hadoop кластера и hive фреймворка для обработки логов позволяет
- хранить столько логов, сколько нужно - объем hdfs можно увеличивать практически бесконечно, добавляя новые машины в кластер.
- считать по любому подмножеству логов любую статистику, причем в хорошо распаралеленом режиме
- очень быстро писать исследовательские и аналитические задачи по анализу имеющихся в hdfs данных
UPD: Про существующие в веб аналитике статистики рекомендую почитать в Web Analytics Definitions.
Комментариев нет:
Отправить комментарий