Создание библиотеки данных при помощи Hive

Хранение большого количества данных – это прекрасно, пока не приходит время как-нибудь их использовать. Неиспользуемые данные, сколько бы их ни было в хранилище, не станут источником невероятных открытий или эпохальных прогнозов. Данные большого объема могут быть дьявольски сложными. Создание сложных MapReduce-программ на языке Java™ требует времени, значительных ресурсов и умений, которых нет у большинства организаций. В такой ситуации создание библиотеки данных с использованием инструмента Hive поверх Hadoop является действенным решением.

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

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



11.10.2013

Что делать, если у компании нет ресурсов для создания сложной платформы для анализа данных большого объема? Что если инструменты бизнес-аналитики (BI), хранения данных и анализа не могут быть подключены к системе Apache Hadoop или становятся слишком сложными? В большинстве организаций есть сотрудники, имеющие опыт работы с системами управления реляционными базами данных (RDBMS) и языком структурированных запросов (SQL). Apache Hive позволяет разработчикам баз данных и аналитикам данных использовать Hadoop, не зная языка Java и MapReduce. Теперь, вместо написания сложного MapReduce-кода, можно создать хранилище данных, основанное на схеме звезды, или нормализованную базу данных. Вдруг оказывается, что инструменты анализа и бизнес-аналитики, такие как IBM Cognos® или SPSS® Statistics, можно подключать к экосистеме Hadoop.

Библиотеки данных

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

Люди изобретали технологии, например, десятичную систему классификации Дьюи (Dewey Decimal System). Они упорядочили телефонные книги по алфавиту, классифицируя людей и компании по имени. Появились металлические шкафы для хранения документов, хранилища со стеллажами, картотеки и многое другое. Работодатели пытались следить за сотрудниками при помощи хронометражных карт, перфокарт и табелей учета отработанного времени. Людям нужно структурировать и организовывать данные. У них также есть потребность управлять этими данными. Имеет ли смысл хранить большие объемы данных, если нет способа к ним обратиться, структурировать их и понять?

В RDBMS используется теория множеств и третья нормальная форма. Хранилища данных организовываются на основе схем Кимбалла (Kimball), Инмона (Inmon) и звезды, а также концепций корпоративной информационной фабрики (Corporate Information Factory – CIF) и витрин данных (Data Marts). Для них разработаны системы управления мастер-данными, планирования бизнес-ресурсов, управления взаимоотношениями с клиентами, электронных медицинских карт и тысячи других систем, позволяющих систематизировать данные в соответствии с определенными структурами и темами. В настоящее время существует огромное количество неструктурированных или частично структурированных данных из таких источников, как социальные медиа, электронная почта, телефонные звонки, оборудование, средства обработки и передачи информации и т.д. И эти новые данные нужно интегрировать с имеющимися большими сложными системами, содержащими новые и накопленные ранее структурированные данные. Как это все классифицировать, чтобы менеджер по продажам мог создавать отчеты? Как создать библиотеку, чтобы руководитель мог строить диаграммы и графики?

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


Большие данные, Hadoop и InfoSphere BigInsights

В этом разделе вы познакомитесь с платформой InfoSphere® BigInsights™ и с тем, какое отношение она имеет к проекту Hadoop, большим данным, инфраструктуре Hive, библиотекам данных и т.п. InfoSphere BigInsights – это дистрибутив Hadoop, разработанный IBM. Широко известны дистрибутивы Apache Hadoop и Cloudera Hadoop, но многие компании отрасли выпускают версии Hadoop под своими торговыми марками. Такой дистрибутив состоит из открытого исходного кода Hadoop, инфраструктуры MapReduce и файловой системы Hadoop Distributed File System (HDFS) и обычно включает в себя другие элементы, такие как ZooKeeper, Oozie, Sqoop, Hive, Pig и HBase. От простого Hadoop подобные дистрибутивы отличаются элементами, которые они добавляют поверх Hadoop. К таким дистрибутивам относится и InfoSphere BigInsights.

InfoSphere BigInsights можно также использовать поверх Cloudera Hadoop. Помимо всего прочего, InfoSphere BigInsights предоставляет быстрый механизм анализа неструктурированных данных, который можно использовать в сочетании с InfoSphere Streams. InfoSphere Streams – это механизм анализа в режиме реального времени, открывающий возможности объединения анализа в пакетном режиме и в реальном времени.

Также InfoSphere BigInsights поставляется с BigSheets - встроенным инструментом для работы с электронными таблицами, основанным на использовании браузера. Этот инструмент позволяет аналитикам работать с данными большого объема и Hadoop с использованием электронных таблиц. Предоставляются также другие функции: LDAP-интеграция защиты и администрирования на основе ролей; интеграция с InfoSphere DataStage® для извлечения, преобразования и загрузки данных (ETL); ускорители для распространенных вариантов использования, таких как анализ журнальных данных и данных о работе оборудования; каталог приложений с общим каталогом и повторно используемыми заданиями; плагины для Eclipse; BigIndex – основанный на Lucene инструмент индексирования, дополняющий Hadoop.

Для повышения производительности предназначены средства Adaptive MapReduce, сжатые текстовые файлы и улучшения адаптивного планирования. Кроме того, можно интегрировать InfoSphere BigInsights с другими приложениями, такими как приложения для анализа содержимого и решения Cognos Consumer Insight.


Инфраструктура Hive

Hive является мощным инструментом. Она использует файловую систему HDFS, хранилище данных (по умолчанию это база данных Apache Derby), командную строку, драйверы, компилятор и механизм исполнения. Она также поддерживает JDBC-соединения. Hive открывает экосистему Hadoop для неспециалистов по программированию, предоставляя SQL-подобные возможности, а также функциональность, аналогичную функциональности баз данных. Она позволяет подключать внешнее ПО для бизнес-аналитики (например, IBM Cognos) при помощи JDBC-драйвера и Web-клиентов.

Вместо долгих поисков программистов на Java MapReduce можно обратиться к разработчикам баз данных. Вся прелесть в том, что больше не нужно заставлять непрограммиста или программиста писать сложную MapReduce-программу, состоящую из 200 и более строк кода, – у вас есть разработчик баз данных, который напишет 10-15 строк SQL-кода, который будет оптимизирован и преобразован системой в MapReduce-код.

Hive часто описывают как инфраструктуру хранилища данных, дополняющую Hadoop. Правда в том, что Hive вовсе не является хранилищем данных. Чтобы создать настоящее хранилище данных, нужно использовать что-то вроде IBM Netezza. Но если вы хотите создать библиотеку данных, используя Hadoop, но не знаете Java и MapReduce, Hive может стать прекрасной альтернативой (если вы знаете SQL). Она позволяет писать SQL-подобные запросы, используя HiveQL для Hadoop и HBase. Она также позволяет создавать схемы по типу звезды поверх HDFS.

Сравнение Hive с RDBMS

Hive является системой Schema on Read (при чтении), в то время как RDBMS, как правило, являются системами Schema on Write (при записи). Традиционные RDMBS проверяют схему при записи данных. Если данные не соответствуют структуре, они отклоняются. Hive не слишком заботится о структуре базы данных (по крайней мере, не в первую очередь) и не проверяет схему при загрузке данных в базу. Напротив, она проверяет схему только после выполнения запроса к базе данных.

Ограничения Hive

При использовании Hive возникает несколько проблем. Во-первых, она несовместима с SQL-92. Некоторые стандартные функции SQL (например, NOT IN, NOT LIKE и NOT EQUAL) отсутствуют или требуют применения специальных приемов. Также отсутствуют или имеют серьезные ограничения некоторые математические функции. Недавно добавленная метка времени date больше совместима с Java, чем с SQL. Не работает такая простая вещь, как разность дат.

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

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


Установка InfoSphere BigInsights

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

После создания базы данных можно разработать Web- или локальный интерфейс на любом языке, посредством которого вы можете подключиться к Hive JDBC. (Установка и настройка thrift-сервера и Hive JDBC – темы для другого разговора). Я создал виртуальную машину InfoSphere BigInsights с помощью VMware Fusion на моем Macbook Apple. Я выполнял простой тест, поэтому моя виртуальная машина имела 1 ГБ оперативной памяти и 20 ГБ памяти на SSD-диске. Использовалась операционная система CentOS 6.4 – 64-разрядный дистрибутив Linux®. Также для создания виртуальной машины InfoSphere BigInsights можно использовать Oracle VM VirtualBox или (если вы пользователь Windows®) VMware Player. (Описание создания виртуальной машины при помощи Fusion, VMware Player или VirtualBox выходит за рамки этой статьи.)

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


Импорт и анализ данных

В современном мире нет проблем с получением данных. Миллионы сайтов предлагают данные в CSV-формате – погода, работа, спорт, финансы, блоги. Для этого примера я использовал структурированные данные с Web-сайта Шона Ламана (Sean Lahman). Неструктурированные данные требуют несколько больших усилий.

Загрузите CSV-файл (см. рисунок 1).

Рисунок 1. Загрузка базы данных примера
Загрузка базы данных примера

Если вы предпочитаете делать это в Linux® вручную, создайте каталог и запустите wget:

$ Sudo mkdir /user/baseball.

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

Данные используются по лицензии Creative Commons Attribution-ShareAlike 3.0 Unported.

ZIP-файл содержит статистику о бейсболе и бейсболистах в CSV-файлах. Пример содержит четыре основные таблицы с уникальным столбцом Player_ID в каждой:

  • Master table.csv – имена игроков, даты рождения, биографические сведения.
  • Batting.csv – batting-статистика (статистика нападения).
  • Pitching.csv – pitching-статистика (статистика питчеров).
  • Fielding.csv – fielding-статистика (статистика защиты).

Вторичные таблицы:

  • AllStarFull.csv – выступления за команду всех звезд.
  • Hall of Fame.csv – данные голосования за попадание в Зал славы.
  • Managers.csv – управленческая статистика.
  • Teams.csv – годовая статистика и результаты.
  • BattingPost.csv – batting-статистика после окончания сезона.
  • PitchingPost.csv – pitching-статистика после окончания сезона.
  • TeamFranchises.csv – информации о лицензиях.
  • FieldingOF.csv – данные по аутфилдерам.
  • FieldingPost.csv – данные по инфилдерам после окончания сезона.
  • ManagersHalf.csv – данные по сезону для менеджеров.
  • TeamsHalf.csv – данные по сезону для команд.
  • Salaries.csv – данные о зарплатах игроков.
  • SeriesPost.csv – информация о сериях после окончания сезона.
  • AwardsManagers.csv – награды, полученные менеджерами.
  • AwardsPlayers.csv – награды, полученные игроками.
  • AwardsShareManagers.csv – голосования за присуждение наград менеджерам.
  • AwardsSharePlayers.csv – голосования за присуждение наград игрокам.
  • Appearances.csv
  • Schools.csv
  • SchoolsPlayers.csv

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

Многие вещи, необходимые для проектирования библиотеки данных, уже сделаны. Player_ID является первичным ключом для четырех основных таблиц – Master, Batting, Pitching и Fielding. (Для лучшего понимания структуры таблиц и зависимостей прочтите Readme2012.txt.)

Схема проста: основные таблицы связываются посредством Player_ID. На самом деле в Hive не используется концепция первичных ключей и ссылочной целостности. Концепция Schema on Read означает, что Hive выводит все, что помещено в таблицы. Если файлы были немного повреждены, возможно, придется искать лучший способ связать их. Но можно сделать какое-нибудь преобразование данных перед загрузкой их в HDFS или Hive. Плохие данные из-за концепции Schema on Read становятся в Hive по-настоящему плохими. Именно поэтому очень важен анализ данных (на уровне исходного кода или на уровне HDFS). Без него ваши необработанные данные никто не сможет использовать. К счастью, данные нашего примера уже были очищены и упорядочены до загрузки их в Hadoop.


Загрузка данных в HDFS или Hive

Для загрузки данных в Hadoop используются различные теории и практики. Иногда необработанные файлы загружаются непосредственно в HDFS. Можно создавать каталоги и подкаталоги для систематизации файлов, но это простой процесс копирования или перемещения файлов из одного места в другое.

Для нашего примера выполните команду put, а затем создайте каталог под именем baseball:

Hdfs dfs  -mkdir  /user/hadoop/baseball

hdfs dfs  -put  /LOCALFILE  /user/hadoop/baseball

Создание библиотеки данных при помощи Hive

Когда анализ данных и проектирование завершены, можно создать базу данных.

Мне не хватит статьи, чтобы показать все примеры, но, выполняя первый из них, вы сможете понять, как выполнить остальные. Обычно я пишу несколько SQL-сценариев, а затем импортирую или вставляю их в Hive. Можно также использовать Hue или другой инструмент для создания баз данных и таблиц.

Для простоты мы будем использовать командную строку Hive. Шаги на верхнем уровне:

  1. Создание базы данных baseball.
  2. Создание таблиц.
  3. Загрузка таблиц.
  4. Проверка правильности таблиц.

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

Листинг 1. Создание базы данных
$ Hive

	Create Database baseball;
	Create table baseball.Master
         ( 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  ) 
         ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' ;

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

$hive
    LOAD DATA LOCAL INPATH Master.csv OVERWRITE INTO TABLE baseball.Master;

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

База данных baseball более или менее нормализована: в ней есть четыре основные таблицы и несколько вторичных таблиц. Поскольку в Hive используется концепция Schema on Read, вам придется выполнит большую часть работы по анализу, извлечению, преобразованию и загрузке данных из-за отсутствия индексации и ссылочной целостности, имеющихся в традиционных RDBMS. Если вы хотите иметь возможность индексирования, используйте что-то вроде HBase. Просмотрите код листинга 2.

Листинг 2. Выполнение запроса
$ HIVE
	Use baseball;
	Select * from Master;
	Select PlayerID from Master;
	Select A.PlayerID, B.teamID, B.AB, B.R, B.H, B.2B, B.3B, B.HR, B.RBI 
        FROM Master A JOIN BATTING B ON A.playerID = B.playerID;

Заключение

Красота Hive и выгода от создания библиотек данных состоят в том, что они упорядочивают хаотический мир. Сколько бы мы ни говорили о неструктурированных и слабоструктурированных данных, они щедро одаривают только тех, кто может анализировать их, строить по ним отчеты и быстро заставить их работать. Большинство пользователей смотрит на эти данные как на своего рода черный ящик: их не волнует, откуда пришли данные и что пришлось сделать, чтобы получить данные в нужном формате. Их не волнует, как трудно было интегрировать и верифицировать данные до тех пор, пока они не станут точными. Это обычно означает, что данные нужно систематизировать и структурировать. В противном случае ваша библиотека станет мертвой зоной вечно хранящихся безграничных данных, которые никто не может и не хочет использовать.

Хранилища данных со сложными структурами превратились в заброшенные города. Со временем все меняется в лучшую сторону, но концепции остаются прежними: компании и бизнес-пользователи хотят получать результаты, не программируя логику. Вот почему создание библиотек данных при помощи Hive может стать движением в правильном направлении.


Загрузка

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

Ресурсы

Научиться

  • Оригинал статьи: Build a data library with Hive (EN).
  • Прочтите книгу Данные большого объема: следующий рубеж инноваций, конкуренции и производительности, Mckinsey & Company (EN).
  • Дополнительная информация об организации The Data Warehouse Institute (TDWI), ценном ресурсе по бизнес-аналитике и хранению данных.
  • Дополнительная информация от TDWI по информация от TDWI по анализу больших данных и по применению передовых аналитических методов к разнообразным наборам больших данных.
  • Познакомьтесь с основами Hadoop с помощью бесплатного курса Hadoop Fundamentals, который предлагает Big Data University (требуется регистрация). Познакомьтесь с архитектурой Hadoop, а также с HDFS, MapReduce, Pig, Hive, JAQL, Flume и многими другими технологиями, связанными с Hadoop. Пройдите практические занятия на кластере Hadoop в облачной среде, с помощью образа виртуальной машины VMWare или локальной установки.
  • Дополнительная информация о бесплатных курсах Big Data University по разным темам, начиная с основ Hadoop и базовых элементов анализа текста и заканчивая SQL доступом для Hadoop и потоковыми вычислениями в режиме реального времени.
  • Создайте свой собственный кластер Hadoop в облаке IBM SmartCloud Enterprise, пройдя бесплатный курс Big Data University (требуется регистрация).
  • Дополнительная информация о IBM InfoSphere Streams.
  • Обслуживать и анализировать огромные объемы структурированных и неструктурированных данных в состоянии покоя можно при помощи IBM InfoSphere BigInsights, платформы, разработанной IBM на основе проекта Hadoop и предназначенной для анализа больших объемов данных.
  • Ознакомьтесь с дополнительной информацией в разделе, посвященном данным большого объема, на developerWorks. Здесь находится техническая документация, статьи с инструкциями, материалы для обучения, файлы для загрузки, информация о продуктах и многое другое.

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

  • Посетите Hadoop.org для получения информации обо всех элементах Hadoop.
  • Посетите Web-сайт проекта Hive для получения дополнительной информации об Apache Hive.
  • Посетите Web-сайт проекта Sqoop для получения дополнительной информации об инструменте Apache для массовой передачи данных.
  • Посетите Web-сайт проекта HBase для получения дополнительной информации о распределенном хранилище данных Apache.
  • Дополнительная информация о IBM Netezza.
  • Дополнительная информация о InfoSphere BigInsights.
  • Загрузите InfoSphere BigInsights Basic Edition для Linux 2.0.0.0.
  • Дополнительная информация о SPSS Statistics.
  • Дополнительная информация о Cognos.
  • Загрузите ознакомительную версию IBM InfoSphere Streams.
  • Загрузите ознакомительную версию IBM InfoSphere BigInsights для управления и анализа больших объемов структурированных и неструктурированных данных в состоянии покоя.

Комментарии

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=948085
ArticleTitle=Создание библиотеки данных при помощи Hive
publish-date=10112013