Como estamos na linha de frente do suporte Pentaho no Brasil, vira e mexe a gente recebe perguntas e pedidos de ajuda sobre como conectar em clusters Hadoop – Cloudera, Hortonworks ou MapR – com o Pentaho Data Integration ou Pentaho Server. Recentemente ajudamos um parceiro nosso a conectar seu Pentaho num gigantesco cluster Cloudera com Kerberos configurado. Para isso, a gente criou, do zero, um mini cluster com essas características. Eis como foi feito.
Todo o tutorial foi feito usando o MacOS como sistema operacional Host, mas os mesmos conceitos são perfeitamente replicáveis em Linux e até em Windows.
Parte 01. Subindo um Cloudera Quickstart
A Cloudera disponibiliza o que talvez seja uma das formas mais fácieis de subir um ambiente de brincadeira de Hadoop. Indo NESSE SITE, voce baixa a VM Cloudera Quickstart, que pode ser adquirida através dos formatos:
- Docker
- VirtualBox
- VMWare
- KVM
Pra simplificar e manter as coisas mais estáveis, a gente vai usar aqui a versão VirtualBox dessa VM.
Dependências
- VirtualBox – Para o tipo de máquina virtual que a gente escolheu, VirtualBox, é preciso ir no site de downloads, baixar e instalar os binários na sua máquina.
Importando a VM
Considerando que o VirtualBox está instalado no seu PC, você vai:
- Baixar a VM quickstart CDH NESSE SITE;
- Descompactar o arquivo
- Mover os arquivos descompactados para o diretório onde você deseja armazenar os arquivos dessa VM (talvez você tenha um disco mais rápido ou com mais capacidade em outro local)
- Clicar em importar appliance no menu File e depois localizar seu OVF
- Configurar Memória RAM, número de processadores, local do disco (vmdk), DVD, etc.
- Esperar A VM ser importada;
- Configurar a rede para utilizar o modo Bridged – Você vai em Machine > Settings e vai procurar a aba Network. Lá, escolha Bridged adapter. Isso vai fazer com que sua VM pegue um IP da rede e facilitar na hora de acessar os serviços do Hadoop e Kerberos.
Bom, agora é hora de iniciar normalmente a sua VM.
Como a gente está configurando a VM no modo Bridged, algo que vai ajudar é, garantir que a maquina vai sempre pegar o mesmo endereço IP. Para garantir isso, você pode, opcionalmente, colocar uma reserva de IP no DHCP do seu roteador.
Para ver o MAC Address da sua VM, vá em Machine > Settings > Network > Advanced e copie o Mac Address da máquina virtual. Depois é só ir na pagina de administração do seu roteador, ir nas configurações de DHCP e designar para aquele MAC address, um IP fixo.
Utilizando pela primeira vez
Clique com o botão direito na sua VM recém criada e escolha Start para ela inicializar.
Quando ela inincializar, você deve ver uma tela como essa:
- Anote o endereço IP da máquina, isso vai ser importante depois (1).
Note também que no navegador há vários favoritos para endereços importantes de serviços do Hadoop.
- Vá no desktop e rode o script Launch Cloudera Express – Seja paciente durante este e outros processos. Alguns scripts e ações demoram alguns minutos para completarem e estabilizarem.
No final do script, deve aparecer o resultado, com a url de acesso ao Cloudera Manager, usuário e senha.
- Entre no cloudera manager – o link está nos favoritos do navegador. Informe as credenciais (user/pass):
cloudera / cloudera
- Inicie todos os serviços – No painel à esquerda, com a relação de serviços, clique no dropdown do “Cloudera Quickstart” e escolha start. Confirme, aguarde e observe.
Após alguns minutos, os serviços devem estar com um sinal verde indicando que a tarefa de startup foi executada corretamente.
- Adicione quickstart.cloudera no
/etc/hosts
da maquina host (a sua maqiuna real). Você deve adicionar uma linha o ip anotado em (1) e o hostname da maquina, da seguinte forma:
# Entrada para o Cloudera Quickstart
# 10.139.0.58 é o IP da sua VM (1)
10.139.0.58 quickstart.cloudera
Essa entrada no /etc/hosts vai fazer com que, toda vez que você procure pelo endereço de rede quickstart.cloudera
, a aplicação saiba que IP resolver.
- Da sua máquina host, teste o hostname com um ping:
$ ping quickstart.cloudera
# Resultado:
PING quickstart.cloudera (10.139.0.58): 56 data bytes
64 bytes from 10.139.0.58: icmp_seq=0 ttl=64 time=0.387 ms
64 bytes from 10.139.0.58: icmp_seq=1 ttl=64 time=0.438 ms
Conectando com o Pentaho Data Integration
Vamos considerar a utilização da versão Enterprise do Pentaho Data Integration e dividir essa etapa de configuração em 2 partes:
- Escolha da distribuição
- Colocação de arquivos para o shim (iremos repetir isso quando mudarmos para Kerberos)
- Configuração de permissões de escrita do usuário
- Teste do cluster no PDI
Para te ajudar, separamos 5 Dicas para melhorar sua experiência de uso do Spoon
Escolha da distribuição
- Inicie a interface do Pentaho Data Integration (Spoon);
- Abra a opção Select Hadoop Distribution… através do menu Tools;
- Na janela Hadoop Distribution, selecione “Cloudera CDH 5.12” e clique OK.
- Feche o Spoon e depois inicie novamente a interface.
Colocação de arquivos para o shim
- Vá até http://quickstart.cloudera:7180/ e faça login com
cloudera/cloudera
; - Da lista de serviços na coluna à esquerda da interface, clique em cima do nome do serviço HDFS;
- Clique em Actions e escolha a opção “Download Client Configuration”
- Descompacte os arquivos e salve todos (sobrescrevendo quando necessário) dentro de
data-integration/plugins/pentaho-big-data-plugin/hadoop-configurations/cdh512/
- Certifique-se de ir também nos serviços do Hive e do HBase para pegar arquivos de configuração. No final, você precisa copiar para a pasta do shim (
cdh512/
): - core-site.xml
- hbase-site.xml
- hdfs-site.xml
- hive-site.xml
- mapred-site.xml
- yarn-site.xml
- Feche o Spoon e depois inicie novamente a interface.
NOTA: Depois, que configurarmos o kerberos no servidor e no cliente, vamos fazer esse passo novamente.
Configuração de permissões do usuário cloudera
Nosso objetivo final aqui é a configuração de autenticação com o Kerberos, então pra manter a simplicidade agora, vamos fazer um permissionamento simples de escrita para o usuário cloudera, que não deve ser feito em produção.
Entre no terminal da máquina Quickstart
# Alterne para super usuario
sudo su
# Alterne para o usuario hdfs
su hdfs
# De permissão de escrita geral na pasta do cloudera
hadoop fs -chmod 777 /user/cloudera
Teste do cluster no PDI
- Crie uma nova transformação para habilitar os elementos da aba View
- Clique com o botão direito em Hadoop Clusters e escolha New Cluster;
- Altere onde tem
localhost
paraquickstart.cloudera
; - Informe as credenciais do HDFS:
cloudera/cloudera
; - Altere a porta do oozie para
11000
; - Clique em Test;
Ignore o erro que pode aparecer de permissão de acesso à pasta Home.
Agora nós vamos fazer uma transformação simples que joga dados no HDFS. Seguem os passos:
- Crie uma nova trnsformação no Pentaho Data Integration;
- Adicione o Step Generate Rows e coloque lá alguns campos de quaisquer tipos e peça para gerar 1000 linhas;
- Adicione o step Hadoop File Output e configure um hop saindo do Generate Rows para este novo step;
- Em Hadoop Cluster, escolha o cluster que você acabou de configurar;
- Adicione em Folder/File o caminho
/user/cloudera/output-test
; - Na aba Fields, pressione Get Fields, note que aparecem os campos que você configurou no Generate Rows e depois clique OK para fechar o step;
- Rode a transformação;
- Entre no navegador do Name Node (http://quickstart.cloudera:50070/explorer.html#/user/cloudera) e verifique que seu arquivo encontra-se lá.
Parte 02. Ativando o Kerberos no Cloudera
Instale o Kerberos dentro da VM
- Execute o script
sudo /home/cloudera/kerberos
e anote o resultado da saída – se der algum erro, apenas rode novamente que o erro não deve aparecer novamente.
Habilite o Kerberos no seu cluster
- Entre no Cloudera Manager como
admin/admin
; - Vá em Administration > Security e clique em Enable Kerberos
- Passo [1] – Marque as 4 opções e depois Continue
- Passo [2] – Configure:
- Mude o Kerberos Security Realm para o que o script informou (
CLOUDERA
) - Informe o KDC Server Host que o script informou (
quickstart.cloudera
) - Continue
- Passo [3] – Marque Manage krb5.conf through Cloudera Manager e Continue;
- Passo [4] – Informe o usuário e senha que o script gerou (user:
cloudera-scm/admin
, senha:cloudera
) - Passo [5] – Aguarde até aparecer
Successfully imported KDC Account Manager credentials
e depois Continue; - Passo [6] – Vai mostrar os Principals criados pra cada serviço – apenas Continue;
- Passo [7] – Marque Yes, I am ready to restart the cluster now. e Continue;
- Passo [8] – Aguarde O reinicio do cluster. Se algo der errado, você pode abrir o manager em outra aba, parar todos os serviços de uma vez, reiniciar o Cloudera Management Service e depois iniciar todos os serviços novamente.
Se você abrir o terminal agora e digitar:
hdfs dfs -ls /
Deverá aparecer um erro de permissão do Kerberos.
Adicionando um usuário Kerberos
# Você precisa de acesso root
sudo su
# Entra na adm do kerberos
kadmin.local
# Esse comando cadastra um usuario e pede pra digitar senha
addprinc marpontes@CLOUDERA
list_principals
# Sai da adm do kerberos
quit
# testa usuario - vai pedir senha
kinit marpontes@CLOUDERA
# Mostra informação de autenticação no Kerberos
klist
# Agora você também deve ser capaz de ler o hdfs
hdfs dfs -ls /
Agora nós precisamos criar uma pasta para o usuário no HDFS e configurar as permissões dele no cluster
# Localizar keytab do hdfs
sudo su # se ainda não tiver feito
find / -name '*hdfs.keytab'
# Escolher arquivo keytab e logar como hdfs
kinit -kt /var/run/cloudera-scm-agent/process/84-hdfs-NAMENODE/hdfs.keytab hdfs/quickstart.cloudera@CLOUDERA
# Agora você deve ver que está com ticket do hdfs/quickstart.cloudera@CLOUDERA
klist
# Criar os arquivos
hadoop fs -mkdir /user/marpontes
hadoop fs -chown marpontes /user/marpontes
# Testar acesso
kinit marpontes@CLOUDERA
hdfs dfs -ls /user/marpontes
# Verificar configuração do kerberos
vim /etc/krb5.conf
Parte 03. Configurando o PDI com Kerberos
Dependências
A única coisa que precisei fazer na minha distribuição do MacOS, foi alterar o arquivo /etc/krb5.conf
Configurando o Kerberos no cliente
- Edite o arquivo
/etc/krb5.conf
mantendo as configurações que você encontra no seu cluster – lembre-se de que ao final da configuração do usuário, nós verificamos o conteúdo desse arquivo no sistema do Hadoop.
Meu arquivo está da seguinte maneira:
[libdefaults]
default_realm = CLOUDERA
ticket_lifetime = 24h
renew_lifetime = 7d
forwardable = true
proxiable = true
rdns = false
default_tgs_enctypes = rc4-hmac
default_tkt_enctypes = rc4-hmac
permitted_enctypes = rc4-hmac
udp_preference_limit = 1
kdc_timeout = 3000
#default_ccache_name = KEYRING:persistent:%{uid}
[realms]
CLOUDERA = { kdc = quickstart.cloudera admin_server = quickstart.cloudera }
[domain_realm]
- Digite
kinit marpontes@CLOUDERA
e entre sua senha; - Digite
klist
e você deve ver um ticket válido
Configurando o PDI
- Execute novamente os passos descritos na seção Colocação de arquivos para o shim; Você deve sobrescrever novamente os arquivos:
- core-site.xml
- hbase-site.xml
- hdfs-site.xml
- hive-site.xml
- mapred-site.xml
- yarn-site.xml
- Abra o Pentaho Data Integration, vá até a tela de configuração do seu cluster e teste a conexão
Testando a escrita
- Agora abra a mesma transformação que você criou antes e substitua o caminho de saída do arquivo para
/user/marpontes/kerberos-write
Voilà
Agora você pode verificar que o arquivo está lá. Usando a linha de comando da sua máquina virtual ou memso o Pentaho Data Integration, como vamos demonstrar:
- Dentro da mesma transformação, adicione um novo step: “Hadoop File Input”
- Configure o Environment escolhendo seu cluster
- Adicione o caminho
/user/marpontes/
- Adicione o Wildcard
.*
- Clique em Show Filename(s) – Você deve ver seu arquivo lá
Conclusão
Esse setup é a mais básico e serve para garantir que as coisas estão funcionando, verificar o funcionamento de componentes e de rede. Em produção há outras configurações a serem feitas. A lista completa você encontra na documentação oficial da Pentaho – se for interessante para você, podemos continuar essa configuração aqui num cluster mais robusto. Essa conexão entre PDI e Hadoop com Kerberos é algo que sempre aparece para a gente e espero que tenhamos ajudado você.