>> Apresentação e considerações

ChurrOpers!

Tenho vivenciado na prática esse mundo imenso que é o de Big Data, e presenciado de fato os ganhos que a sua adoção acarreta para o negócio independente de segmento.

Nesse artigo vou falar um pouco sobre o Sqoop, e serei direto na abordagem com informações que coletei para resolver um problema em um ambiente real voltado para o SQL Server.

Espero que apreciem!

>> Brevemente o que é o Sqoop?

O Sqoop é uma ferramenta que tem o o propósito de fazer ingestão de dados, seu foco é em transferir dados entre o Hadoop e bancos de dados relacionais ou mainframes. O seu nome é uma abreviação de “SQL to Hadoop”.

Você pode usar o Sqoop para importar e ou exportar dados de um banco de dados relacional (RDBMS), como MySQL, SQL Server, Oracle ou um mainframe por exemplo jogando para o Sistema de arquivos distribuídos do Hadoop (HDFS) ou Hive, transformar os dados em MapReduce e, em seguida, exportar os dados de volta para um RDBMS, fornecendo também como opção a execução em paralelo, bem como a tolerância a falhas.

>> Drivers para a conexão Sqoop/SQL Server

Geralmente os drivers pra Oracle e MySQL já vem por default em uma instalação base do Sqoop, mais para SQL Server precisamos baixar os drivers e inserir no diretório de lib do sqoop.

Microsoft JDBC Driver 6.0 para SQL Server

Esse é o driver oficial da Microsoft e funciona muito bem, porém durante os meus testes a conexão não funcionou quando o usuário do SQL Server foi criado no modo Windows Authentication.

Para download basta acessar o link abaixo:

https://www.microsoft.com/pt-BR/download/details.aspx?id=11774

Driver jTDS – JDBC 3.0 Para Windows Authentication

Após os testes identifiquei que o driver convencional não atendia quando a conexão era realizada via Windows Authentication, e “googlando” achei esse artigo que me deu uma luz me fornecendo uma alternativa que é utilizar o driver jTDS.

O jTDS é um driver JDBC 3.0 de código aberto 100% puro (tipo 4) para o Microsoft SQL Server (6.5, 7, 2000, 2005, 2008 e 2012) e Sybase Adaptive Server Enterprise (10, 11, 12 e 15). O jTDS é baseado em FreeTDS e atualmente é o driver JDBC pronto para produção para SQL Server e Sybase ASE.

Download driver jTDS

>> Copiando os drivers para o diretório lib

Localize o path onde estão localizadas as libs

Geralmente em uma instalação de Hortonworks o diretório pode ser encontrado no seguinte path: /usr/hdp/[version]/sqoop/lib/, em outras instalações como Cloudera por exemplo, pode ser encontrado em: /usr/lib/sqoop/lib, isso não é necessariamente uma regra, caso não esteja nesses caminhos, use o bom amigo find ou locate.

>> Validando a conexão

Para que a conexão ocorra primeiramente é necessário possuir um usuário que tenha no mínimo permissão de leitura no banco, ou seja, ele precisa conseguir visualizar o conteúdo das tabelas executando um SELECT por exemplo.

String de conexão JDBC com o domínio Windows Authentication

"jdbc:jtds:sqlserver://[host/ip]:[porta];useNTLMv2=true;domain=[dominio];databaseName=[nome da base]"

String de conexão JDBC com o domínio Local Authentication

"jdbc:jtds:sqlserver://[host|ip]:[porta];useNTLMv2=true;databaseName=[nome da base]"

Vou dar alguns exemplos de como o comando pode ser montado para atingir o resultado esperado, existem centenas de combinações que pode-se utilizar no Sqoop, nesse artigo não vou entrar em detalhes

Listar as tabelas de uma base com Windows Authentication

O output desse comando é a listagem de todas as tabelas do database que o usuário tem permissão para enxergar

sqoop list-tables \
--connect "jdbc:jtds:sqlserver://churropsdb:1433;useNTLMv2=true;domain=CHURROPS.CORP;databaseName=churrops" \
--driver net.sourceforge.jtds.jdbc.Driver \
--username churrops_user \
--password 'churrops123'

Realizando o import de todas as tabelas direto para o HDFS

Na parte do Import, o Sqoop realizará a conexão no SQL Server, e importará os dados para dentro do HDFS.

sqoop import-all-tables --connect "jdbc:jtds:sqlserver://churropsdb:1433;useNTLMv2=true;domain=CHURROPS.CORP;databaseName=churrops" \
--username churrops_user \
--password 'churrops123' \
--warehouse-dir /user/hive/warehouse/churrops.db \
--fields-terminated-by '|' \
--compress --compression-codec=snappy \
-m 1 \
--outdir /tmp/output-java-files

Provavelmente vou adicionando mais exemplos nesse mesmo artigo, mais por enquanto é isso!

>> Conclusão

A ferramenta em si é bem simples de usar, mais é claro que tomei um bom baile (hauahuahuahhua), mais após o temporal vem a bonança e tudo vai começando a fazer sentido, e acredito que esse artigo ainda possa ajudar pessoas que estejam querendo brincar um pouco com o Sqoop.

Meus agradecimentos ao Gabriel Pacheco e ao Wellington Hideki parceiros na Semantix que me ajudaram a entender um pouco melhor essa ferramenta.

>> Referências

Tem esse artigo sensacional do Eduardo Miranda:

http://www.bigdatabusiness.com.br/apache-sqoop-e-unificacao-de-dados/
Hive

E claro, as documentações oficiais!

https://sqoop.apache.org/docs/1.4.6/SqoopUserGuide.html
https://archive.cloudera.com/cdh/3/sqoop/SqoopUserGuide.html
https://br.hortonworks.com/apache/sqoop/
https://www.tutorialspoint.com/sqoop/index.htm