Configurando a biblioteca Oracle no Sqoop
Post do meu blog antigo trazendo pro Medium…
Hoje vou falar um pouco sobre o Sqoop e a configuração das bibliotecas que fazem a comunicação dele com os bancos de dados relacionais, no exemplo vamos configurar a biblioteca do Oracle mas o exemplo é bem parecido com qualquer outra base relacional que ele tenha suporte como MySQL, SQL Server, Postgres e etc.
O que é o Sqoop?
Pra quem não sabe o que é, o Sqoop é uma ferramenta linha de comando que faz a migração dos dados de qualquer database (Oracle, SQLServer, MySQL, Postgres) para o HDFS. Foi lançada pela Cloudera e virou uma ferramenta muito utilizada no mercado.
Sendo assim vou passar o cenário, o uso do Sqoop é a fase numero um da disposição dos dados do Oracle no Cloudera/Bigdata, eu faço a importação de uma tabela, através de um “job sqoop”, onde com um usuário Oracle com privilégio de select nessa tabela, sendo assim dando as colunas, filtro a saída para um arquivo da minha escolha, podem ser os principais texto puro ou parquet. Com esse arquivo já disposto no HDFS, crio as minhas tabelas no Hive (Não relacional) ou no Kudu (Relacional), apontando para esses arquivos, o conceito fica o seguinte, o Hive e o Kudu só fazem o papel dos metadados, as selects e alterações são realizados na camada do HDFS, usando o Map Reduce e o Yarn. Esse é o ponto onde os bancos que usam HDFS ganham em relação aos bancos tradicionais, a computação clusterizada do HDFS, particionada e distribuída no cluster, traz grandes volumes de dados de forma mais rápida do que bancos tradicionais. Logo posto algo sobre o funcionamento do HDFS e vai ficar mais visível.
Então vamos a obra:
Estamos configurando o nosso Cloudera CDH 5.15.1, o mesmo vem o Sqoop Client (versão 1) e instalei o Sqoop server 2, realizamos a configuração de um job Sqoop com um servidor Oracle para a ingestão de dados no HDFS, porem como não temos a lib oracle tomamos o seguinte erro abaixo:
18/12/27 14:16:31 INFO oracle.OraOopManagerFactory: Data Connector for Oracle and Hadoop is disabled.
18/12/27 14:16:31 INFO manager.SqlManager: Using default fetchSize of 1000
18/12/27 14:16:31 INFO tool.CodeGenTool: Beginning code generation
18/12/27 14:16:31 ERROR sqoop.Sqoop: Got exception running Sqoop: java.lang.RuntimeException: Could not load db driver class: oracle.jdbc.OracleDriver
java.lang.RuntimeException: Could not load db driver class: oracle.jdbc.OracleDriver
at org.apache.sqoop.manager.OracleManager.makeConnection(OracleManager.java:290)
at org.apache.sqoop.manager.GenericJdbcManager.getConnection(GenericJdbcManager.java:52)
at org.apache.sqoop.manager.SqlManager.execute(SqlManager.java:762)
at org.apache.sqoop.manager.SqlManager.execute(SqlManager.java:785)
at org.apache.sqoop.manager.SqlManager.getColumnInfoForRawQuery(SqlManager.java:288)
at org.apache.sqoop.manager.SqlManager.getColumnTypesForRawQuery(SqlManager.java:259)
at org.apache.sqoop.manager.SqlManager.getColumnTypesForQuery(SqlManager.java:252)
at org.apache.sqoop.manager.ConnManager.getColumnTypes(ConnManager.java:342)
at org.apache.sqoop.orm.ClassWriter.getColumnTypes(ClassWriter.java:1858)
at org.apache.sqoop.orm.ClassWriter.generate(ClassWriter.java:1657)
at org.apache.sqoop.tool.CodeGenTool.generateORM(CodeGenTool.java:106)
at org.apache.sqoop.tool.ImportTool.importTable(ImportTool.java:494)
at org.apache.sqoop.tool.ImportTool.run(ImportTool.java:621)
at org.apache.sqoop.tool.JobTool.execJob(JobTool.java:244)
at org.apache.sqoop.tool.JobTool.run(JobTool.java:299)
at org.apache.sqoop.Sqoop.run(Sqoop.java:147)
at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:70)
at org.apache.sqoop.Sqoop.runSqoop(Sqoop.java:183)
at org.apache.sqoop.Sqoop.runTool(Sqoop.java:234)
at org.apache.sqoop.Sqoop.runTool(Sqoop.java:243)
at org.apache.sqoop.Sqoop.main(Sqoop.java:252)
Entramos no site da Oracle e vamos baixar a biblioteca:
Baixando a lib
Baixe a biblioteca no link abaixo:
https://www.oracle.com/technetwork/database/enterprise-edition/jdbc-112010-090769.html
Salvando o arquivo no diretório do Sqoop:
Como nós temos na mesma maquina tanto o sqoop server (sqoop2) como o sqoop client (sqoop) fazemos a copia para os 2 diretórios abaixo:
sqoop:
sudo cp ojdbc6.jar /var/lib/sqoop/
sqoop2:
sudo cp ojdbc6.jar /var/lib/sqoop2/
Mudando os privilégios do arquivo
sqoop:
sudo chown sqoop:sqoop /var/lib/sqoop/ojdbc6.jar
sqoop2:
sudo chown sqoop2:sqoop2 /var/lib/sqoop2/ojdbc6.jar
OBS: Assim tanto executando como sqoop ou sqoop2 temos a biblioteca que precisamos.
Configurando a variável do Java
Faço a configuração da variável global do Java (Java 8 no meu caso), no /etc/profile, assim todos os usuários quando logarem já terão a variável do Java setada inserindo as linhas abaixo no arquivo.
### Variavel do Java - Anselmo - 27.12.2018
### Inserida devido ao caso do Sqoop e a Necessidade do JRE
export JAVA_HOME=/etc/java/java8
Sendo assim o Job é executado com sucesso!
Espero que tenha ajudado!
Anselmo Borges