Оглавление:

1. Краткое описание Hive (что это и зачем).

2. Установка Hive.

3. Установка Derby.

4. Настройка мета-хранилища Derby и запуск Hive.

5. Настройка мета-хранилища MySQL для Hive.

6. Настройка клиент-серверного взаимодействия Hive (HiveServer2 и beeline).


Краткое описание Hive (что это и зачем).

В данной статье мы рассмотрим еще одно практическое применение Hadoop на примере фреймворка Hive.

Многие ошибочно считают, что Hive - это база данных, однако это не так. Насколько я понял, Hive - это движок, преобразующий SQL-запросы в MapReduce -задачи над файлами в HDFS. Следует отметить, что данные таблиц хранятся в HDFS распределенно в виде файлов различных форматов (мы рассмотрим CSV). Для хранения метаданных Hive использует обычную SQL базу данных, наиболее распространенная сборка в комплекте с Apache Derby (реляционная база данных, написанная на Java). Но следует отметить, что могут использоваться и другие БД: MySQL, PostgreSQL или Oracle.

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

Приступим к установке.


Установка Hive.

Для начала необходимо запустить Мастер-машину и скачать необходимые дистрибутивы Hive и Derby.

Описание совместимости дистрибутивов Hive с Hadoop представлено на этой странице. Так как мы установили Hadoop 2.9.1, подходит версия Hive release 2.3.6. Скачиваем файл apache-hive-2.3.6-bin.tar.gz либо с помощью браузера, либо командой wget.

Далее смотрим версии Apache Derby по совместимости с установленной версией Java здесь. Так как мы устанавливали 8-ю версию, Derby 10.14.2.0 подходит. Качаем файл db-derby-10.14.2.0-bin.tar.gz

Далее распакуем скачанные архивы в текущем каталоге Downloads и перенесем их содержимое в каталог /usr/local/.

Распаковать архив hive:

cd home/user/Downloads

Где user - текущий пользователь, под которым скачали файл

tar zxvf apache-hive-2.3.6-bin.tar.gz

Далее переносим содержимое:

sudo mv apache-hive-2.3.6-bin /usr/local/hive

Перейдем в созданный каталог:

cd /usr/local/hive

ls

Увидим следующее содержимое каталога:

Далее необходимо прописать переменные окружения в файле bashrc:

Перейти в домашний каталог и открыть файл в текстовом редакторе:

cd

sudo gedit .bashrc

В конце файла прописать следующие строки:

export HIVE_HOME=/usr/local/hive

export PATH=$PATH:$HIVE_HOME/bin

export CLASSPATH=$CLASSPATH:/usr/local/hadoop/hadoop-2.9.1/lib/*:.

export CLASSPATH=$CLASSPATH:/usr/local/hive/lib/*:.

Мой пример представлен на рисунке ниже

Применить изменения:

source .bashrc

Проверить:

cd $HIVE_HOME

Теперь пропишем каталог установки Hadoop в настройках hive. Для этого необходимо создать файл настроек на основе шаблона в каталоге /usr/local/hive/conf

cd $HIVE_HOME/conf

sudo cp hive-env.sh.template hive-env.sh

Прописать путь к Hadoop

sudo gedit hive-env.sh

И добавить строку: export HADOOP_HOME=/usr/local/hadoop/hadoop-2.9.1

Установка hive завершена, теперь установим базу данных Derby.


Установка Derby.

Последовательность действий такая же как и с Hive: распаковываем архив в каталоге Downloads, извлеченный каталог db-derby-10.14.2.0-bin копируем в каталог /usr/local/Derby:

sudo mv db-derby-10.14.2.0-bin /usr/local/Derby

Далее в файле bashrc пропишем следующие строки:

export DERBY_HOME=/usr/local/Derby

export PATH=$PATH:$DERBY_HOME/bin

export CLASSPATH=$CLASSPATH:$DERBY_HOME/lib/derby.jar:$DERBY_HOME/lib/derbytools.jar

Применить изменения

sudo source .bashrc

Создать файл мета-хранилища Derby:

sudo mkdir $DERBY_HOME/data

На этом все для Derby.


Настройка мета-хранилища и запуск Hive.

Основной файл конфигурации Hive - hive-site.xml. Его скопируем из файла-шаблона:

cd $HIVE_HOME/conf

cp hive-default.xml.template hive-site.xml

Теперь откроем файл для редактирования и вставим следующие строки (смотрите рисунок):



Обратите внимание на строку jdbc:derby, путь к метахранилищу должен соответствовать вашему!

Далее нужно создать файл jpox.properties (естественно в каталоге $HIVE_HOME/conf). Открытие несуществующего файла в редакторе приводит к его созданию:

sudo gedit jpox.properties

Прописать в нем следующее:


javax.jdo.PersistenceManagerFactoryClass =

org.jpox.PersistenceManagerFactoryImpl

org.jpox.autoCreateSchema = false

org.jpox.validateTables = false

org.jpox.validateColumns = false

org.jpox.validateConstraints = false

org.jpox.storeManagerType = rdbms

org.jpox.autoCreateSchema = true

org.jpox.autoStartMechanismMode = checked

org.jpox.transactionIsolation = read_committed

javax.jdo.option.DetachAllOnCommit = true

javax.jdo.option.NontransactionalRead = true

javax.jdo.option.ConnectionDriverName = org.apache.derby.jdbc.ClientDriver

javax.jdo.option.ConnectionURL = jdbc:derby://Master1:1527/usr/local/hive/metastore_db;create = true

javax.jdo.option.ConnectionUserName = APP

javax.jdo.option.ConnectionPassword = mine


Внимание на выделенную строку! Имя хоста и путь должны соответствовать вашим.

Далее необходимо инициализировать метахранилище:

cd $HIVE_HOME/bin

schematool -initSchema -dbType derby


Если ошибок (exeption) нет, все прошло успешно.

Осталось настроить каталоги HDFS для Hive и назначить им права доступа:

hadoop fs -mkdir /tmp

hadoop fs -mkdir /user/hive/warehouse

hadoop fs -chmod g+w /tmp

hadoop fs -chmod g+w /user/hive/warehouse


Все готово к запуску Hive:

cd $HIVE_HOME/bin

hive


Если у вас вывод как на картинке снизу, поздравляем, вы запустили командную строку Hive!


Если все успешно, проверим работоспособность командой:

show tables;

Точка с запятой обязательны! Результат такой:

Если все так, то все работает правильно. Иногда требуется запуск сервера Derby руками (если show tables тупит и выдает ошибку) с помощью команды startNetworkServer

Почему-то у меня получилось именно так, выдает ошибку:

FAILED: SemanticException org.apache.hadoop.hive.ql.metadata.HiveException: java.lang.RuntimeException: Unable to instantiate org.apache.hadoop.hive.ql.metadata.SessionHiveMetaStoreClient

Решение проблемы пока не нашел, поэтому запускаем еще один терминал CTRL+SHIFT+T и в нем запускаем startNetworkServer. Запустить новую консоль нужно, так как сервер блокирует вывод, можно запустить демоном, пока не пробовал. Мой результат на рисунке ниже.



Настройка мета-хранилища MySQL для Hive.

Как пишут в Интернете, Derby используется в тестовых сборках, в реальных кластерах используется метахранилище MySQL. Его настройкой мы и займемся в этом разделе.

1.Для начала необходимо проверить, установлена ли СУБД MySQL в вашей системе с помощью команды mysql. На серверных системах MySQL обычно в комплекте, почему для мастера выгодно использовать их.

Если "command not found", приступаем к установке, в противном случае пропускаем этот шаг и переходим на этап 2 (установка java-коннектора).

Установка MySQL: sudo apt-get install mysql-server

ВАЖНО!!!если в процессе установки у вас не был запрошен пароль для пользователя root, запускаем мастер настройки, в котором устанавливаем пароль. Обратите внимание на уровень безопасности, если выберете medium или strong, потом запаритесь устанавливать пароль для пользователя.

sudo mysql_secure_installation


Далее вводим новый пароль как показано на картинке и соглашаемся с изменениями, введя Y(y) и нажав Enter. Остальные настройки пропускаем через Enter.



После удачной установки входим в консоль mysql:

sudo mysql -u root -p


Вводим наш пароль по запросу системы, и если видим вывод как на картинке, продолжаем, все работает!


Выйти из консоли mysql


2. Устанавливаем mysql java коннектор:

sudo apt-get install libmysql-java


Тут проблем вроде никаких не возникает, поэтому создадим ссылку на коннектор командой:

ln -s /usr/share/java/mysql-connector-java.jar $HIVE_HOME/lib/mysql-connector-java.jar


3.Теперь настроим метахранилище Hive и создадим для него пользователя.

Войдем в консоль mysql и введем команды.

ВАЖНО!!!Для команд mysql точка с запятой в конце строки обязательна!

sudo mysql -u root -p

Enter password:


Вошли в консоль.

Создадим базу для метахранилища

mysql> CREATE DATABASE metastore;

mysql> USE metastore;


Создадим пользователя для базы данных, имя пользователя и пароль обязательно запомнить! Если при создании пользователя ругается на стойкость пароля, значит надо установить более сложный или изменить переменные mysql типа validate_password%

mysql> CREATE USER 'hiveuser'@'%' IDENTIFIED BY 'hivepassword';

mysql> GRANT all on *.* to 'hiveuser'@localhost identified by 'hivepassword';

mysql> flush privileges;


Теперь перейдем в настройки HIve. Для этого нужно внести изменения в файл hive-site.xml (создать из шаблона hive-default.xml.template):

sudo gedit $HIVE_HOME/conf/hive-site.xml


Следует отметить, что все свойства уже прописаны в файле, нужно лишь изменить значения, нужные подчеркнуты на картинке.



Так же добавить в начало следующие настройки дополнительных каталогов:

Значения переменных:

/tmp/hive/java

${user.name}

Теперь осталось только применить схему для метахранилища, это делается с помощью следующих команд:

cd $HIVE_HOME/bin/

schematool -dbType mysql -initSchema


На этом все готово, теперь можно запустить Hive и протестировать, запустив команды создания таблиц.

Возможные ошибки:

Exception in thread "main" java.lang.RuntimeException: org.apache.hadoop.hdfs.server.namenode.SafeModeException: Cannot create directory /tmp/hive/hduser/79c24ab4-e094-4079-85fc-2d8d632c8113. Name node is in safe mode.

Проблема: Name node работает в защищенном режиме.

Решение (в командной строке ОС): hdfs dfsadmin -safemode leave



org.apache.thrift.transport.TTransportException: Could not create ServerSocket on address 0.0.0.0/0.0.0.0:10002.

Проблема: Порт, прописанный в hive-site.xml, занят.

Решение: Изменить номер порта на другой.


Настройка клиент-серверного взаимодействия Hive (HiveServer2 и beeline).


В предыдущих разделах мы научились работать с таблицами hive локально с помощью командной строки hive.

В этом разделе мы настроим и запустим сервер hive (HiveServer2) в режиме thrift-http и подключимся к нему с помощью встроенного клиента beeline.


Настройка сервера HiveServer2.

В файл настроек Hadoop добавить переменные для доступа нашего пользователя к hive.

Открыть для редактирования файл core-site.xml в каталоге hadoop. В нашем случае команда такая:


sudo gedit $HADOOP_HOME/etc/hadoop/hadoop-2.9.1/core-site.xml


добавить в него переменные hadoop.proxyuser.hduser.hosts и hadoop.proxyuser.hduser.groups со значением * как показано на рисунке


Далее необходимо внести изменения в файл hive-site.xml.

В нем необходимо указать номер порта thrift-сервера, уровень логирования ошибок сервером, режим работы сервера (http или binary).

Мои настройки представлены на картинке:


Пройдемся по настройкам подробнее:

hive.server2.thrift.http.port- важный параметр, по номеру этого порта мы будем стучаться на сервер. Значение может быть произвольным, лишь бы порт был не занят. Если при попытке подключения будет выдаваться ошибка connection refused, необходимо изменить номер порта.

hive.server2.transport.mode- важный параметр, режим, в котором будет осуществляться взаимодействие, я выбрал http.

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

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

Все готово к запуску сервера. Запустим его как сервис с помощью команды:


cd $HIVE_HOME/bin

hive --service hiveserver2


Результат выполнения представлен на рисунке


Не забываем запустить hadoop!

Как мы видим, сервер блокирует командную строку, так как в ней будут отображаться результаты работы на стороне сервера, поэтому для дальнейшей работы необходимо открыть еще один терминал (Ctrl+Alt+t). Не забываем менять пользователя на hduser! (sudo su hduser)


Теперь запустим встроенный hive-клиент beeline.

Ремарка! Дабы не плодить терминалы и для удобства я решил воспользоваться удаленным терминалом для Windows - Putty. Поэтому далее скриншоты будут представлены в нем, но это тот же терминал, что и второй открытый в виртуалке, команды не отличаются.

Клиент beeline находится в каталоге $HIVE_HOME/bin

Запускается командой beeline


Мы вошли в командную строку клиента beeline, в которой уже будем набирать команды подключения к удаленной базе и команды работы с базами и таблицами.

Подключимся к серверу с помощью команды:


!connect jdbc:hive2://IP_адрес_сервера:10003/default;transportMode=http;httpPath=cliservice;

IP_адрес_сервера - здесь может быть и имя машины, к которой подключаемся, если есть DNS или соответствующая запись в файле hosts. На скриншоте у меня представлено имя.

Порт (:10003) - параметр указан в файле hive-site.xml

transportMode=http;httpPath=cliservice; - эти параметры также мы установили в hive-site.xml



Если вывод как на картинке, мы успешно подключились к базе! Для проверки работы можно набрать команду show tables; на что получим список таблиц и сервер в своем терминале ответит OK

Теперь мы научились удаленно подключаться к Hive.

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

Тематическая группа ВКонтакте

Комментарии

Комментировать могуть только зарегистрированные пользователи

Мы в социальных сетях
Перевести страницу (translate page)
Реклама