Tutorial do Apache Sqoop - Importar / Exportar Dados entre HDFS e RDBMS



Tutorial do Apache Sqoop: Sqoop é uma ferramenta para transferência de dados entre Hadoop e bancos de dados relacionais. Este blog cobre importação e exportação Sooop do MySQL.

Antes de começar com este tutorial do Apache Sqoop, vamos dar um passo atrás. Você pode se lembrar da importância da ingestão de dados, conforme discutimos em nosso blog anterior em Apache Flume . Agora, como sabemos que o Apache Flume é uma ferramenta de ingestão de dados para fontes não estruturadas, mas as organizações armazenam seus dados operacionais em bancos de dados relacionais. Portanto, havia a necessidade de uma ferramenta que pudesse importar e exportar dados de bancos de dados relacionais. É por isso que o Apache Sqoop nasceu. O Sqoop pode se integrar facilmente com o Hadoop e despejar dados estruturados de bancos de dados relacionais no HDFS, complementando o poder do Hadoop. Isso é por que, exige um conhecimento sólido de Apache Sqoop e Flume.

Inicialmente, o Sqoop foi desenvolvido e mantido por Cloudera. Mais tarde, em 23 de julho de 2011, foi incubado pela Apache. Em abril de 2012, o projeto Sqoop foi promovido como o projeto de nível superior do Apache.





Neste blog tutorial do Apache Flume, iremos cobrir:



Começaremos este tutorial do Apache Sqoop apresentando o Apache Sqoop. Em seguida, avançando, entenderemos as vantagens de usar o Apache Sqoop.

Tutorial do Apache Sqoop: Introdução ao Sqoop

Apache Sqoop - Tutorial do Apache Sqoop - EdurekaGeralmente, os aplicativos interagem com o banco de dados relacional usando RDBMS e, portanto, isso torna os bancos de dados relacionais uma das fontes mais importantes de geração de Big Data. Esses dados são armazenados em servidores RDB na estrutura relacional. Aqui, o Apache Sqoop desempenha um papel importante na , fornecendo interação viável entre o servidor de banco de dados relacional e o HDFS.

Então, o Apache Sqoop é uma ferramenta em que é projetado para transferir dados entre HDFS (Armazenamento Hadoop) e servidores de banco de dados relacionais como MySQL, Oracle RDB, SQLite, Teradata, Netezza, Postgres etc. Apache Sqoop importa dados de bancos de dados relacionais para HDFS e exporta dados de HDFS para bancos de dados relacionais. Ele transfere dados em massa com eficiência entre o Hadoop e armazenamentos de dados externos, como data warehouses corporativos, bancos de dados relacionais, etc.



É assim que Sqoop ganhou seu nome - “ SQ L a Had Aberto & Hadoop para SQL ”.

Além disso, o Sqoop é usado para importar dados de armazenamentos de dados externos para as ferramentas do ecossistema Hadoop, como Colmeia E HBase .

diferença entre mutável e imutável

Agora, como sabemos o que é Apache Sqoop. Portanto, vamos avançar em nosso tutorial do Apache Sqoop e entender por que o Sqoop é usado extensivamente por organizações.

Tutorial do Apache Sqoop: Por que o Sqoop?

Para o desenvolvedor Hadoop, o jogo real começa depois que os dados são carregados no HDFS. Eles brincam com esses dados para obter vários insights ocultos nos dados armazenados no HDFS.

Portanto, para esta análise, os dados residentes nos sistemas de gerenciamento de banco de dados relacional precisam ser transferidos para o HDFS. A tarefa de escrever o código para importar e exportar dados do banco de dados relacional para o HDFS é desinteressante e tedioso. É aqui que o Apache Sqoop vem para resgatar e remover sua dor. Ele automatiza o processo de importação e exportação de dados.

O Sqoop facilita a vida dos desenvolvedores, fornecendo CLI para importação e exportação de dados. Eles só precisam fornecer informações básicas como autenticação do banco de dados, origem, destino, operações etc. Ele cuida do restante.

O Sqoop converte internamente o comando em tarefas MapReduce, que são então executadas no HDFS. Ele usa a estrutura YARN para importar e exportar os dados, o que fornece tolerância a falhas além do paralelismo.

Avançando neste blog de tutorial do Sqoop, entenderemos os principais recursos do Sqoop e, em seguida, passaremos para a arquitetura do Apache Sqoop.

Tutorial do Apache Sqoop: Principais recursos do Sqoop

O Sqoop oferece muitos recursos importantes, como:

  1. Carga máxima : Apache Sqoop pode carregar a tabela inteira por um único comando. Você também pode carregar todas as tabelas de um banco de dados usando um único comando.
  2. Incremental Carga : Apache Sqoop também fornece a facilidade de carregamento incremental onde você pode carregar partes da tabela sempre que ela for atualizada.
  3. Paralelo importar / exportar : Sqoop usa a estrutura YARN para importar e exportar os dados, o que fornece tolerância a falhas em cima do paralelismo.
  4. Importar resultados do SQL inquerir : Você também pode importar o resultado retornado de uma consulta SQL no HDFS.
  5. Compressão : Você pode compactar seus dados usando o algoritmo deflate (gzip) com o argumento –compress ou especificando o argumento –compression-codec. Você também pode carregar a tabela compactada em Apache Hive .
  6. Conectores para todos principal RDBMS Bancos de dados : Apache Sqoop fornece conectores para vários bancos de dados RDBMS, cobrindo quase toda a circunferência.
  7. Kerberos Segurança Integração : Kerberos é um protocolo de autenticação de rede de computador que funciona com base em 'tíquetes' para permitir que os nós se comuniquem em uma rede não segura para provar sua identidade uns aos outros de maneira segura. Sqoop oferece suporte à autenticação Kerberos.
  8. Carga dados diretamente para dentro HIVE / HBase : Você pode carregar dados diretamente no Apache Hive para análise e também despeje seus dados no HBase, que é um banco de dados NoSQL.
  9. Apoio, suporte para Acumulação : Você também pode instruir o Sqoop a importar a tabela no Accumulo em vez de um diretório no HDFS.

A arquitetura está capacitando o Apache Sqoop com esses benefícios. Agora, como conhecemos os recursos do Apache Sqoop, vamos seguir em frente e entender a arquitetura e o funcionamento do Apache Sqoop.

Tutorial do Apache Sqoop: Arquitetura e funcionamento do Sqoop

Vamos entender como o Apache Sqoop funciona usando o diagrama abaixo:

A ferramenta de importação importa tabelas individuais de RDBMS para HDFS. Cada linha em uma tabela é tratada como um registro no HDFS.

Quando enviamos o comando Sqoop, nossa tarefa principal é dividida em subtarefas que são tratadas por tarefas de mapa individuais internamente. Map Task é a subtarefa, que importa parte dos dados para o ecossistema Hadoop. Coletivamente, todas as tarefas de mapa importam todos os dados.

A exportação também funciona de maneira semelhante.

A ferramenta de exportação exporta um conjunto de arquivos do HDFS de volta para um RDBMS. Os arquivos fornecidos como entrada para o Sqoop contêm registros, que são chamados de linhas na tabela.

Quando enviamos nosso trabalho, ele é mapeado em tarefas de mapa que trazem o bloco de dados do HDFS. Esses chunks são exportados para um destino de dados estruturados. Combinando todos esses blocos de dados exportados, recebemos todos os dados no destino, que na maioria dos casos é um RDBMS (MYSQL / Oracle / SQL Server).

A fase de redução é necessária no caso de agregações. Porém, o Apache Sqoop apenas importa e exporta os dados, ele não realiza nenhuma agregação. O trabalho de mapa inicia vários mapeadores, dependendo do número definido pelo usuário. Para importação do Sqoop, cada tarefa do mapeador será atribuída com uma parte dos dados a serem importados. O Sqoop distribui os dados de entrada entre os mapeadores igualmente para obter alto desempenho. Em seguida, cada mapeador cria uma conexão com o banco de dados usando JDBC e busca a parte dos dados atribuída pelo Sqoop e os grava no HDFS ou Hive ou HBase com base nos argumentos fornecidos na CLI.

Agora que entendemos a arquitetura e o funcionamento do Apache Sqoop, vamos entender a diferença entre o Apache Flume e o Apache Sqoop.

Tutorial do Apache Sqoop: Flume vs Sqoop

A principal diferença entre Flume e Sqoop é que:

  • O Flume ingere apenas dados não estruturados ou dados semiestruturados no HDFS.
  • Enquanto o Sqoop pode importar e exportar dados estruturados de RDBMS ou armazéns de dados corporativos para HDFS ou vice-versa.

Agora, avançando em nosso Tutorial do Apache Sqoop, é a hora de passar pelos comandos do Apache Sqoop.

Tutorial do Apache Sqoop: Comandos do Sqoop

  • Sqoop - Comando IMPORT

O comando Import é usado para importar uma tabela de bancos de dados relacionais para o HDFS. Em nosso caso, vamos importar tabelas de bancos de dados MySQL para HDFS.

Como você pode ver na imagem abaixo, temos uma tabela de funcionários no banco de dados de funcionários que iremos importar para o HDFS.

O comando para importar a tabela é:

sqoop import --connect jdbc: mysql: // localhost / funcionários --username edureka --table funcionários

Como você pode ver na imagem abaixo, após executar este comando Map, as tarefas serão executadas no back end.

Depois que o código é executado, você pode verificar a IU da Web do HDFS, ou seja, localhost: 50070 para onde os dados são importados.

  • Sqoop - Comando IMPORT com diretório de destino

Você também pode importar a tabela em um diretório específico no HDFS usando o comando abaixo:

sqoop import --connect jdbc: mysql: // localhost / funcionários --username edureka --table funcionários --m 1 --target-dir / funcionários

O Sqoop importa dados em paralelo da maioria das fontes de banco de dados. -m propriedade é usada para especificar o número de mapeadores a serem executados.

O Sqoop importa dados em paralelo da maioria das fontes de banco de dados. Você pode especificar o número de tarefas de mapa (processos paralelos) a serem usados ​​para realizar a importação usando o -m ou –Num-mappers argumento. Cada um desses argumentos leva um valor inteiro que corresponde ao grau de paralelismo a ser empregado.

Você pode controlar o número de mapeadores independentemente do número de arquivos presentes no diretório. O desempenho da exportação depende do grau de paralelismo. Por padrão, o Sqoop usará quatro tarefas em paralelo para o processo de exportação. Isso pode não ser o ideal, você precisará experimentar sua própria configuração particular. Tarefas adicionais podem oferecer melhor simultaneidade, mas se o banco de dados já tiver gargalos na atualização de índices, na chamada de gatilhos e assim por diante, a carga adicional pode diminuir o desempenho.

Você pode ver na imagem abaixo que o número de tarefas do mapeador é 1.

O número de arquivos criados durante a importação de tabelas MySQL é igual ao número de mapeadores criados.

  • Sqoop - Comando IMPORT com cláusula Where

Você pode importar um subconjunto de uma tabela usando a cláusula ‘where’ na ferramenta de importação Sqoop. Ele executa a consulta SQL correspondente no respectivo servidor de banco de dados e armazena o resultado em um diretório de destino no HDFS. Você pode usar o seguinte comando para importar dados com ‘ Onde 'Cláusula:

sqoop import --connect jdbc: mysql: // localhost / funcionários --username edureka --table funcionários --m 3 --onde 'emp_no & gt 49000' --target-dir / Latest_Employees

  • Sqoop - Importação Incremental

O Sqoop fornece um modo de importação incremental que pode ser usado para recuperar apenas linhas mais recentes do que algum conjunto de linhas importado anteriormente. O Sqoop oferece suporte a dois tipos de importações incrementais: acrescentar e última modificação . Você pode usar o argumento –incremental para especificar o tipo de importação incremental a ser executada.

Você deve especificar acrescentar modo ao importar uma tabela onde novas linhas são continuamente adicionadas com valores crescentes de id de linha. Você especifica a coluna que contém o id da linha com –Check-column . O Sqoop importa linhas em que a coluna de verificação tem um valor maior do que aquele especificado com –Last-value .

Uma estratégia de atualização de tabela alternativa suportada pelo Sqoop é chamada última modificação modo. Você deve usar isso quando as linhas da tabela de origem puderem ser atualizadas, e cada atualização definirá o valor de uma coluna modificada pela última vez para o carimbo de data / hora atual.

Ao executar uma importação subsequente, você deve especificar –Last-value dessa forma, para garantir que você importe apenas os dados novos ou atualizados. Isso é tratado automaticamente pela criação de uma importação incremental como um trabalho salvo, que é o mecanismo preferido para realizar uma importação incremental recorrente.

Primeiro, estamos inserindo uma nova linha que será atualizada em nosso HDFS.

O comando para importação incremental é:

sqoop import --connect jdbc: mysql: // localhost / funcionários --username edureka --table funcionários --target-dir / Latest_Employees --incremental append --check-column emp_no --last-value 499999

Você pode ver na imagem abaixo, um novo arquivo é criado com os dados atualizados.

  • Sqoop - Importar todas as tabelas

Você pode importar todas as tabelas do servidor de banco de dados RDBMS para o HDFS. Cada dado da tabela é armazenado em um diretório separado e o nome do diretório é o mesmo que o nome da tabela. É obrigatório que todas as tabelas desse banco de dados tenham um campo de chave primária. O comando para importar todas as tabelas de um banco de dados é:

sqoop import-all-tables --connect jdbc: mysql: // localhost / workers --username edureka

  • Sqoop - Lista de bancos de dados

Você pode listar os bancos de dados presentes no banco de dados relacionado usando o Sqoop. A ferramenta de bancos de dados de lista do Sqoop analisa e executa a consulta ‘SHOW DATABASES’ no servidor de banco de dados. O comando para listar bancos de dados é:

sqoop list-databases --connect jdbc: mysql: // localhost / --username edureka

  • Sqoop - Listar tabelas

Você também pode listar as tabelas de um determinado banco de dados no servidor de banco de dados MySQL usando Sqoop. A ferramenta Sqoop list-tables analisa e executa a consulta ‘SHOW TABLES’. O comando para listar tabelas em um banco de dados é:

sqoop list-tables --connect jdbc: mysql: // localhost / workers --username edureka

  • Sqoop - Exportar

Como discutimos acima, você também pode exportar dados do HDFS para o banco de dados RDBMS. A tabela de destino deve existir no banco de dados de destino.Os dados são armazenados como registros no HDFS. Esses registros são lidos, analisados ​​e delimitados com um delimitador especificado pelo usuário.A operação padrão é inserir todos os registros dos arquivos de entrada na tabela do banco de dados usando a instrução INSERT. No modo de atualização, o Sqoop gera a instrução UPDATE que substitui o registro existente no banco de dados.

Então, primeiro estamos criando uma tabela vazia, para onde exportaremos nossos dados.

O comando para exportar dados do HDFS para o banco de dados relacional é:

sqoop export --connect jdbc: mysql: // localhost / funcionários --username edureka --table emp --export-dir / usuário / edureka / funcionários

  • Sqoop - Codegen

Em aplicativos orientados a objetos, cada tabela de banco de dados tem uma classe de objeto de acesso a dados que contém os métodos ‘getter’ e ‘setter’ para inicializar objetos. Codegen gera a classe DAO automaticamente. Ele gera classe DAO em Java, com base na estrutura do Esquema de Tabela.

O comando para gerar o código java é:

sqoop codegen --connect jdbc: mysql: // localhost / funcionários --username edureka --table funcionários

Você pode ver o caminho na imagem acima onde o código é gerado. Vamos percorrer o caminho e verificar os arquivos que são criados.

Espero que este blog seja informativo e agregue valor para você. Se você estiver interessado em aprender mais, pode passar por este que fala sobre Big Data e como o Hadoop está resolvendo desafios relacionados a Big Data.

Agora que você entendeu o Apache Sqoop, verifique o pela Edureka, uma empresa de aprendizagem online confiável com uma rede de mais de 250.000 alunos satisfeitos espalhados por todo o mundo. O curso Edureka Big Data Hadoop Certification Training ajuda os alunos a se tornarem especialistas em HDFS, Yarn, MapReduce, Pig, Hive, HBase, Oozie, Flume e Sqoop usando casos de uso em tempo real no varejo, mídia social, aviação, turismo, domínio financeiro.

Tem alguma questão para nós? Mencione isso na seção de comentários e entraremos em contato com você.