В статье 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 Спироса Сакеллариу .





