Quando um cluster E-MapReduce (EMR) executa vários serviços HiveServer2, é possível utilizar o ZooKeeper e o Server Load Balancer (SLB) para implementar o balanceamento de carga e distribuir a demanda entre múltiplos nós. Este tópico descreve como configurar e utilizar o balanceamento de carga do HiveServer2 em clusters padrão e com Kerberos ativado.
Limitações
Este tópico se aplica apenas a clusters com a opção High Service Availability ativada.
É necessário criar primeiro um cluster de alta disponibilidade. Para mais informações, consulte Criar um cluster. O recurso High Service Availability deve estar habilitado. Após a ativação, o E-MapReduce distribui os nós mestres por hardwares subjacentes diferentes para reduzir o risco de falhas.
Clusters padrão do E-MapReduce
Os métodos a seguir aplicam-se a clusters nos quais a Kerberos Authentication está desativada.
Balanceamento de carga via ZooKeeper
O ZooKeeper vem instalado por padrão em clusters de alta disponibilidade. Utilize o método abaixo para permitir que o ZooKeeper selecione uma instância do HiveServer2 para sua conexão, garantindo assim o balanceamento de carga.
Conecte-se ao cluster via SSH. Para mais informações, consulte Fazer login em um cluster.
-
Execute o comando a seguir. O ZooKeeper selecionará uma instância disponível do HiveServer2 para a conexão.
beeline -u 'jdbc:hive2://master-1-1:2181,master-1-2:2181,master-1-3:2181/;serviceDiscoveryMode=zooKeeper;zooKeeperNamespace=hiveserver2'NotaNo comando,
master-1-1:2181,master-1-2:2181,master-1-3:2181representa a string de conexão do ZooKeeper.Para permitir que o Hue se conecte à instância do HiveServer2 com balanceamento de carga, adicione os três parâmetros personalizados abaixo na aba hue da configuração do Hue.
Parâmetro
Descrição
zookeeper.clusters.default.hostports
String de conexão do ZooKeeper. Substitua o exemplo pelo seu valor real. Exemplo: master-1-1:2181,master-1-2:2181,master-1-3:2181.
beeswax.hive_discovery_hs2
Defina o valor como
true.beeswax.hive_discovery_hiveserver2_znode
Defina o valor como
/hiveserver2.
Balanceamento de carga via SLB
Crie uma instância do Server Load Balancer (SLB). Para mais informações, consulte Criar e gerenciar uma instância CLB.
-
Adicione as instâncias ECS que executam o serviço HiveServer2 ao default server group. Configure o peso de cada instância ECS conforme necessário.
Para mais informações, consulte Gerenciar um grupo de servidores padrão.
-
Configure um listener TCP. É possível personalizar a porta de frontend. Defina o Backend Protocol/Port como TCP:10000.
Escolha um algoritmo de agendamento de acordo com suas necessidades. Para mais informações, consulte Adicionar um listener TCP.
-
Conecte-se ao HiveServer2.
Acesse o cluster via SSH. Para mais detalhes, veja Fazer login em um cluster.
-
Execute o comando abaixo para se conectar aos serviços HiveServer2 por meio do balanceador de carga.
beeline -u 'jdbc:hive2://<slb_ip_or_host>:<slb_port>'Substitua os parâmetros a seguir pelos seus valores reais:
<slb_ip_or_host>: Endereço IP da instância SLB ou seu hostname vinculado.<slb_port>: Porta do listener de frontend da instância SLB.
Para configurar o Hue de modo que ele se comunique com o HiveServer2 através deste balanceador de carga, modifique os parâmetros abaixo na aba hue da configuração do Hue.
Parâmetro
Descrição
hive_server2_host
Endereço IP da instância SLB ou seu hostname vinculado.
hive_server2_port
Porta do listener de frontend da instância SLB.
Clusters E-MapReduce com Kerberos ativado
As instruções abaixo destinam-se a clusters com a Kerberos Authentication habilitada.
Balanceamento de carga via ZooKeeper
Execute o comando
kinitpara autenticar via Kerberos e obter um ticket-granting ticket. Para mais informações, consulte Usar autenticação Kerberos.-
Estabeleça a conexão com o HiveServer2.
Conecte-se ao cluster via SSH. Para mais informações, consulte Fazer login em um cluster.
-
Execute o seguinte comando. O ZooKeeper escolherá uma instância disponível do HiveServer2 para a conexão.
beeline -u 'jdbc:hive2://master-1-1:2181,master-1-2:2181,master-1-3:2181/;serviceDiscoveryMode=zooKeeper;zooKeeperNamespace=hiveserver2'NotaNeste comando,
master-1-1:2181,master-1-2:2181,master-1-3:2181corresponde à string de conexão do ZooKeeper.O Hue não oferece suporte à conexão com um HiveServer2 balanceado via ZooKeeper em clusters E-MapReduce com Kerberos ativado. Portanto, utilize o método SLB para conexões originadas do Hue.
Balanceamento de carga via SLB
Crie e configure a instância SLB conforme descrito na seção Clusters padrão do E-MapReduce. Em clusters com Kerberos ativado, também é necessário configurar o principal Kerberos usado pelo HiveServer2 para garantir uma conexão bem-sucedida.
Este exemplo considera que o endereço IP do SLB é 121,40.. e a porta do listener de frontend é 10000. Substitua esses valores pelos seus dados reais.
Execute o comando
kinitpara realizar a autenticação Kerberos e obter um ticket-granting ticket. Para mais detalhes, veja Usar autenticação Kerberos.-
Crie um principal do Hive para o endereço 121,40.. e exporte o keytab.
Faça login no nó master-1-1 do cluster. Para mais informações, consulte Fazer login em um cluster.
-
Execute o comando a seguir para acessar a ferramenta de administração do Kerberos:
kadmin.local -
Execute os comandos abaixo para criar o principal e exportá-lo para
/tmp/slb.keytab:addprinc -randkey hive/121.40.. xst -k /tmp/slb.keytab hive/121.40.**.** exitCaso seu cluster Kerberos do E-MapReduce esteja integrado a uma instância externa do MIT Kerberos, use
kadmin.localoukadminpara conectar-se ao KDC e executar os comandosaddprincexst.ImportanteExportar um keytab Kerberos várias vezes pode invalidar arquivos keytab anteriores. Certifique-se de que o arquivo
slb.keytabcontenha apenas o principal exportado mais recentemente. Se precisar exportar o principal novamente, exclua primeiro o arquivo keytab gerado anteriormente.
-
Transfira o arquivo
slb.keytabpara todos os nós que executam o serviço HiveServer2. Em seguida, em cada um desses nós, utilize a ferramenta ktutil para mesclar o conteúdo deslb.keytabno arquivo /etc/taihao-apps/hive-conf/keytab/hive.keytab executando os seguintes comandos:ktutil rkt /tmp/slb.keytab wkt /etc/taihao-apps/hive-conf/keytab/hive.keytab quit -
Execute o comando abaixo para visualizar o conteúdo do arquivo hive.keytab:
klist -kt /etc/taihao-apps/hive-conf/keytab/hive.keytab[root@master-1-1(172.16.xxx) ~]# klist -kt /etc/taihao-apps/hive-conf/keytab/hive.keytab Keytab name: FILE:/etc/taihao-apps/hive-conf/keytab/hive.keytab KVNO Timestamp Principal ---- ------------------- ------------------------------------------------------ 2 10/30/2024 14:12:05 hive/master-1-1.c-7d27ce0e7xxx.cn-hangzhou.emr.aliyuncs.com@EMR.C-7D27CE0E7xxx.COM 2 10/30/2024 14:12:05 hive/master-1-1.c-7d27ce0e7xxx.cn-hangzhou.emr.aliyuncs.com@EMR.C-7D27CE0E7xxx.COM 2 10/30/2024 14:12:06 hive/master-1-1.c-7d27ce0e7xxx.cn-hangzhou.emr.aliyuncs.com@EMR.C-7D27CE0E7xxx.COM 2 10/30/2024 14:12:06 hive/master-1-1.c-7d27ce0e7xxx.cn-hangzhou.emr.aliyuncs.com@EMR.C-7D27CE0E7xxx.COM 2 10/30/2024 14:12:06 hive/master-1-1.c-7d27ce0e7xxx.cn-hangzhou.emr.aliyuncs.com@EMR.C-7D27CE0E7xxx.COM 2 10/30/2024 14:12:06 hive/master-1-1.c-7d27ce0e7xxx.cn-hangzhou.emr.aliyuncs.com@EMR.C-7D27CE0E7xxx.COM 2 10/30/2024 14:26:56 hive/121.40.xxx @EMR.C-7D27CE0E77xxx.COM 2 10/30/2024 14:26:56 hive/121.40.xxx @EMR.C-7D27CE0E77xxx.COM 2 10/30/2024 14:26:56 hive/121.40.xxx @EMR.C-7D27CE0E77xxx.COM 2 10/30/2024 14:26:56 hive/121.40.xxx @EMR.C-7D27CE0E77xxx.COM 2 10/30/2024 14:26:56 hive/121.40.xxx @EMR.C-7D27CE0E77xxx.COM 2 10/30/2024 14:26:56 hive/121.40.xxx @EMR.C-7D27CE0E77xxx.COM 2 10/30/2024 14:26:56 hive/121.40.xxx @EMR.C-7D27CE0E77xxx.COM -
Modifique a configuração do Hive para o cluster.
No console EMR, acesse a aba Configure do serviço Hive. Pesquise o parâmetro hive.server2.authentication.kerberos.principal e altere seu valor para hive/121.40..@EMR...COM, que corresponde ao principal criado na etapa anterior. Em seguida, salve e aplique a configuração.
-
Reinicie o serviço HiveServer2.
No console EMR, vá até a aba Status do serviço Hive. Na linha referente ao HiveServer2, clique em Restart na coluna Actions.
Insira um motivo para a execução e clique em OK.
Na caixa de diálogo Confirm, clique em OK.
-
No nó master-1-1, execute o comando a seguir para conectar-se ao HiveServer2:
beeline -u 'jdbc:hive2://121.40.**.**:10000/default;principal=hive/121.40.**.**@EMR.**.COM'