Создание хранилища данных с помощью Hive

Недорогое хранилище данных

Хранилище данных многие годы является предметом споров в организациях. Как его построить? Какие данные можно интегрировать? Что лучше использовать: подход Кимболла, корпоративную информационную фабрику Инмона (CIF) или витрины данных? Этот список можно продолжать очень долго. С появлением больших данных вопросы усложнились еще больше, например: достаточно ли вообще хранилища данных? Ответ нужно искать на предприятии. Считается, что Hive – это хранилище данных Hadoop. Отчасти это правда, но далеко не всегда. Однако в случае, когда нужно обойтись доступными инструментами, Hive может выступать хранилищем данных.

Питер Джамак, консультант по анализу больших данных, внештатный

Peter Jamack photoПитер Джамак (Peter J Jamack) - консультант по анализу больших данных с более чем 13-летним опытом работы в таких областях, как бизнес-анализ, хранилища данных, аналитика, большие данные и управление информацией. Он объединял структурированные и неструктурированные данные в инновационных интегрированных аналитических решениях, используя различные платформы для больших данных и MPP для развертывания масштабных интегрированных аналитических платформ для клиентов из таких отраслей, как страхование, государственный сектор, средства массовой информации, финансовые услуги, розничная торговля, социальные сети, маркетинг и программное обеспечение. Связаться с Питером можно по электронной почте info@peterjamack.com.



30.10.2013

Три технологии стараются заинтересовать предприятие. Первая, хранилище данных, солидна. Она опирается на историю и опыт и говорит красивые слова, по большей части правильные. Но во многих отношениях она избыточна и дорога, а люди устали от расходов. Проект Apache Hadoop идет в том же направлении и претендует на захват рынка. Он проповедует большие данные, скорость, объем, разнообразие и произносит много других слов, которые мало что значат за пределами маркетингового плана. Он упоминает аналитику, прогнозы и многое другое. И он дешевый. Люди останавливаются и слушают.

Инфраструктура Apache Hive имеет большие возможности, но никого не пытается вводить в заблуждение. Она хочет работать с Hadoop, но в отличие от Hadoop не отбрасывает хранилище данных на обочину. Hive обладает возможностями хранилища данных, но с ограниченными средствами анализа и бизнес-аналитики (BI). Она обладает возможностями базы данных, но с ограниченными средствами СУРБД и SQL. Она более открытая и честная. Она имеет отношение к хранилищу данных. Она имеет отношение к СУРБД. Но она не пытается казаться лучше, чем есть на самом деле. Hadoop же провозглашает ее хранилищем данных для своей экосистемы. Hadoop, похоже, имеет лучшего представителя по связям с общественностью, который заставил говорить о Hive и Hadoop как о спасителях мира. Это интригует. Это любопытно. Но так ли это на самом деле? Отчасти.

Хранилища данных

Создание настоящего хранилища данных может быть сложным проектом. Существуют различные устройства, методологии и теории. Что является наименьшим общим значением? Каковы факты и какие объекты связаны с этими фактами? Как скомбинировать, сопоставить, соединить и интегрировать системы, существующие десятки лет, с системами, которые появились несколько месяцев назад? Так было до больших данных и Hadoop. Смешайте неструктурированные данные, NoSQL и Hadoop и получите сложный проект интеграции данных.

Простейший способ описать хранилище данных – свести все к схеме звезды, фактам и измерениям. Способ создания этих элементов зависит от вас: промежуточные базы данных, процессы извлечения (на лету), преобразования и загрузки или интеграция вторичных индексов. Можно, используя в качестве основной технологии Hive, создать хранилище данных со схемой звезды, таблицами фактов и измерений, но это будет непросто. Вне Hadoop эта задача становится еще более сложной. Hive в гораздо большей степени инструмент интеграции, преобразования и быстрого поиска, чем настоящее хранилище данных. По схеме это может быть хранилище данных, но по полезности – даже не реляционная база данных. Так зачем же его использовать?

Схема звезды

Представьте себе звезду – центр и несколько лучей, расходящихся в разных направлениях. Центром является таблица фактов. На концах лучей находятся таблицы различных измерений. Многие хранилища данных имеют одну таблицу фактов и несколько таблиц измерений.

Таблица фактов содержит любые данные, над которыми можно выполнять статистические или математические операции. В нашем примере это бейсбольная статистика: очки, хоумраны, хиты и т.д. Данные в этих столбцах можно вычислять, складывать, вычитать и умножать.

Таблицы измерений содержат атрибуты (описания). В нашем примере есть таблицы измерений с информацией об игроках, времени и дате и т.д. Обычно в таблицах измерений нет столбцов, над которыми можно выполнять статистические или математические операции.

В нашем примере ключом, соединяющим таблицу измерений с таблицей фактов, является PlayerID (идентификатор игрока).

Говоря коротко, иногда приходится использовать те инструменты, которые имеются в наличии.

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

Я участвовал во многих проектах, где Hive использовалась в качестве базы данных, хранилища данных или медленно меняющейся системы. Использование Hive требовало напряжения сил и иногда раздражало. Иногда было непонятно, зачем это нужно. Но все равно ее необходимо было заставить работать. Если хранилище данных должно создаваться и использоваться в Hive, если необходимы медленно меняющиеся измерения и обновления, а также синхронизация старых данных, значит, это нужно сделать. Суть не в том, чтобы иметь лучшие инструменты, а в том, чтобы заставить имеющиеся инструменты работать лучше.


Hive

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

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

Например, в Hive ограничена индексация. Как решить эту проблему? В Hive можно создать индекс с помощью функции org.apache.hadoop.hive.ql.index.compact.CompactIndexHandler. Также в Hive невозможны медленно меняющиеся измерения. Но это ограничение можно обойти путем создания промежуточных таблиц и использования определенного числа соединений (если добавлять новую таблицу, выгружая старую и сохраняя только самую последнюю, обновленную).

Подключение к Hive внешних систем создания отчетов и анализа всегда было огромной проблемой. Даже при использовании JDBC-соединения можно подключиться только к базе данных по умолчанию. Это стало толчком для использования усовершенствованных метаданных и инструментов, подобных Apache HCatalog, помогающих подключать к хранилищу Hive различные сервисы. При правильном использовании это может быть отличным решением.

Таким образом, хотя Hive не является хранилищем данных или базой данных, существуют пути использования Hive в качестве хранилища данных или базы данных. Но это потребует усилий и использования обходных путей. Зачем проходить все это снова? Чтобы заставить работать имеющиеся инструменты.


Пример: создание хранилища данных для бейсбольной информации

InfoSphere BigInsights Quick Start Edition

InfoSphere BigInsights Quick Start Edition представляет собой бесплатную загружаемую версию Hadoop-платформы IBM InfoSphere BigInsights. Quick Start Edition позволяет опробовать возможности, такие как Big SQL, анализ текста и BigSheets, созданные IBM в развитие проекта с открытым исходным кодом Hadoop. Управляемое обучение с помощью пошаговых руководств и видеоматериалов для самостоятельного изучения поможет приступить к работе с Hadoop. Вы сможете в свое свободное время экспериментировать с большими данными без ограничений по времени или по объему. Смотрите видеоматериалы, изучайте руководства (в формате PDF) и загружайте BigInsights Quick Start Edition.

При написании статьи Создание библиотеки данных при помощи Hive (EN) я создал виртуальную машину IBM InfoSphere BigInsights с помощью VMware Fusion на моем Macbook Apple. Я выполнял простой тест, поэтому моя виртуальная машина имела 1 ГБ оперативной памяти и 20 ГБ памяти на SSD-диске. Использовалась операционная система CentOS 6.4 – 64-разрядный дистрибутив Linux®.

Начнем с загрузки IBM InfoSphere BigInsights Basic Edition (см. раздел Ресурсы). Чтобы загрузить InfoSphere BigInsights Basic Edition, нужно иметь идентификатор IBM (зарегистрируйтесь, если у вас еще нет идентификатора).

Импорт данных

Начните с загрузки CSV-файла, который содержит статистические данные о бейсболе и бейсболистах (см. раздел Загрузка). Выполните следующие команды Linux:

$ Sudo mkdir /user/baseball.

sudo wget http://seanlahman.com/files/database/lahman2012-csv.zip

Пример содержит четыре основные таблицы (Master, Batting, Pitching и Fielding) с уникальным столбцом в каждой и несколько вторичных таблиц.

Проектирование хранилища данных

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

Таблица фактов называется fact_Player_Stats и включает в себя все статистические столбцы, содержащиеся в различных CSV-файлах и таблицах. Потребуются данные основных таблиц (Batting, Pitching и Fielding), а также некоторых дополнительных таблиц, которые тоже содержат статистику. Добавляются статистические столбцы из следующих таблиц:

  • AllStarFull
  • hall of Fame
  • BattingPost
  • PitchingPost
  • FieldingOF
  • Salaries
  • AwardsPlayers
  • AwardsSharePlayers
  • Appearances
  • SchoolsPlayers

Некоторые таблицы имеют лишь несколько статистических столбцов. Например, в таблицу фактов fact_Player_Stats добавляются столбцы Glf, Gcf и GRF из таблицы FieldingOF. Из таблицы SchoolsPlayers добавляются только столбцы yearMin и yearMax. Выполните эту процедуру для всех таблиц. В таблице фактов должны быть только статистические столбцы.

Примечание. Данные таблиц Managers, Teams, TeamsHalf, SeriesPost и т.д не используются.

Фактически таблица фактов fact_Player_Stats состоит только из ключей playerID, FranchID, yearID и SchoolID. В таблицы измерений добавляются только столбцы атрибутов:

  • Таблица измерений dim_Players содержит данные (имена игроков, даты рождения, биографические сведения и т.д.) из таблицы Master. Первичным ключом является PlayerID.
  • Таблица измерений dim_TeamFranchise содержит все данные из таблицы TeamFranchise. Первичным ключом является FranchID.
  • Таблица измерений dim_Schools содержит все данные из таблицы Schools.
  • dim_Year – это таблица измерений времени, содержащая месяцы и годы (1871-2012).

Использование библиотеки данных для создания хранилища данных

Если вы еще не создали библиотеку бейсбольных данных, рекомендую сделать это сейчас, чтобы на базе ее таблиц построить хранилище данных. Можно писать сложные сценарии захвата определенных столбцов текстового файла и повторно использовать этот файл для другой таблицы, но в этой статье используются данные библиотеки, описанной ранее в статье Создание библиотеки данных при помощи Hive (EN).

Создание хранилища данных с помощью Hive

После завершения проектирования и анализа данных самое время построить хранилище данных на основе схемы звезды. В командной строке Hive создайте базу данных baseball_stats, создайте таблицы, загрузите таблицы и проверьте правильность таблиц. (Этот процесс описан в статье Создание библиотеки данных при помощи Hive.) Затем создайте таблицу фактов хранилища данных. В листинге 1 приведен код.

Листинг 1. Создание таблицы фактов хранилища данных
$ Hive

Create Database baseball_stats;

Create table baseball_stats.fact_player_stats as 
         ( SELECT a.playerID, FranchID, yearID, SchoolID, stint int, g int, 
g_batting int, ab int, r int, h int, 2b int, 3b int, hr int, rbi int, sb int, 
cs int, bb int, so int, ibb int, hbp int, sh int, sf int, gidp int, w int, 
l int, g int, gs int, cg int, sho int, sv int, ipouts int, ph int, er int, 
phr int, pbb int, pso int, baopp int, era int,pibb int, wp int, phbp int, 
bk int, bfp int,gf int, pr int, p sh int, psf int, p gidp int, fg int, 
fgs int, innouts int, po int, a int, e int, dp int, pb int, wp int, fsb int,
fcs int, zr int, gamenum int, allstargp int, ballots int, needed int,votes int, 
playoff_g int,playoff_ab int, playoff_r int, playoff_h int, 
playoff_2b int, playoff_3b int, playoff_hr int, playoff_rbi int, playoff_sb int, 
playoff_cs int, playoff_bb int, playoff_so int, playoff_ibb int, playoff_hbp int, 
playoff_sh int, playoff_sh, playoff_sf int, playoff_gidp int, pitchplayoff_w int, 
pitchplayoff_l int, pitchplayoff_g int, pitchplayoff_gs int, pitchplayoff_ cg int, 
pitchplayoff_sho int, pitchplayoff_sv int, pitchplayoff_ipouts int, 
pitchplayoff_h int,pitchplayoff_er int, pitchplayoff_hr int, pitchplayoff_bb int, 
pitchplayoff_so int, pitchplayoff_baopp int, pitchplayoff_era int, pitchplayoff_ibb int, 
pitchplayoff_wp int,pitchplayoff_hbp int, pitchplayoff_bk int, pitchplayoff_BFP int, 
pitchplayoff_gf int, pitchplayoff_r int, pitchplayoff_sh int, pitchplayoff_sf int, 
pitchplayoff_gidp int, glf int, grf int, gcf int, salary double, award int, 
fieldplayoffs_g int, fieldplayoffs_gs int, fieldplayoffs_innouts int, 
fieldplayoffs_po int, fieldplayoffs_a int, fieldplayoffs_e int, fieldplayoffs_dp int,
fieldplayoffs_dp int,fieldplayoffs_tp int, fieldplayoffs_pb int, fieldplayoffs_sb int, 
fieldplayoffs_cs int,  appearances_g_all int, appearances_gs int, 
appearances_g_batting int, appearances_defense int, 
appearances_g_p int, appearances_g_c int, appearances_g_1b int, 
appearances_g_2b int, appearances_g_3b int, appearances_g_ss int, appearances_g_ss int, 
appearances_g_lf int, appearances_g_cf int, appearances_g_rf int, appearances_dh int, 
appearances_ph int, appearances_pr int, yearMin double, yearMax double
from baseball.Batting B JOIN Pitching P ON B.playerid = P.playerID 
JOIN fielding F ON B.playerID = F.playerID 
JOIN Team T ON b.teamid = t.teamid JOIN TeamFranchises TF ON 
t.franchid = tf.franchid ...);

Теперь создайте таблицы измерений хранилища данных. В листинге 2 приведен код.

Листинг 2. Создание таблиц измерений хранилища данных
$ Hive

Create table baseball_stats.dim_Players AS
         ( SELECT lahmanID int, playerID int, managerID int, hofID int, birthyear INT, 
           birthMonth INT, birthDay INT, birthCountry STRING, birthState STRING, 
           birthCity STRING, deathYear INT, deathMonth INT,deathDay INT, 
           deathCountry STRING, deathState STRING, deathCity STRING, 
           nameFirst STRING, nameLast STRING, nameNote STRING, nameGive STRING, 
           nameNick STRING, weight decimal, height decimal, bats STRING, 
           throws STRING, debut  INT, finalGame INT, 
           college STRING, lahman40ID INT, lahman45ID INT, retroID INT,
           holtzID INT, hbrefID INT
           FROM baseball.master .... );

Выполнение запросов

Выполним несколько запросов, чтобы убедиться в правильности данных. Сначала выберем все данные из таблицы фактов (только первые 10 строк). Можно выполнить еще несколько запросов для проверки таблиц измерений и их подключения к таблице фактов и т.д. Также можно выполнить суммирование в таблице фактов, чтобы убедиться в появлении итоговой строки. Конечно, после этого нужно будет привести таблицы в соответствие с исходными таблицами. В листинге 3 приведен код для проверки существования и правильности данных, а также подключения таблиц измерений к таблице фактов.

Листинг 3. Проверка существования и правильности данных, а также подключения таблиц измерений к таблице фактов
$ HIVE
	Use baseball_stats;
	Select * from fact_player_stats limit 10;

	Select A.PlayerID, A.name, B.teamID, B.AB, B.R, B.H, B.2B, B.3B, B.HR, B.RBI 
        FROM dim_players A JOIN fact_player_stats B ON a.playerid = b.playerid;

        Select count(*) from fact_player_stats;

        Select count(*) from dim_players.

        Select max(r) from fact_player_stats where playerid=1234;

Для более тщательной проверки данных в хранилище Hive можно вычислить минимальное, максимальное или среднее значение определенных (или всех) столбцов и сравнить результаты с исходными таблицами базы. Должно наблюдаться точное совпадение.


Заключение

Видно, что на создание простой схемы звезды уходит много работы. Можно вернуться назад и создать таблицу фактов для бейсбольных команд. Преимущество такой схемы хранилища данных состоит в том, что не нужно соединять много таблиц. В нашем примере есть несколько вариантов данных (помимо годовой статистики), и для каждого варианта пересчет после перезаписи таблиц хранилища или добавления еще одного года не должен вызывать проблем.

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


Загрузка

ОписаниеИмяРазмер
Пример CSV-файлаlahman2012-csv.zip11МБ

Ресурсы

Научиться

  • Оригинал статьи: Build a data warehouse with Hive (EN).
  • Дополнительная информация об организации The Data Warehouse Institute (TDWI), ценном ресурсе по бизнес-аналитике и хранению данных.
  • Дополнительная информация от TDWI по анализу больших данных и по применению передовых аналитических методов к разнообразным наборам больших данных.
  • Посетите Hadoop.org для получения информации обо всех элементах Hadoop.
  • Дополнительную информацию о Hive и Sqoop можно найти на сайтах проектов.
  • Создайте свой собственный кластер Hadoop в облаке IBM SmartCloud Enterprise, пройдя бесплатный курс Big Data University (требуется регистрация).
  • Ресурсы, которые помогут приступить к работе с InfoSphere BigInsights, платформой IBM, расширяющей проект с открытым исходным кодом Hadoop такими возможностями как Big SQL, анализ текста и BigSheets.
  • Ознакомьтесь с дополнительной информацией в разделе developerWorks, посвященном большим данным. Здесь находится техническая документация, статьи с инструкциями, материалы для обучения, файлы для загрузки, информация о продуктах и многое другое.

Получить продукты и технологии

Комментарии

developerWorks: Войти

Обязательные поля отмечены звездочкой (*).


Нужен IBM ID?
Забыли Ваш IBM ID?


Забыли Ваш пароль?
Изменить пароль

Нажимая Отправить, Вы принимаете Условия использования developerWorks.

 


Профиль создается, когда вы первый раз заходите в developerWorks. Информация в вашем профиле (имя, страна / регион, название компании) отображается для всех пользователей и будет сопровождать любой опубликованный вами контент пока вы специально не укажите скрыть название вашей компании. Вы можете обновить ваш IBM аккаунт в любое время.

Вся введенная информация защищена.

Выберите имя, которое будет отображаться на экране



При первом входе в developerWorks для Вас будет создан профиль и Вам нужно будет выбрать Отображаемое имя. Оно будет выводиться рядом с контентом, опубликованным Вами в developerWorks.

Отображаемое имя должно иметь длину от 3 символов до 31 символа. Ваше Имя в системе должно быть уникальным. В качестве имени по соображениям приватности нельзя использовать контактный e-mail.

Обязательные поля отмечены звездочкой (*).

(Отображаемое имя должно иметь длину от 3 символов до 31 символа.)

Нажимая Отправить, Вы принимаете Условия использования developerWorks.

 


Вся введенная информация защищена.


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=40
Zone=Information Management
ArticleID=950664
ArticleTitle=Создание хранилища данных с помощью Hive
publish-date=10302013