В статье JCG « Объясненные режимы Hadoop — автономный, псевдораспределенный, распределенный » партнер JCG Рахул Патоди объяснил, как настроить Hadoop . В рамках проекта Hadoop было разработано множество инструментов для анализа полуструктурированных данных, но Hive , пожалуй, наиболее интуитивно понятный из них, поскольку он позволяет любому, кто имеет опыт работы с SQL, отправлять задания MapReduce, описанные как запросы SQL. Hive может быть выполнен из интерфейса командной строки, а также запущен в режиме сервера с клиентом Thrift, выступающим в качестве интерфейса JDBC / ODBC, предоставляя доступ к приложениям для анализа данных и создания отчетов.
В этой статье мы настроим Hive Server, создадим таблицу, загрузим ее с данными из текстового файла, а затем создадим Jasper Resport с помощью iReport . Отчет Jasper выполняет запрос SQL на сервере Hive, который затем преобразуется в задание MapReduce, выполняемое Hadoop .
Примечание: я использовал Hadoop версии 0.20.205, Hive версии 0.7.1 и iReport версии 4.5 под управлением OpenSuSE 12.1 Linux с установленным MySQL 5.5.
Предполагая, что вы уже установили Hadoop, загрузите и установите Hive, следуя вики-инструкциям Hive Getting Started . По умолчанию Hive устанавливается в режиме CLI, работающем в автономном режиме Hadoop .
Создание многопользовательского Hive metastore
Установка Hive по умолчанию использует встроенную базу данных derby в качестве метастаза. Metastore — это место, где Hive поддерживает описания данных, к которым мы хотим получить доступ через SQL. Для того чтобы метастроение было доступно многим пользователям одновременно, его необходимо перенести в отдельную базу данных. Вот как установить метасторое хранилище MySQL.
- Скопируйте файл jar драйвера MySQL JDBC в каталог ~ / hive-0.7.1-bin / lib
- Измените следующие свойства в файле hive-default.xml, находящемся в каталоге ~ / hive-0.7.1-bin / conf :
0102030405060708091011121314151617181920212223
<property><name>javax.jdo.option.ConnectionURL</name><value>jdbc:mysql://hyperion/metastore?createDatabaseIfNotExist=true</value><description>JDBC connect string for a JDBC metastore</description></property><property><name>javax.jdo.option.ConnectionDriverName</name><value>com.mysql.jdbc.Driver</value><description>Driver class name for a JDBC metastore</description></property><property><name>javax.jdo.option.ConnectionUserName</name><value>foo</value><description>Username to connect to the database</description></property><property><name>javax.jdo.option.ConnectionPassword</name><value>bar</value><description>Password to connect to the database</description></property> - Используйте MySQL workbench или утилиту командной строки MySQL для создания схемы с использованием набора символов latin1. Если Hive не найдет схему, он создаст ее самостоятельно, используя набор символов по умолчанию для MySQL. В моем случае это был UTF-8, и это приводило к ошибкам jdbc. Если вы хотите использовать утилиту командной строки, просто введите:
1
mysql> CREATE DATABASE IF NOT EXISTS `metastore` DEFAULT CHARACTER SET latin1 COLLATE latin1_bin; - Введите Hive в командной строке, чтобы ввести Hive CLI, и введите:
12345
hive> SHOW TABLES;OKtestlinesTime taken: 3.654 secondshive>Это заполнит вашу вновь созданную схему метастазирования. Если вы видите какие-либо ошибки, проверьте свою конфигурацию hive -default.xml и убедитесь, что схема вашей базы данных названа ‘metastore’ с latin1 как набор символов по умолчанию.
Теперь давайте заполним Hadoop Hive некоторыми данными
Давайте просто создадим два текстовых файла с именами file01 и file02, каждый из которых содержит:
file01 :
Hello World Bye World
Привет всем пока всем
file02 :
Привет Hadoop до свидания Hadoop
Привет всем до свидания всем
Скопируйте эти файлы из вашей локальной файловой системы в HDFS:
|
1
2
|
$ hadoop fs -mkdir HiveExample$ hadoop fs -copyFromLocal ~/file* /user/ssake/HiveExample |
Перейдите в Hive CLI и создайте таблицу с именем testlines, которая будет содержать слова каждой строки в массиве строк:
|
1
|
hive> create table testlines (line array<string>) row format delimited collection items terminated by ' '; |
Загрузите текстовые файлы в Hive:
|
1
2
|
hive> load data inpath "/user/ssake/HiveExample/file01" INTO table testlines;hive> load data inpath "/user/ssake/HiveExample/file02" INTO table testlines; |
Убедитесь, что тестовые строки теперь содержат слова каждой строки:
|
1
2
3
4
5
6
7
|
hive> select * from testlines;OK["Hello","World","Bye","World"]["Hello","Everybody","Bye","Everybody"]["Hello","Hadoop","Goodbye","Hadoop"]["Hello","Everybody","Goodbye","Everybody"]Time taken: 0.21 seconds |
Теперь, когда у нас есть Hive с данными, мы можем запустить его в качестве сервера с портом 10000, что типично для работы сервера Hive:
|
1
2
|
$ HIVE_PORT=10000$ hive --service hiveserver |
С помощью этой настройки можно получить доступ к нашему серверу Hive нескольким клиентам Thrift. Однако, согласно блогу Apache Hive, многопоточные функции Hive не проходят тщательного тестирования, и поэтому для каждого клиента Thrift безопаснее использовать отдельный порт и экземпляр куста.
Создать отчет «количество слов»
iReport 4.5 поддерживает источники данных улья, поэтому давайте использовать его для создания отчета, который будет работать с нашим сервером улья в качестве источника данных:
1. Создайте источник данных, соединяющийся с сервером улья.
2. Используйте мастер отчетов для генерации вашего отчета
3. Введите следующее в поле ввода HiveQL Query:
|
1
|
select word,count(word) from testlines lateral view explode(line) words as word group by word |
Кратко объясним, что делает вышеуказанный запрос:
Наша исходная таблица, таблица «testlines», имеет один столбец с именем «line», который содержит данные в виде массива строк. Каждый массив строк представляет слова в предложении, найденные в импортированных файлах « file01 » и « file02 ».
Чтобы правильно посчитать вхождения каждого отдельного слова во всех входных файлах, мы должны «взорвать» массивы строк из нашей исходной таблицы в новую, которая должна содержать каждое отдельное слово. Для этого мы используем «боковое представление» в сочетании с «HiveQL» командами explode (), как показано выше.
Выполняя вышеупомянутый запрос HiveQL, мы создаем новую иконическую таблицу с именем «words», в которой есть один столбец с именем «word», содержащий все слова, найденные в каждом массиве строк из нашей таблицы «testlines».
4. Нажмите кнопку…, чтобы выбрать все поля и нажмите «Далее».
5. Когда вы находитесь в представлении конструктора, перейдите на вкладку Предварительный просмотр, чтобы выполнить отчет HiveQL.
И вот наш отчет:
Теперь все готово для создания приложений, которые получают доступ к вашим данным Hadoop, используя знакомый интерфейс JDBC!
Справка: аналитика больших данных с помощью Hive и iReport от нашего партнера W4G Спироса Сакеллариу .





