Aula 13 – Apache Sqoop – Hadoop e SGBDR

More videos
Views
   

Apache Sqoop

Ferramentas do ecossistema Hadoop para big data analytics

Mas afinal, o que é sqoop? Para que serve o sqoop? E quando devo usar o sqoop?

Espero que esse post deixe todas essas perguntas bem claras para vocês.

Então, vamos a um pouco de sua história.

O Apache Sqoop (TM) foi projetado para transferir com eficiência dados em massa entre o sistema Apache Hadoop e os armazenamentos de dados estruturados, como por exemplo, bancos de dados relacionais.

Ele consagrou-se com sucesso na incubadora do Apache em março de 2012 e agora é um projeto de alto nível do Apache.

O Sqoop é um subprojeto do Hadoop, ele só pode funcionar no sistema operacional Linux com o Hadoop instalado.

Nesse tutorial do ecossistema Hadoop, estamos usando uma máquina virtual da Cloudera já com todo o ecossistema instalado.

Esse é o link da documentação oficial:

http://sqoop.apache.org/

A figura abaixo mostra o propósito do spoop.

Propósito do sqoop

Propósito do sqoop

Importação Sqoop

A ferramenta de import, importa tabelas individuais do RDBMS para o HDFS.

Cada linha de uma tabela é tratada como um registro no HDFS.

Todos os registros são armazenados como dados de texto em arquivos de texto ou como dados binários nos arquivos Avro e Sequence.

Exportação Sqoop

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.

Delimitador de arquivo

Esses dados são lidos e analisados em um conjunto de registros e delimitados por um delimitador especificado pelo usuário.

Formatos de arquivos

Existem vários formatos de arquivo disponíveis ao gravar arquivos de dados no hdfs usando o Sqoop.

Os formatos de arquivos são: Avro, Parquet, Sequência e arquivo de texto.

Por padrão, o Sqoop usará -as-textfile se nenhum parâmetro for especificado.

O formato parquet, Avro e sequence são binários.

Avro é baseado em linha, o Parquet em colunas e o sequence em par chave-valor.

Se os seus dados consistem em muitas colunas, mas você está interessado em um subconjunto de colunas, você pode usar Parquet.

O Avro é rápido em recuperação, Parquet é muito mais rápido.

Avro

  • Amplamente utilizado como uma plataforma de serialização.
  • Baseado em linhas, oferece um formato binário compacto e rápido.
  • Possui uma especificação independente da linguagem, atualmente implementadas em C, Java, Ruby, Python e PHP. Um aplicativo baseado em Python pode ler e escrever diretamente em arquivos de dados Avro.
  • O esquema é codificado no arquivo para que os dados possam ser desmarcados.
  • Os arquivos suportam a compressão do bloco e podem ser divididos.
  • Suporta evolução do esquema.

Parquet

  • Formato binário baseado nas colunas.
  • Usa o algoritmo de desfiar(shredding) e montagem(assembly) descrito no trabalho Dremel (Análise interativa de conjuntos de dados em escala Web).
  • Cada arquivo de dados contém os valores de um conjunto de linhas.
  • Eficiente em termos de E / S de disco quando colunas específicas precisam ser consultadas.

Sequence

  • Formato de arquivo binário de pares chave-valor
  • Cada implementação armazenada nele são implementadas em Java.
  • Não há especificação de formato independente da implementação Java.

Para a parte prática, baixe a base de dados relacional retail_db.sql.

Ela é um arquivo zipado, você terá que unzipar ele depois de baixar.

Segue o link para download:

retail_db

Entre na pasta onde unzipou o arquivo, usando o comando:

cd /caminho/para/o/arquivo/

Usando o winscp ou putty, crie uma pasta no sistema local de arquivos da máquina cloudera para colocar o arquivo unzipado retail_db.sql.

Por exemplo, /relational_databases

Através do winscp, arraste o arquivo retail_db.sql do seu sistema, para dentro dessa pasta /relational_databases no sistema de arquivos local da máquina cloudera.

Lembrando que o usuário é root e a senha é cloudera, para a máquina cloudera.

Abra um terminal putty e entre na máquina cloudera.

Entre na pasta /relational_databases

cd /relational_databases

Através dele, explore a base relacional com o mysql dentro da máquina cloudera.

Para entrar no mysql use:

mysql -uroot -pcloudera

Pronto, você está no prompt do mysql.

Crie o banco retail_db com:

CREATE DATABASE retail_db;

Selecione esse banco:

USE retail_db;

Agora rode o comando para popular o banco com o script sql retail_db.sql:

source retail_db.sql

O banco vai ser populado.

Dê uma explorada no banco:

SHOW TABLES;

Saída:

+———————+
| Tables_in_retail_db |
+———————+
| categories |
| customers |
| departments |
| order_items |
| orders |
| products |
+———————+
6 rows in set (0.00 sec)

SELECT * FROM categories;

+————-+————————+———————-+
| category_id | category_department_id | category_name |
+————-+————————+———————-+
| 1 | 2 | Football |
| 2 | 2 | Soccer |
| 3 | 2 | Baseball & Softball |
| 4 | 2 | Basketball |
| 5 | 2 | Lacrosse |
| 6 | 2 | Tennis & Racquet |
| 7 | 2 | Hockey |
| 8 | 2 | More Sports |
| 9 | 3 | Cardio Equipment |
| 10 | 3 | Strength Training |
| 11 | 3 | Fitness Accessories |
| 12 | 3 | Boxing & MMA |
| 13 | 3 | Electronics |
| 14 | 3 | Yoga & Pilates |
| 15 | 3 | Training by Sport |
| 16 | 3 | As Seen on TV! |
| 17 | 4 | Cleats |
| 18 | 4 | Men’s Footwear |
| 19 | 4 | Women’s Footwear |
| 20 | 4 | Kids’ Footwear |
| 21 | 4 | Featured Shops |
| 22 | 4 | Accessories |
| 23 | 5 | Men’s Apparel |
| 24 | 5 | Women’s Apparel |
| 25 | 5 | Boys’ Apparel |
| 26 | 5 | Girls’ Apparel |
| 27 | 5 | Accessories |
| 28 | 5 | Top Brands |
| 29 | 5 | Shop By Sport |
| 30 | 6 | Men’s Golf Clubs |
| 31 | 6 | Women’s Golf Clubs |
| 32 | 6 | Golf Apparel |
| 33 | 6 | Golf Shoes |
| 34 | 6 | Golf Bags & Carts |
| 35 | 6 | Golf Gloves |
| 36 | 6 | Golf Balls |
| 37 | 6 | Electronics |
| 38 | 6 | Kids’ Golf Clubs |
| 39 | 6 | Team Shop |
| 40 | 6 | Accessories |
| 41 | 6 | Trade-In |
| 42 | 7 | Bike & Skate Shop |
| 43 | 7 | Camping & Hiking |
| 44 | 7 | Hunting & Shooting |
| 45 | 7 | Fishing |
| 46 | 7 | Indoor/Outdoor Games |
| 47 | 7 | Boating |
| 48 | 7 | Water Sports |
| 49 | 8 | MLB |
| 50 | 8 | NFL |
| 51 | 8 | NHL |
| 52 | 8 | NBA |
| 53 | 8 | NCAA |
| 54 | 8 | MLS |
| 55 | 8 | International Soccer |
| 56 | 8 | World Cup Shop |
| 57 | 8 | MLB Players |
| 58 | 8 | NFL Players |
+————-+————————+———————-+
58 rows in set (0.00 sec)

Vamos listar todos os bancos que existem no mysql da máquina cloudera, através do sqoop:


sqoop list-databases \
--connect "jdbc:mysql://localhost:3306" \
--username root \
--password cloudera

Saída:

information_schema
cm
firehose
hue
metastore
mysql
nav
navms
oozie
retail_db
rman
sentry

Esses são os bancos que já existem no mysql da máquina cloudera, inclusive o que criamos e populamos(retail_db).

Lembrando que você pode interagir através da interface web da máquina.

Antes, abra um shell na máquina virtual e dê um ifconfig para verificar se o ip é igual a esse abaixo (192.168.56.101) , senão, troque pelo que mostra no ifconfig.

Isso é explicado em detalhes na aula 03 do tutorial do Hadoop: https://www.codigofluente.com.br/configuracao-da-maquina-cloudera/

Então acesse no browser da sua máquina física esse ip na porta 8888:

http://192.168.56.101:8888/

Para listar as tabelas do retail_db use:

#Lista as tabelas do banco retail_db no mysql da máquina cloudera
sqoop list-tables \
--connect "jdbc:mysql://localhost:3306/retail_db" \
--username root \
--password cloudera

Importe a tabela departamento do mysql para o hadoop HDFS

#Importa a tabela departamento do mysql para o hadoop HDFS
sqoop import \
--connect "jdbc:mysql://localhost:3306/retail_db" \
--username=root \
--password=hadoop \
--table departments \
--as-textfile \
--target-dir=/user/root/departments

Esse comandos acima podem ocasionar dois problemas, pelo menos na máquina cloudera que estou usando deu.

Primeiro, o uso dá contra-barra (‘ \ ‘) para separar os comandos em várias linhas, deu problema, por isso, logo abaixo tem uma outra versão dos comandos acima, mas, inline, isto é, na mesma linha, sem usar o contra-barra.

#Importa a tabela departamento do mysql para o hadoop HDFS
sqoop import --connect "jdbc:mysql://localhost:3306/retail_db" --username=root --password=cloudera --table departments --as-textfile --target-dir=/user/root/departments

O outro problema é em relação ao accumulo, que é sistema de armazenamento distribuído que usa chave/valor com base na tecnologia BigTable do Google.

O erro foi: 

accumulo does not existAccumulo imports will fail.

Caso dê esse problema aí com você também, siga os seguintes passos usando o Putty.

  1. sudo mkdir /var/lib/accumulo
  2. ACCUMULO_HOME=’/var/lib/accumulo’
  3. export ACCUMULO_HOME

Ele definirá a variável de ambiente $ACCUMULO_HOME

E então execute novamente o:

#Importa a tabela departamento do mysql para o hadoop HDFS
sqoop import --connect "jdbc:mysql://localhost:3306/retail_db" --username=root --password=cloudera --table departments --as-textfile --target-dir=/user/root/departments

Ultrapassados esses pequenos problemas, vamos seguir.

O comando abaixo conta os registros de order_items (itens de pedido)


sqoop eval --connect "jdbc:mysql://localhost:3306/retail_db" --username root --password cloudera--query "select count(1) from order_items"

Importe todas as tabelas do mysql para o HDFS


sqoop import-all-tables \
--connect "jdbc:mysql://localhost:3306/retail_db" \
--username root \
--password cloudera \
--warehouse-dir /toti/retail_db/import-all-tables \
--driver com.mysql.jdbc.Driver

Na próxima aula continuaremos a explorar o sqoop.

Veremos como importar todas as tabelas do banco retail_db do mysql para o diretório /apps/hive/warehouse/

A gente também vai ver como importar os dados como avrodatafileas-textfile e as-sequencefile.

Curta a página do Código Fluente no Facebook
https://www.facebook.com/Codigofluente-338485370069035/

Meu link de referidos na digitalocean .

Quem se cadastrar por esse link, ganha $100.00 dólares de crédito na digitalocean:

Digital Ocean

E o da one.com:

One.com

Obrigado, até a próxima e bons estudos. 😉

(Visited 525 times, 1 visits today)
About The Author
-

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>