Cloudera Quickstart com Kerberos e Pentaho Data Integration – começando do zero

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:

001.png

  • Descompactar o arquivo

002.png

  • 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)

003.png

  • Clicar em importar appliance no menu File e depois localizar seu OVF

004.png

005.png

  • Configurar Memória RAM, número de processadores, local do disco (vmdk), DVD, etc.

006.png

  • 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.

007.png

008.png

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:

009.png

  • 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.

010.png

No final do script, deve aparecer o resultado, com a url de acesso ao Cloudera Manager, usuário e senha.

011.png

  • 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.

012.png

Após alguns minutos, os serviços devem estar com um sinal verde indicando que a tarefa de startup foi executada corretamente.

013.png

  • 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.

014.png

  • 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”

015.png

  • 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

016.png

  • Clique com o botão direito em Hadoop Clusters e escolha New Cluster;
  • Altere onde tem localhost para quickstart.cloudera;
  • Informe as credenciais do HDFS: cloudera/cloudera;
  • Altere a porta do oozie para 11000;
  • Clique em Test;

017.png

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;

018.png

  • 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á.

019.png

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.

020.png

Habilite o Kerberos no seu cluster

  • Entre no Cloudera Manager como admin/admin;
  • Vá em Administration > Security e clique em Enable Kerberos

021.png

  • 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

  • Instale o Kerberos – instalável no Linux, Windows e no Mac (que já traz instalado).

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

022.png

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 .*

023.png

  • Clique em Show Filename(s) – Você deve ver seu arquivo lá

024.png

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ê.


Se você ainda possui bastante dúvidas no Pentaho Data Integration, se liga que estamos com novidades por ai, em breve lançaremos nosso primeiro Curso Online de PDI, aproveita que tem desconto para quem fizer o pré-cadastro, basta clicar AQUI ou na imagem abaixo :)

Marcello Pontes
Analytics Architect & Front-ender at Oncase |