/docker-mysql-hdfs

Objetivo deste tópico é testar a importação de dados do servidor MySQL com Apache Sqoop para o HDFS no Apache Hadoop.

Primary LanguageJavaMIT LicenseMIT

Importando Dados do MySQL para o HDFS com Sqoop

Resumo

Esta página foi elaborada, com informações básicas, sobre como importar dados do MySQL para o HDFS com Apache Sqoop, em um ambiente de desenvolvimento e testes local.

Pré-requisitos:

Atenção:

O Sqoop versão 1.4.7 não é homologado para funcionar com Hadoop versão 3 ou superior. Por esse motivo, temos que incluir manualmente um pacote que está faltando, commons-lang-2.6, para que funcione normalmente.

Você pode baixar este pacote no endereço: https://github.com/dsacademybr/Libs

Descompacte o pacote e copie o arquivo commons-lang-2.6.jar para o diretório LIB do sqoop. No meu ambiente o sqoop foi instalado em /opt/sqoop.

$ cp commons-lang-2.6.jar /opt/sqoop/lib/

Você também precisa baixar e copiar o Connector/J 8.0.24 para a pasta LIB do Apache Sqoop

$ cp mysql-connector-java-8.0.24.jar /opt/sqoop/lib/

Importar dados MySQL e gravar no HDFS:

Para ilustração do exemplo de importação de dados no HDFS com Sqoop, criei previamente uma base de testes no MySQL com alguns registros.

Teste sua conexão

Testaremos a conexão do Sqoop com o banco de dados MySQL, criando uma "string" de conexão que liste todos os bancos de dados.

$ sqoop list-databases --connect jdbc:mysql://ip_servidor_mysql:3306/ --username seu_usuário -P

A conexão foi realizada com sucesso, os bancos de dados listados. Temos algumas mensagens de WARNINGS mas isto não é um problema, porque vamos conseguir realizar as operações de importações.

Importação dos dados

$ sqoop import --connect jdbc:mysql://ip_servidor_mysql:3306/banco_dados?serverTimezone=UTC \
               --username usuário -P \
               --table tabela_do_banco --m 1

O Sqoop conecta no banco de dados MySQL, executa um "select" na tabela indicada, gera um job mapreduce e envia para o HDFS, o Yarn gerencia a execução dos jobs, e a importação será realizada com sucesso.

Job enviado para HDFS

E lá está! job executado com sucesso.

HDFS

Agora, confirmaremos o JOB que foi gravado no HDFS.

$ hdfs dfs -ls /user/hadoop/pedido

E lá está! o job foi executado com sucesso e gravado no diretório /user/hadoop/pedido/part-m-00000

Baixaremos o arquivo gerado e gravado Hadoop HDFS no diretório da máquina local.

$ hdfs dfs -get /user/hadoop/pedido/part-m-00000

Listaremos o coteúdo do arquivo.

$ nano part-m-00000 

Eis um fragmento dos dados que foram importados do MySQL para o HDFS via Sqoop.

Finalizando, vou copiar os dados do container Hadoop para minha máquina local.

Copiar dados do Container Hadoop para máquina local.

Copiarei os dados, e o JOB que o Apache Sqoop gerou para gravar no HDFS. Como estou trabalhando em container Docker, uma das formas é listar os volumes compartilhados, para saber onde os arquivos do Hadoop foram gravados na máquina local.

$ docker volume ls
$ docker volume inspect hadoop_home

Lá está! o conteúdo do diretório home/hadoop do container está sendo gravado na máquina local em /var/lib/docker/volumes/hadoop_home/_data

Listagem do diretório compartilhado entre a máquina local e o container.

Copiaremos os aquivos: part-m-00000 onde foi gravado os dados da tabela do MySQL, e o arquivo pedido.java que é a classe java, que gerou o JOB mapreduce e que gravou os dados no HDFS.

$ sudo cp  /var/lib/docker/volumes/hadoop_home/_data/part-m-00000  ~/home/
$ sudo cp  /var/lib/docker/volumes/hadoop_home/_data/pedido.java  ~/home/

Feito! os arquivos foram copiados do "container" para máquina local.

Conclusão

Realizamos teste com Apache Sqoop, importamos tabela do servidor MySQL para o Apache Hadoop e gravamos os dados no HDFS. Por fim, copiamos os dados do container Hadoop para máquina local.

Apache Sqoop (TM) é uma ferramenta projetada para transferir dados em massa de maneira eficiente entre o Apache Hadoop e armazenamentos de dados estruturados, como bancos de dados relacionais.

Espero ter contribuido com o seu desenvolvimento de alguma forma.

Carlos Eugênio

Referências

Data Science Academy

Instalação e configuração do MySQL Communit Server no Linux com Docker

Instalação e Configuração de um container Docker Apache Hadoop

Dumping Data in SQL Format with mysqldump