Configuração de Cluster Distribuído com Hadoop 3.2.2 e Hive 3.1.3

Compatibilidade de Versões e Arquitetura

A partir da versão 3.2.3, o ecossistema Hadoop passou a exigir obrigatoriamente o JDK 11. No entanto, o Apache Hive 3.1.3 ainda apresanta dependências críticas do JDK 1.8. Para viabilizar a execução conjunta e estável de ambos os componentes, este guia detalha a implantação do Hadoop 3.2.2 em conjunto com o Hive 3.1.3, utilizando o Java 8 como base.

Topologia do Cluster

  • Nós: hadoop-master (Nó Mestre), hadoop-worker-1, hadoop-worker-2
  • Ambiente Java: JDK 1.8
  • Componentes: Hadoop 3.2.2, Hive 3.1.3, MySQL (para o Metastore)
  1. Configuração dos Arquivos do Hadoop

Assumindo que o Hadoop foi extraído para o diretório /opt/hadoop, edite os arquivos de configuração localizados em /opt/hadoop/etc/hadoop/.

hadoop-env.sh

Defina o caminho absoluto para o JDK 1.8.

export JAVA_HOME=/opt/jdk1.8

core-site.xml

Configure o diretório temporário, o esquema de arquivos padrão e o usuário estático da interface web.

<configuration>
    <property>
        <name>hadoop.tmp.dir</name>
        <value>/opt/hadoop/data/tmp</value>
    </property>
    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://hadoop-master:9820</value>
    </property>
    <property>
        <name>hadoop.http.staticuser.user</name>
        <value>root</value>
    </property>
</configuration>

hdfs-site.xml

Defina os endereços da interface web do NameNode e os diretórios de armazenamento para NameNode, DataNode e JournalNode.

<configuration>
    <property>
        <name>dfs.namenode.http-address</name>
        <value>hadoop-master:9870</value>
    </property>
    <property>
        <name>dfs.journalnode.edits.dir</name>
        <value>/opt/hadoop/data/hdfs/journal</value>
    </property>
    <property>
        <name>dfs.namenode.name.dir</name>
        <value>/opt/hadoop/data/hdfs/name</value>
    </property>
    <property>
        <name>dfs.datanode.data.dir</name>
        <value>/opt/hadoop/data/hdfs/data</value>
    </property>
</configuration>

yarn-site.xml

Configure o ResourceManager, os serviços auxiliares do NodeManager e a whitelist de variáveis de ambiente.

<configuration>
    <property>
        <name>yarn.resourcemanager.hostname</name>
        <value>hadoop-master</value>
    </property>
    <property>
        <name>yarn.nodemanager.aux-services</name>
        <value>mapreduce_shuffle</value>
    </property>
    <property>
        <name>yarn.nodemanager.env-whitelist</name>
        <value>JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CONF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_MAPRED_HOME</value>
    </property>
</configuration>

mapred-site.xml

Defina o framework de execução e os endereços do servidor de histórico de jobs.

<configuration>
    <property>
        <name>mapreduce.framework.name</name>
        <value>yarn</value>
    </property>
    <property>
        <name>mapreduce.jobhistory.address</name>
        <value>hadoop-master:10020</value>
    </property>
    <property>
        <name>mapreduce.jobhistory.webapp.address</name>
        <value>hadoop-master:19888</value>
    </property>
</configuration>

workers

Liste os hostnames dos nós que atuarão como DataNodes e NodeManagers.

hadoop-worker-1
hadoop-worker-2

  1. Ajuste de Permissões nos Scripts de Inicialização

Para evitar erros de permissão ao executar os serviços como root, insira as seguintes declarações no início das funções nos scripts localizados em /opt/hadoop/sbin/.

Em start-yarn.sh e stop-yarn.sh:

YARN_RESOURCEMANAGER_USER=root
HDFS_DATANODE_SECURE_USER=yarn
YARN_NODEMANAGER_USER=root

Em start-dfs.sh e stop-dfs.sh:

HDFS_DATANODE_USER=root
HDFS_DATANODE_SECURE_USER=hdfs
HDFS_NAMENODE_USER=root
HDFS_SECONDARYNAMENODE_USER=root

Após as modificações, sincronize o diretório do Hadoop para os nós workers:

rsync -avz /opt/hadoop/ root@hadoop-worker-1:/opt/hadoop/
rsync -avz /opt/hadoop/ root@hadoop-worker-2:/opt/hadoop/

  1. Formatação do NameNode e Inicialização

No nó mestre, formate o sistema de arquivos HDFS pela primeira vez:

/opt/hadoop/bin/hdfs namenode -format

Inicie os daemons do HDFS e YARN e valide os processos Java utilizando o comando jps em cada nó.

  1. Instalação e Configuração do Hive

Extraia o binário do Hive para /opt/hive.

hive-site.xml

Crie o arquivo em /opt/hive/conf/ para configurar a conexão com o banco de dados MySQL (Metastore) e a interface web do HiveServer2. Nota: A sintaxe XML foi corrigida e otimizada em relação a configurações padrão.

<configuration>
    <property>
        <name>javax.jdo.option.ConnectionURL</name>
        <value>jdbc:mysql://localhost:3306/hive_metastore?createDatabaseIfNotExist=true&amp;characterEncoding=UTF-8&amp;useSSL=false</value>
    </property>
    <property>
        <name>javax.jdo.option.ConnectionDriverName</name>
        <value>com.mysql.cj.jdbc.Driver</value>
    </property>
    <property>
        <name>javax.jdo.option.ConnectionUserName</name>
        <value>hive_admin</value>
    </property>
    <property>
        <name>javax.jdo.option.ConnectionPassword</name>
        <value>secure_password_123</value>
    </property>
    <property>
        <name>hive.server2.webui.host</name>
        <value>0.0.0.0</value>
    </property>
    <property>
        <name>hive.server2.webui.port</name>
        <value>10002</value>
    </property>
</configuration>

hive-env.sh

Adicione as variáveis de ambiente no final do arquivo /opt/hive/conf/hive-env.sh:

export HADOOP_HOME=/opt/hadoop
export HIVE_HOME=/opt/hive
export HIVE_CONF_DIR=/opt/hive/conf
export HIVE_AUX_JARS_PATH=/opt/hive/lib

hive-log4j2.properties

Renomeie o template de log e altere o diretório de saída:

mv /opt/hive/conf/hive-log4j2.properties.template /opt/hive/conf/hive-log4j2.properties

Edite o arquivo e defina:

property.hive.log.dir = /opt/hive/logs

  1. Variáveis de Ambiente Globais

Atualize o arquivo /etc/profile para incluir os binários do Hadoop e do Hive no PATH do sistema:

export JAVA_HOME=/opt/jdk1.8
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

export HADOOP_HOME=/opt/hadoop
export HIVE_HOME=/opt/hive
export HIVE_CONF_DIR=/opt/hive/conf

export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$HIVE_HOME/bin

Aplique as alterações com source /etc/profile.

  1. Execução do HiveServer2

Inicie o serviço do HiveServer2 em background ou em um terminal dedicado:

hive --service hiveserver2

A interface de monitoramento web estará acessível através de http://hadoop-master:10002.

Considerações de Rede e Firewalls

  • Resolução de Nomes: O arquivo /etc/hosts deve conter o mapeamento correto de IPs para os hostnames (hadoop-master, hadoop-worker-1, etc.), pois o ResourceManager utiliza esses nomes para identificar os nós.
  • Portas do NameNode: Libere a porta 9820 (RPC) e 9870 (HTTP). A ausência da porta HTTP impede a renderização dos DataNodes na interface web.
  • Portas do DataNode: A porta 9866 é utilizada para transferência de blocos. Deve ser liberada caso haja integração com motores de processamento externos, como o Apache Flink.

Tags: hadoop hive HDFS YARN Big-Data

Publicado em 7-28 07:28