Створення сховища даних за допомогою Hive

Недороге сховище даних

Три технології намагаються зацікавити підприємство. Перша, сховище даних, солідна. Вона спирається на історію та досвід і говорить гарні слова, здебільшого правильні. Але багато в чому вона надмірна і дорога, а люди втомилися від витрат. Проект Apache Hadoop йде в тому ж напрямку та претендує на захоплення ринку. Він проповідує великі дані, швидкість, обсяг, різноманітність і вимовляє багато інших слів, які мало що означають поза маркетинговим планом. Він згадує аналітику, прогнози та багато іншого. І він дешевий. Люди зупиняються та слухають.

Інфраструктура Apache Hive має великі можливості, але нікого не намагається вводити в оману. Вона хоче працювати з Hadoop, але, на відміну від Hadoop, не відкидає сховища даних на узбіччя. Hive має можливості сховища даних, але з обмеженими засобами аналізу та бізнес-аналітики (BI). Вона має можливості бази даних, але з обмеженими засобами СУРБД і SQL. Вона більш відкрита та чесна. Вона має відношення до сховища даних. Вона має відношення до СУРБД. Але вона не намагається здаватися кращою, ніж є насправді. Hadoop проголошує її сховищем даних для своєї екосистеми. Hadoop, схоже, має кращого представника зв'язків із громадськістю, який змусив говорити про Hive та Hadoop як про рятівників світу. Це інтригує. Це цікаво. Але чи це так насправді? Частково.

Сховища даних

Створення цього сховища даних може бути складним проектом. Існують різні пристрої, методології та теорії. Що найменшим загальним значенням? Які факти та які об'єкти пов'язані з цими фактами? Як скомбінувати, зіставити, з'єднати та інтегрувати системи, що існують десятки років, із системами,які з'явилися кілька місяців тому? Так було до великих даних і Hadoop. Змішайте неструктуровані дані, NoSQL та Hadoop та отримайте складний проект інтеграції даних.

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

Схема зірки

Уявіть собі зірку – центр і кілька променів, що розходяться у різних напрямках. Центром є таблиця фактів. На кінцях променів знаходяться таблиці різних вимірів. Багато сховищ даних мають одну таблицю фактів і кілька таблиць вимірів.

Таблиця фактів містить будь-які дані, з яких можна виконувати статистичні чи математичні операції. У прикладі це бейсбольна статистика: окуляри, хоумрани, хіти тощо. Дані у цих стовпцях можна обчислювати, складати, віднімати та множити.

Таблиці вимірів містять атрибути (описи). У нашому прикладі є таблиці вимірювань з інформацією про гравців, час і дату і т.д. Зазвичай у таблицях вимірів немає стовпців, з яких можна виконувати статистичні чи математичні операції.

У нашому прикладі ключем, що з'єднує таблицю вимірів з таблицею фактів, є PlayerID(Ідентифікатор гравця).

Говорячи коротко, іноді доводиться використовувати інструменти, які є.

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

Я брав участь у багатьох проектах, де 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

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

Почнемо з завантаження IBM InfoSphere BigInsights Basic Edition (див. розділ Ресурси). Щоб завантажити InfoSphereBigInsights Basic Edition потрібно мати ідентифікатор IBM (зареєструйтеся, якщо у вас ще немає ідентифікатора).

Імпорт даних

Почніть із завантаження CSV-файлу, який містить статистичні дані про бейсбол і бейсболістів (див. розділ Завантаження). Виконайте такі команди Linux:

Приклад містить чотири основні таблиці (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. Створення таблиці фактів сховища даних

Тепер створіть таблиці вимірювань сховища даних. У лістингу 2 наведено код.

Лістинг 2. Створення таблиць вимірювань сховища даних

Виконання запитів

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

Лістинг 3. Перевірка існування та правильності даних, а також підключення таблиць вимірювань до таблиці фактів

Для більш ретельної перевірки даних у сховищі Hive можна обчислити мінімальне, максимальне або середнє значення певних (або всіх) стовпців та порівняти результати з вихідними таблицями бази. Має точний збіг.

Висновок

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

Hive, безумовно, має свої обмеження, але якщо ви обмежені в бюджеті або використовуєте інструменти, рекомендовані керівництвом, Hive при певній витратізусиль допоможе створити необхідне сховище даних.

Ресурси для скачування

  • цей контент у PDF
  • Приклад CSV-файлу (lahman2012-csv.zip 11МБ)

Схожі теми

  • Оригінал статті: 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.
  • Завантажте програму InfoSphere BigInsights Quick Start Edition у вигляді інсталяційної копії або образу VMware.

Коментарі