Tutorial de Instalação do Hive no Windows - WSL
1. Pré-requisitos
2.
MySQL
O Apache Hive requer um banco de dados relacional para criar seu Metastore (onde todos os metadados serão armazenados). Usaremos o MySQL.
Entrar no terminal Ubuntu
Faça download do mysql:
$ sudo apt-get install mysql-server
2.1. Configurar o mysql como metastore:
Atribui a senha no usuário
"root" do MySQL após a instalação. Esta senha não é a mesma do SO.
Para alterar a senha do usuário
"root" outra vez, terá que utilizar o parâmetro "-p":
$ mysql admin -u root -p password <senha>
Enter password: <nova_senha>
Feita a instalação e mudança de senha do
usuário "root", você estará apto a desenvolver o trabalho no seu
computador conectando normalmente ao MySQL.
Teste a instalação:
$ sudo mysql admin -p -u root -V
Se for disponibilizar o acesso ao banco para receber conexões de outras máquinas, atribui as permissões no usuário "root" do MySQL:
$ sudo mysql -u root # usar "sudo" pois é uma nova instalação
mysql> use mysql;
mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' WITH GRANT OPTION;
Criar e atribuir permissões ao usuário <seu_usuário>
mysql>
CREATE USER '<seu_usuário>'@'localhost' IDENTIFIED BY '<seu_usuário>';
mysql>
GRANT ALL PRIVILEGES ON *.* TO '<seu_usuário>'@'localhost' WITH GRANT
OPTION;
mysql>
CREATE USER '<seu_usuário>'@'%' IDENTIFIED BY '<seu_usuário>';
mysql>
GRANT ALL PRIVILEGES ON *.* TO '<seu_usuário>'@'%' WITH GRANT OPTION;
mysql>
flush privileges;
mysql>
exit;
Com as
permissões atribuídas no usuário "root" ou “<seu_usuário>”, ainda não está totalmente liberado para
poder fazer as conexões remotas no MySQL.
No meu caso, eu preferi criar o usuário emilia, senha emilia, para instalar o metastore e usar na configuração do Hive.
No arquivo "/etc/mysql/mysql.conf.d/mysqld.cnf ", na linha
bind-address, comente-o adicionando o "#", deixando a linha
assim:
# bind-address = 127.0.0.1
Restartar o mysql:
$ sudo service mysql restart
Conceder permissão total para os diretórios do mysql:
$ sudo chmod 1777 -R /var/log
Faça download do mysql connector.
A escolha do conector deve ser feita de acordo com a versão do Ubuntu. Neste tutorial: Ubuntu Linux 22.04.
O download do arquivo compactado foi feito pela URL: https://dev.mysql.com/downloads/connector/j/
Ver o conteúdo do arquivo:
$ dpkg --contents mysql-connector-j_9.5.0-1ubuntu22.04_all.deb
Descompactar (substituir /home/emila pelo caminho do arquivo baixado):
$ cd /
$ sudo dpkg -i /home/emilia/mysql-connector-j_9.5.0-1ubuntu22.04_all.deb
3.
Baixe e instale o HIVE
Para baixar
os binários do Apache Hive, execute os seguintes comandos.
$ wget https://downloads.apache.org/hive/hive-4.0.1/apache-hive-4.0.1-bin.tar.gz
· Descompacte e instale no diretório /opt/hadoop/hive (substitua /home/emilia pelo caminho onde se encontra o arquivo baixado):
$ cd /opt/hadoop
$
tar -xvzf /home/emilia/apache-hive-4.0.1-bin.tar.gz
$ sudo
mv apache-hive-4.0.1-bin hive
$ sudo chmod -R 777 hive
4. Configure as variáveis de ambiente
Após
extrair os arquivos do Hive, devemos configurar o Hive no .bashrc.
export HIVE_HOME=/opt/hadoop/hive
export HIVE_LIB=$HIVE_HOME/lib
export HIVE_BIN=$HIVE_HOME/bin
export HADOOP_USER_CLASSPATH_FIRST=true
export HADOOP_CLASSPATH=$HADOOP_CLASSPATH:$HIVE_HOME/lib
export CLASSPATH=$CLASSPATH:$HIVE_HOME/lib:$HIVE_HOME/conf
export PATH=$PATH:$HIVE_HOME/bin
Execute o .bashrc:
$ exec bash
Copiar
do diretório instalado para HIVE_HOME
$ sudo cp /usr/share/java/mysql-connector-j-9.5.0.jar $HIVE_HOME/lib
$ sudo chmod 777 /opt/hadoop/hive/lib/mysql-connector-j-9.5.0.jar
5. Configure o HIVE
5.1. Configurar o hive-env.sh
$ cd /opt/hadoop/hive/conf
$ mv hive-env.sh.template hive-env.sh
No hive-env.sh, inserir as seguintes
linhas:
export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64
export HIVE_CONF_DIR=/opt/hadoop/hive/conf
export HADOOP_HOME=/opt/hadoop
export HIVE_HOME=/opt/hadoop/hive
Criar os seguintes arquivos:
$ mv hive-log4j2.properties.template hive-log4j2.properties
$ mv beeline-log4j2.properties.template beeline-log4j2.properties
$ mv hive-exec-log4j2.properties.template hive-exec-log4j2.properties
Editar o arquivo hive-log4j2.properties e trocar o comando property.hive.log.level de INFO para WARN.
Editar o arquivo hive-exec-log4j2.properties nano hive-exec-log4j2.properties.template e trocar o comando property.hive.log.level de INFO para WARN.
5.2. Configurar o hive-site.xml
Agora,
vá para o diretório de configuração do Apache Hive (/opt/hadoop/hive/conf) e
crie um novo arquivo “hive-site.xml”. Devemos colar o seguinte código XML dentro
deste arquivo:
<?xml version="1.0"
encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl"
href="configuration.xsl"?> <configuration>
<property>
<name>hive.metastore.db.type</name>
<value>mysql</value>
<description>
Expects one of [derby, oracle, mysql, mssql,
postgres].
Type of
database used by the metastore. Information schema & JDBCStorageHandler
depend on it.</description>
</property>
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://localhost:3306/metastoredb?createDatabaseIfNotExist=true</value>
<description>JDBC
connect string for a JDBC metastore</description>
</property>
<property>
<name>javax.jdo.option.ConnectionDriverName</name>
<value>com.mysql.cj.jdbc.Driver</value>
<description>Driver
class name for a JDBC metastore</description>
</property>
<property>
<name>javax.jdo.option.ConnectionUserName</name>
<value>emilia</value>
</property>
<property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>emilia</value>
</property>
<property>
<name>hive.server2.enable.doAs</name>
<description>Enable
user impersonation for HiveServer2</description>
<value>false</value>
</property>
<property>
<name>hive.server2.authentication</name>
<value>NONE</value>
<description>
Client authentication types. NONE: no authentication</description>
</property>
<property>
<name>datanucleus.schema.autoCreateTables</name>
<value>true</value>
</property>
<property>
<name>hive.metastore.uris</name>
<value>thrift://localhost:9083</value>
<description>Thrift
URI for the remote metastore. Used by metastore client to connect to remote
metastore.</description>
</property>
<property>
<name>hive.metastore.event.db.notification.api.auth</name>
<value>false</value>
<description>
Should metastore do authorization against database notification
related APIs such as get_next_notification.
If set to true, then only the superusers in proxy settings have
the permission.</description>
</property>
<property>
<name>hive.metastore.warehouse.dir</name>
<value>/user/hive/warehouse</value>
</property>
<property>
<name>hive.server2.thrift.http.path</name>
<value>cliservice</value>
<description>The service
endpoint</description>
</property>
<property>
<name>hive.querylog.location</name>
<value>/opt/hadoop/hive/tmp</value>
<description>Location
of Hive run time structured log file</description>
</property>
<property>
<name>hive.exec.mode.local.auto</name>
<value>true</value>
</property>
<property>
<name>hive.exec.local.scratchdir</name>
<value>/opt/hadoop/hive/tmp</value>
<description>Local scratch space for Hive
jobs</description>
</property>
<property>
<name>hive.downloaded.resources.dir</name>
<value>/opt/hadoop/hive/tmp</value>
<description>Temporary
local directory for added resources in the remote file
system.</description>
</property>
<property>
<name>hive.server2.webui.host</name>
<value>0.0.0.0</value>
<description>The
host address the HiveServer2 WebUI will listen on</description>
</property>
<property>
<name>hive.server2.webui.port</name>
<value>10002</value>
<description>The
port the HiveServer2 WebUI will listen on. This can beset to 0 or a negative
integer to disable the web UI</description>
</property>
<property>
<name>hive.server2.webui.max.threads</name>
<value>100</value>
<description>The max HiveServer2 WebUI
threads</description>
</property>
<property>
<name>hive.server2.webui.use.ssl</name>
<value>false</value>
<description>Set
this to true for using SSL encryption for HiveServer2
WebUI.</description>
</property>
<property>
<name>hive.txn.stats.enabled</name>
<value>false</value>
</property>
<property>
<name>hive.stats.autogather</name>
<value>false</value>
</property>
<property>
<name>hive.log.explain.output</name>
<value>true</value>
<description>Enable view query
plan</description>
</property>
</configuration>
Nota: Substituir emilia pelo seu login e a password criada para o mysql.
6. Criar diretórios no Linux e no hdfs
$ sudo chmod -R 777 /opt/hadoop/hive/tmp
Inicie o
Hadoop e o Yarn se não estiverem iniciados:
$ start-yarn.sh
Crie os
diretórios:
$ hdfs dfs -mkdir /user/hive/
$ hdfs dfs -mkdir /user/hive/warehouse
$ hdfs dfs -chmod -R 777 /user/hive
$ hdfs dfs -chmod -R 777 /user/hive/warehouse
7. Iniciar o Metastore
7.1.
Criar variáveis de ambiente para o Hive
Vá para o seu diretório home:
$ cd
Insira as linhas que faltam no arquivo .bashrc:
export HIVE_HOME=/opt/hadoop/hive
export HIVE_LIB=$HIVE_HOME/lib
export HIVE_BIN=$HIVE_HOME/bin
export HADOOP_USER_CLASSPATH_FIRST=true
export
HADOOP_CLASSPATH=$HADOOP_CLASSPATH:$HIVE_HOME/lib
export
CLASSPATH=$CLASSPATH:$HIVE_HOME/lib:$HIVE_HOME/conf
export PATH=$PATH:$HIVE_HOME/bin
Execute o arquivo .bashrc:
$ exec bash
7.2.
Verificar se o Metastore existe
Usamos o comando schematool para verificar se o Metastore está criado.
Verificar schema no mysql:
$ schematool -dbType
mysql -info -verbose
Se a mensagem resultante mostrar que o Metastore não existe, criar com o comando abaixo (só executar uma única vez!!):
$ schematool -dbType mysql -initSchema
Verificar schema novamnte:
$ schematool -dbType mysql -info –verbose
Metastore connection URL: jdbc:mysql://localhost:3306/metastore?createDatabaseIfNotExist=true&useSSL=false&serverTimezone=UTC&allowPublicKeyRetrieval=true
Metastore connection User: emilia
Hive distribution version: 4.0.0
Metastore schema version: 4.0.0
Execute os comandos:
$ cd $HIVE_HOME/lib
$ sudo mv log4j-slf4j-impl-2.18.0.jar log4j-slf4j-impl-2.18.0.jarold
$ sudo cp /opt/hadoop/share/hadoop/hdfs/lib/guava-27.0-jre.jar
/opt/hadoop/hive/lib/
$ sudo mv guava-22.0.jar guava-22.0.jarold
OBS. Se tiver jline_xxx.jar diferente do
hive no yarn/lib, copie o mesmo do diretório lib do Hive para o yarn/lib, pois
dá erro!
Inicie o metastore:
tecle<Enter>
8. Iniciando o Hive
Execute o seguinte:
Tecle <Enter>
NOTA: Ao chamar o Hive, o sistema abre o Beeline porque a Interface de Linha de Comando (CLI) tradicional do Hive foi descontinuada em favor do Beeline, especialmente em versões mais recentes do Hive e das distribuições do Hadoop.
Podemos agora chamar o Hive/Beeline:
$ hive
!connect jdbc:hive2://localhost:10000
Quando pedir a password tecle sua password.
Comando para sair do beeline, digite:!q
Para rodar queries complexas, executar:
SET hive.auto.convert.join=false;
(ou colocar no hive-site.xml)
O funcionamento, configuração e status do Hive remoto (Beeline) pode ser visto pela WEB pela URL:http://localhost:10002