segunda-feira, 30 de novembro de 2015

Ingestão de Dados com SQOOP





SQOOP = SQL-to-Hadoop

é uma ferramenta de linha de comando desenvolvida para transferir dados entre cluster Hadoop e banco de dados de armazenamento estruturado bancos da dados relacionais (Oracle, DB2, Teradata, MySQL). 

Projeto foi iniciado em 2009 pela Cloudera e virou Top-level na ASF em 2012.

Definição de Ingestão de dados: 

É o processo de obtenção, importação e processamento para uso posterior em um repositório de dados (storage e banco de dados).

Esse processo geralmente envolve a alteração individual de arquivos editando o seu conteúdo e formatando a sua estrutura.

Objetivo

Tornar o Hadoop um componente central da infraestrutura de dados, facilitando o processo de import e export de/para banco de dados SQL.

Motivações:


  • Tornar o processo de transferência de dados de RDBMS SQL e Hadoop o mais transparente possível para o usuário.
  • Automatizar o processo de ingestão de tabelas de banco de dados relacionais.
  • Resolver os problemas de transferências de dados de sistemas externos para o Hadoop.
  • Facilitar a conexão com banco de dados por meio de conectores

Características do Sqoop

  • Realiza a leitura linha por linha da tabela para escrever o arquivo no HDFS.
  • O resultado do import é um conjunto de arquivos contendo a copia dos dados da tabela importada.
  • Gera classes Java para permitir o usuário interagir com o dado importado.
  • Pode importar dados e metadados de bancos de dados SQL direto para o Hive.
  • Utiliza MapReduce para realizar import / export dos dados, provendo um processamento paralelo e tolerante a falha.
  • Permite especificar o intervalo e quais colunas serão importadas.
  • Possibilita a especificação de delimitadores e formatos de arquivos.
  • Realiza conexões em bancos de dados em paralelo, executando comandos de Select (import) e Insert/Update (export).
  • Aceita conexão com diversos plug-ins: MySQL, PostgreSQL, Oracle, Teradata, Netezza, Vertica, DB2 e SQL Server.
  • O formato padrão do arquivo importado no HDFS é CSV.
  • Converte tipo dos campos.

Sqoop – Conectores e Drivers

  • Conector: É o componente da arquitetura que obtêm metadados sobre os dados transferidos (colunas, tipos, dentre outros) para tornar o processo de transferência mais eficiente. Geralmente é desenvolvido para ser utilizado em um banco de dados específico. É um plugin específico para o Sqoop. É possível realizar o download de conectores específicos de fornecedores de bancos de dados e instalar no Sqoop.
  • Driver: Se refere a JDBC driver. JDBC é uma API padrão Java para acesso a bancos de dados relacionais e alguns Data Warehouses. Cada fornecedor é responsável por implementar o seu próprio código para que o seu banco de dados possa se comunicar com outros componentes por meio do seu protocolo nativo. Os drivers adequados devem ser baixados e instalados no servidor onde está o Sqoop.

O Sqoop sempre irá verificar qual é o melhor conector para acessar os dados.

Exemplo: 

para jdbc:mysql:// url, Sqoop irá utilizar o MySQL Connector.
Se esse conector não estiver disponível, o Generic JDBC connector será utilizado.

Após escolher o conector, é necessário escolher o melhor Driver. Para o MySQL Connector
o melhor Driver será o MySQL JDBC Driver.

Sqoop – Opções para importar dados de uma tabela

sqoop import \

--connect jdbc:mysql://mysql.example.com/sqoop \

--username sqoop \

--password sqoop \

--table cities

--warehouse-dir /etl/input/
Permite especificar um diretório no HDFS como destino.

--where “country = ‘Brazil’”
Para importar apenas um subconjunto de registros de uma tabela.

-P ou –password-file my-sqoop-password

--as-sequencefile ou --as-avrodatafile
Para escrever o arquvo no HDFS em formato binário (Sequence ou Avro).

--compress
Comprime os blocos antes de gravar no HDFS em formato gzip por padrão.

--compression-codec
Utilizar outros codecs de compressão, exemplo:
org.apache.hadoop.io.compress.BZip2Codec.

--direct
Realiza import direto por meio das funcionalidades nativas do banco de dados para melhorar a performance, exemplo: mysqldump ou pg_dump.

--map-column-java c1=String
Especificar o tipo do campo.

--num-mappers 10
Especificar a quantidade de paralelismo para controlar o workload.

--null-string '\\N' \

--null-non-string '\\N‘

--incremental append ou lastmodified
Funcionalidade para incrementar os dados.

--check-column id ou last_update_date
Identifica a coluna que será verificada para incrementar novos dados.

--last-value 1 ou "2013-05-22 01:01:01"
Para especificar o último valor importado no Hadoop.

Sqoop – import incremental


  • Não é necessário realizar import de registros antigos ou já importados para o HDFS.
  • O Sqoop possui um controle incremental para importar somente registros novos.

– Baseado no último valor de uma determinada coluna.

sqoop import \
--connect jdbc:mysql://localhost/company \
--username twheeler --password bigsecret \
--warehouse-dir /mydata \
--table orders \
--incremental append \
--check-column order_id \
--last-value 6713821






























Nenhum comentário:

Postar um comentário

Faça o seu comentário e ganhe inteiramente grátis uma linda resposta!