Sqoop - Guia rápido

O sistema tradicional de gerenciamento de aplicativos, ou seja, a interação de aplicativos com banco de dados relacional utilizando RDBMS, é uma das fontes geradoras de Big Data. Tal Big Data, gerado por RDBMS, é armazenado no RelationalDatabase Servers na estrutura do banco de dados relacional.

Quando armazenamentos de Big Data e analisadores como MapReduce, Hive, HBase, Cassandra, Pig, etc. do ecossistema Hadoop entraram em cena, eles precisaram de uma ferramenta para interagir com os servidores de banco de dados relacional para importar e exportar o Big Data que residia neles. Aqui, o Sqoop ocupa um lugar no ecossistema Hadoop para fornecer interação viável entre o servidor de banco de dados relacional e o HDFS do Hadoop.

Sqoop - “SQL para Hadoop e Hadoop para SQL”

Sqoop é uma ferramenta projetada para transferir dados entre o Hadoop e os servidores de banco de dados relacional. Ele é usado para importar dados de bancos de dados relacionais como MySQL, Oracle para Hadoop HDFS e exportar do sistema de arquivos Hadoop para bancos de dados relacionais. É fornecido pela Apache Software Foundation.

Como funciona o Sqoop?

A imagem a seguir descreve o fluxo de trabalho do Sqoop.

Importação Sqoop

A ferramenta de importação importa tabelas individuais de RDBMS para HDFS. Cada linha em 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 em 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. Eles são lidos e analisados ​​em um conjunto de registros e delimitados com um delimitador especificado pelo usuário.

Como o Sqoop é um subprojeto do Hadoop, ele só pode funcionar no sistema operacional Linux. Siga as etapas abaixo para instalar o Sqoop em seu sistema.

Etapa 1: Verificação da instalação JAVA

Você precisa ter o Java instalado em seu sistema antes de instalar o Sqoop. Vamos verificar a instalação do Java usando o seguinte comando -

$ java –version

Se o Java já estiver instalado em seu sistema, você verá a seguinte resposta -

java version "1.7.0_71"
Java(TM) SE Runtime Environment (build 1.7.0_71-b13)
Java HotSpot(TM) Client VM (build 25.0-b02, mixed mode)

Se o Java não estiver instalado em seu sistema, siga as etapas abaixo.

Instalando Java

Siga as etapas simples fornecidas abaixo para instalar o Java em seu sistema.

Passo 1

Baixe o Java (JDK <versão mais recente> - X64.tar.gz) visitando o seguinte link .

Em seguida, jdk-7u71-linux-x64.tar.gz será baixado em seu sistema.

Passo 2

Geralmente, você pode encontrar o arquivo Java baixado na pasta Downloads. Verifique-o e extraia o arquivo jdk-7u71-linux-x64.gz usando os comandos a seguir.

$ cd Downloads/
$ ls
jdk-7u71-linux-x64.gz
$ tar zxf jdk-7u71-linux-x64.gz
$ ls
jdk1.7.0_71 jdk-7u71-linux-x64.gz

etapa 3

Para disponibilizar o Java a todos os usuários, você deve movê-lo para o local “/ usr / local /”. Abra o root e digite os seguintes comandos.

$ su
password:

# mv jdk1.7.0_71 /usr/local/java
# exitStep IV:

Passo 4

Para configurar as variáveis ​​PATH e JAVA_HOME, adicione os seguintes comandos ao arquivo ~ / .bashrc.

export JAVA_HOME=/usr/local/java
export PATH=$PATH:$JAVA_HOME/bin

Agora aplique todas as alterações no sistema em execução atual.

$ source ~/.bashrc

Etapa 5

Use os seguintes comandos para configurar alternativas Java -

# alternatives --install /usr/bin/java java usr/local/java/bin/java 2
# alternatives --install /usr/bin/javac javac usr/local/java/bin/javac 2
# alternatives --install /usr/bin/jar jar usr/local/java/bin/jar 2

# alternatives --set java usr/local/java/bin/java
# alternatives --set javac usr/local/java/bin/javac
# alternatives --set jar usr/local/java/bin/jar

Agora verifique a instalação usando o comando java -version do terminal conforme explicado acima.

Etapa 2: Verificar a instalação do Hadoop

O Hadoop deve ser instalado em seu sistema antes de instalar o Sqoop. Vamos verificar a instalação do Hadoop usando o seguinte comando -

$ hadoop version

Se o Hadoop já estiver instalado em seu sistema, você receberá a seguinte resposta -

Hadoop 2.4.1
--
Subversion https://svn.apache.org/repos/asf/hadoop/common -r 1529768
Compiled by hortonmu on 2013-10-07T06:28Z
Compiled with protoc 2.5.0
From source with checksum 79e53ce7994d1628b240f09af91e1af4

Se o Hadoop não estiver instalado em seu sistema, prossiga com as seguintes etapas -

Baixando Hadoop

Baixe e extraia o Hadoop 2.4.1 da Apache Software Foundation usando os comandos a seguir.

$ su
password:

# cd /usr/local
# wget http://apache.claz.org/hadoop/common/hadoop-2.4.1/
hadoop-2.4.1.tar.gz
# tar xzf hadoop-2.4.1.tar.gz
# mv hadoop-2.4.1/* to hadoop/
# exit

Instalando o Hadoop no modo pseudo-distribuído

Siga as etapas fornecidas abaixo para instalar o Hadoop 2.4.1 no modo pseudo-distribuído.

Etapa 1: Configurando o Hadoop

Você pode definir variáveis ​​de ambiente Hadoop anexando os seguintes comandos ao arquivo ~ / .bashrc.

export HADOOP_HOME=/usr/local/hadoop
export HADOOP_MAPRED_HOME=$HADOOP_HOME
export HADOOP_COMMON_HOME=$HADOOP_HOME
export HADOOP_HDFS_HOME=$HADOOP_HOME
export YARN_HOME=$HADOOP_HOME
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
export PATH=$PATH:$HADOOP_HOME/sbin:$HADOOP_HOME/bin

Agora, aplique todas as alterações no sistema em execução atual.

$ source ~/.bashrc

Etapa 2: configuração do Hadoop

Você pode encontrar todos os arquivos de configuração do Hadoop no local “$ HADOOP_HOME / etc / hadoop”. Você precisa fazer as alterações adequadas nesses arquivos de configuração de acordo com sua infraestrutura Hadoop.

$ cd $HADOOP_HOME/etc/hadoop

Para desenvolver programas Hadoop usando java, você deve redefinir as variáveis ​​de ambiente java em hadoop-env.sh substituindo o valor JAVA_HOME pela localização de java em seu sistema.

export JAVA_HOME=/usr/local/java

A seguir, está a lista de arquivos que você precisa editar para configurar o Hadoop.

core-site.xml

O arquivo core-site.xml contém informações como o número da porta usada para a instância do Hadoop, memória alocada para o sistema de arquivos, limite de memória para armazenar os dados e o tamanho dos buffers de leitura / gravação.

Abra o core-site.xml e adicione as seguintes propriedades entre as tags <configuration> e </configuration>.

<configuration>
   <property>
      <name>fs.default.name</name>
      <value>hdfs://localhost:9000 </value>
   </property>
</configuration>

hdfs-site.xml

O arquivo hdfs-site.xml contém informações como o valor dos dados de replicação, caminho do namenode e caminho do datanode de seus sistemas de arquivos locais. Significa o local onde você deseja armazenar a infraestrutura do Hadoop.

Vamos supor os seguintes dados.

dfs.replication (data replication value) = 1

(In the following path /hadoop/ is the user name.
hadoopinfra/hdfs/namenode is the directory created by hdfs file system.)
namenode path = //home/hadoop/hadoopinfra/hdfs/namenode

(hadoopinfra/hdfs/datanode is the directory created by hdfs file system.)
datanode path = //home/hadoop/hadoopinfra/hdfs/datanode

Abra este arquivo e adicione as seguintes propriedades entre as marcas <configuration>, </configuration> neste arquivo.

<configuration>
   <property>
      <name>dfs.replication</name>
      <value>1</value>
   </property>
   
   <property>
      <name>dfs.name.dir</name>
      <value>file:///home/hadoop/hadoopinfra/hdfs/namenode </value>
   </property>
   
   <property>
      <name>dfs.data.dir</name>
      <value>file:///home/hadoop/hadoopinfra/hdfs/datanode </value>
   </property>
</configuration>

Note - No arquivo acima, todos os valores de propriedade são definidos pelo usuário e você pode fazer alterações de acordo com sua infraestrutura Hadoop.

yarn-site.xml

Este arquivo é usado para configurar o yarn no Hadoop. Abra o arquivo yarn-site.xml e adicione as seguintes propriedades entre as marcas <configuration>, </configuration> neste arquivo.

<configuration>
   <property>
      <name>yarn.nodemanager.aux-services</name>
      <value>mapreduce_shuffle</value>
   </property>
</configuration>

mapred-site.xml

Este arquivo é usado para especificar qual estrutura MapReduce estamos usando. Por padrão, o Hadoop contém um modelo de yarn-site.xml. Primeiro de tudo, você precisa copiar o arquivo mapred-site.xml.template para o arquivo mapred-site.xml usando o seguinte comando.

$ cp mapred-site.xml.template mapred-site.xml

Abra o arquivo mapred-site.xml e adicione as seguintes propriedades entre as marcas <configuration>, </configuration> neste arquivo.

<configuration>
   <property>
      <name>mapreduce.framework.name</name>
      <value>yarn</value>
   </property>
</configuration>

Verificando a instalação do Hadoop

As etapas a seguir são usadas para verificar a instalação do Hadoop.

Etapa 1: configuração do nó de nome

Configure o namenode usando o comando “hdfs namenode -format” como segue.

$ cd ~
$ hdfs namenode -format

O resultado esperado é o seguinte.

10/24/14 21:30:55 INFO namenode.NameNode: STARTUP_MSG:
/************************************************************
STARTUP_MSG: Starting NameNode
STARTUP_MSG: host = localhost/192.168.1.11
STARTUP_MSG: args = [-format]
STARTUP_MSG: version = 2.4.1
...
...
10/24/14 21:30:56 INFO common.Storage: Storage directory
/home/hadoop/hadoopinfra/hdfs/namenode has been successfully formatted.
10/24/14 21:30:56 INFO namenode.NNStorageRetentionManager: Going to
retain 1 images with txid >= 0
10/24/14 21:30:56 INFO util.ExitUtil: Exiting with status 0
10/24/14 21:30:56 INFO namenode.NameNode: SHUTDOWN_MSG:
/************************************************************
SHUTDOWN_MSG: Shutting down NameNode at localhost/192.168.1.11
************************************************************/

Etapa 2: verificar Hadoop dfs

O seguinte comando é usado para iniciar o dfs. A execução desse comando iniciará seu sistema de arquivos Hadoop.

$ start-dfs.sh

A saída esperada é a seguinte -

10/24/14 21:37:56
Starting namenodes on [localhost]
localhost: starting namenode, logging to /home/hadoop/hadoop-
2.4.1/logs/hadoop-hadoop-namenode-localhost.out
localhost: starting datanode, logging to /home/hadoop/hadoop-
2.4.1/logs/hadoop-hadoop-datanode-localhost.out
Starting secondary namenodes [0.0.0.0]

Etapa 3: Verificando o script do Yarn

O seguinte comando é usado para iniciar o script yarn. Executar este comando iniciará seus daemons de yarn.

$ start-yarn.sh

A saída esperada é a seguinte -

starting yarn daemons
starting resourcemanager, logging to /home/hadoop/hadoop-
2.4.1/logs/yarn-hadoop-resourcemanager-localhost.out
localhost: starting node manager, logging to /home/hadoop/hadoop-
2.4.1/logs/yarn-hadoop-nodemanager-localhost.out

Etapa 4: Acessando o Hadoop no navegador

O número da porta padrão para acessar o Hadoop é 50070. Use a seguinte URL para obter serviços Hadoop em seu navegador.

http://localhost:50070/

A imagem a seguir descreve um navegador Hadoop.

Etapa 5: verificar todos os aplicativos do cluster

O número da porta padrão para acessar todos os aplicativos do cluster é 8088. Use o seguinte url para visitar este serviço.

http://localhost:8088/

A imagem a seguir descreve o navegador de cluster Hadoop.

Etapa 3: download do Sqoop

Podemos baixar a versão mais recente do Sqoop no link a seguir. Para este tutorial, estamos usando a versão 1.4.5, ou seja,sqoop-1.4.5.bin__hadoop-2.0.4-alpha.tar.gz.

Etapa 4: Instalando o Sqoop

Os comandos a seguir são usados ​​para extrair o tarball do Sqoop e movê-lo para o diretório “/ usr / lib / sqoop”.

$tar -xvf sqoop-1.4.4.bin__hadoop-2.0.4-alpha.tar.gz
$ su
password:

# mv sqoop-1.4.4.bin__hadoop-2.0.4-alpha /usr/lib/sqoop
#exit

Etapa 5: Configurando o bashrc

Você tem que configurar o ambiente Sqoop anexando as seguintes linhas a ~ /.bashrc arquivo -

#Sqoop
export SQOOP_HOME=/usr/lib/sqoop export PATH=$PATH:$SQOOP_HOME/bin

O seguinte comando é usado para executar ~ /.bashrc Arquivo.

$ source ~/.bashrc

Etapa 6: Configurando o Sqoop

Para configurar o Sqoop com Hadoop, você precisa editar o sqoop-env.sh arquivo, que é colocado no $SQOOP_HOME/confdiretório. Em primeiro lugar, redirecione para o diretório de configuração do Sqoop e copie o arquivo de modelo usando o seguinte comando -

$ cd $SQOOP_HOME/conf
$ mv sqoop-env-template.sh sqoop-env.sh

Abrir sqoop-env.sh e edite as seguintes linhas -

export HADOOP_COMMON_HOME=/usr/local/hadoop 
export HADOOP_MAPRED_HOME=/usr/local/hadoop

Etapa 7: Baixe e configure mysql-connector-java

Podemos baixar mysql-connector-java-5.1.30.tar.gzarquivo do link a seguir .

Os seguintes comandos são usados ​​para extrair o tarball mysql-connector-java e mover mysql-connector-java-5.1.30-bin.jar para o diretório / usr / lib / sqoop / lib.

$ tar -zxf mysql-connector-java-5.1.30.tar.gz
$ su
password:

# cd mysql-connector-java-5.1.30
# mv mysql-connector-java-5.1.30-bin.jar /usr/lib/sqoop/lib

Etapa 8: Verificando o Sqoop

O comando a seguir é usado para verificar a versão do Sqoop.

$ cd $SQOOP_HOME/bin
$ sqoop-version

Saída esperada -

14/12/17 14:52:32 INFO sqoop.Sqoop: Running Sqoop version: 1.4.5
Sqoop 1.4.5 git commit id 5b34accaca7de251fc91161733f906af2eddbe83
Compiled by abe on Fri Aug 1 11:19:26 PDT 2014

A instalação do Sqoop está concluída.

Este capítulo descreve como importar dados do banco de dados MySQL para o Hadoop HDFS. A 'ferramenta de importação' importa tabelas individuais de RDBMS para HDFS. Cada linha em uma tabela é tratada como um registro no HDFS. Todos os registros são armazenados como dados de texto nos arquivos de texto ou como dados binários em arquivos Avro e Sequence.

Sintaxe

A sintaxe a seguir é usada para importar dados para o HDFS.

$ sqoop import (generic-args) (import-args) 
$ sqoop-import (generic-args) (import-args)

Exemplo

Vamos dar um exemplo de três tabelas nomeadas como emp, emp_add, e emp_contact, que estão em um banco de dados denominado userdb em um servidor de banco de dados MySQL.

As três tabelas e seus dados são os seguintes.

emp:

Eu iria nome deg salário departamento
1201 gopal Gerente 50.000 TP
1202 manisha Leitor de prova 50.000 TP
1203 Khalil dev php 30.000 AC
1204 prasanth dev php 30.000 AC
1204 Kranthi admin 20.000 TP

emp_add:

Eu iria hno rua cidade
1201 288A vgiri alegria
1202 108I aoc segundo ruim
1203 144Z pgutta hid
1204 78B cidade Velha segundo ruim
1205 720X alta tecnologia segundo ruim

emp_contact:

Eu iria Phno o email
1201 2356742 [email protected]
1202 1661663 [email protected]
1203 8887776 [email protected]
1204 9988774 [email protected]
1205 1231231 [email protected]

Importando uma Tabela

A ferramenta Sqoop 'import' é usada para importar dados da tabela para o sistema de arquivos Hadoop como um arquivo de texto ou binário.

O seguinte comando é usado para importar o emp tabela do servidor de banco de dados MySQL para HDFS.

$ sqoop import \
--connect jdbc:mysql://localhost/userdb \
--username root \
--table emp --m 1

Se for executado com sucesso, você obterá a seguinte saída.

14/12/22 15:24:54 INFO sqoop.Sqoop: Running Sqoop version: 1.4.5
14/12/22 15:24:56 INFO manager.MySQLManager: Preparing to use a MySQL streaming resultset.
14/12/22 15:24:56 INFO tool.CodeGenTool: Beginning code generation
14/12/22 15:24:58 INFO manager.SqlManager: Executing SQL statement: 
   SELECT t.* FROM `emp` AS t LIMIT 1
14/12/22 15:24:58 INFO manager.SqlManager: Executing SQL statement: 
   SELECT t.* FROM `emp` AS t LIMIT 1
14/12/22 15:24:58 INFO orm.CompilationManager: HADOOP_MAPRED_HOME is /usr/local/hadoop
14/12/22 15:25:11 INFO orm.CompilationManager: Writing jar file: 
   /tmp/sqoop-hadoop/compile/cebe706d23ebb1fd99c1f063ad51ebd7/emp.jar
-----------------------------------------------------
-----------------------------------------------------
14/12/22 15:25:40 INFO mapreduce.Job: The url to track the job: 
   http://localhost:8088/proxy/application_1419242001831_0001/
14/12/22 15:26:45 INFO mapreduce.Job: Job job_1419242001831_0001 running in uber mode : 
   false
14/12/22 15:26:45 INFO mapreduce.Job: map 0% reduce 0%
14/12/22 15:28:08 INFO mapreduce.Job: map 100% reduce 0%
14/12/22 15:28:16 INFO mapreduce.Job: Job job_1419242001831_0001 completed successfully
-----------------------------------------------------
-----------------------------------------------------
14/12/22 15:28:17 INFO mapreduce.ImportJobBase: Transferred 145 bytes in 177.5849 seconds 
   (0.8165 bytes/sec)
14/12/22 15:28:17 INFO mapreduce.ImportJobBase: Retrieved 5 records.

Para verificar os dados importados no HDFS, use o seguinte comando.

$ $HADOOP_HOME/bin/hadoop fs -cat /emp/part-m-*

Isso mostra a você o emp os dados e campos da tabela são separados por vírgula (,).

1201, gopal,    manager, 50000, TP
1202, manisha,  preader, 50000, TP
1203, kalil,    php dev, 30000, AC
1204, prasanth, php dev, 30000, AC
1205, kranthi,  admin,   20000, TP

Importando para o diretório de destino

Podemos especificar o diretório de destino ao importar os dados da tabela para o HDFS usando a ferramenta de importação Sqoop.

A seguir está a sintaxe para especificar o diretório de destino como opção para o comando de importação do Sqoop.

--target-dir <new or exist directory in HDFS>

O seguinte comando é usado para importar emp_add dados da tabela no diretório '/ queryresult'.

$ sqoop import \
--connect jdbc:mysql://localhost/userdb \
--username root \
--table emp_add \
--m 1 \
--target-dir /queryresult

O seguinte comando é usado para verificar os dados importados no formulário de diretório / queryresult emp_add mesa.

$ $HADOOP_HOME/bin/hadoop fs -cat /queryresult/part-m-*

Ele irá mostrar os dados da tabela emp_add com campos separados por vírgulas (,).

1201, 288A, vgiri,   jublee
1202, 108I, aoc,     sec-bad
1203, 144Z, pgutta,  hyd
1204, 78B,  oldcity, sec-bad
1205, 720C, hitech,  sec-bad

Importar subconjunto de dados da tabela

Podemos 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.

A sintaxe da cláusula where é a seguinte.

--where <condition>

O seguinte comando é usado para importar um subconjunto de emp_adddados da tabela. A consulta do subconjunto é para recuperar a identificação e o endereço do funcionário que mora na cidade de Secunderabad.

$ sqoop import \
--connect jdbc:mysql://localhost/userdb \
--username root \
--table emp_add \
--m 1 \
--where “city =’sec-bad’” \
--target-dir /wherequery

O seguinte comando é usado para verificar os dados importados no diretório / wherequery do emp_add mesa.

$ $HADOOP_HOME/bin/hadoop fs -cat /wherequery/part-m-*

Vai te mostrar o emp_add dados da tabela com campos separados por vírgula (,).

1202, 108I, aoc,     sec-bad
1204, 78B,  oldcity, sec-bad
1205, 720C, hitech,  sec-bad

Importação Incremental

A importação incremental é uma técnica que importa apenas as linhas recém-adicionadas em uma tabela. É necessário adicionar as opções 'incremental', 'coluna de verificação' e 'último valor' para realizar a importação incremental.

A sintaxe a seguir é usada para a opção incremental no comando de importação do Sqoop.

--incremental <mode>
--check-column <column name>
--last value <last check column value>

Vamos supor que os dados recém-adicionados em emp a tabela é a seguinte -

1206, satish p, grp des, 20000, GR

O seguinte comando é usado para realizar a importação incremental no emp mesa.

$ sqoop import \
--connect jdbc:mysql://localhost/userdb \
--username root \
--table emp \
--m 1 \
--incremental append \
--check-column id \
-last value 1205

O seguinte comando é usado para verificar os dados importados de emp tabela para o diretório emp / HDFS.

$ $HADOOP_HOME/bin/hadoop fs -cat /emp/part-m-*

Isso mostra a você o emp dados da tabela com campos separados por vírgula (,).

1201, gopal,    manager, 50000, TP
1202, manisha,  preader, 50000, TP
1203, kalil,    php dev, 30000, AC
1204, prasanth, php dev, 30000, AC
1205, kranthi,  admin,   20000, TP
1206, satish p, grp des, 20000, GR

O seguinte comando é usado para ver as linhas modificadas ou adicionadas recentemente do emp mesa.

$ $HADOOP_HOME/bin/hadoop fs -cat /emp/part-m-*1

Ele mostra as linhas recém-adicionadas ao emp tabela com campos separados por vírgula (,).

1206, satish p, grp des, 20000, GR

Este capítulo descreve como 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 é igual ao nome da tabela.

Sintaxe

A seguinte sintaxe é usada para importar todas as tabelas.

$ sqoop import-all-tables (generic-args) (import-args) 
$ sqoop-import-all-tables (generic-args) (import-args)

Exemplo

Vamos dar um exemplo de importação de todas as tabelas do userdbbase de dados. A lista de tabelas que o banco de dadosuserdb contém é o seguinte.

+--------------------+
 |      Tables        |
 +--------------------+
 |      emp           |
 |      emp_add       |
 |      emp_contact   |
 +--------------------+

O seguinte comando é usado para importar todas as tabelas do userdb base de dados.

$ sqoop import-all-tables \
--connect jdbc:mysql://localhost/userdb \
--username root

Note - Se você estiver usando import-all-tables, é obrigatório que todas as tabelas desse banco de dados tenham um campo de chave primária.

O comando a seguir é usado para verificar todos os dados da tabela no banco de dados userdb no HDFS.

$ $HADOOP_HOME/bin/hadoop fs -ls

Ele irá mostrar a você a lista de nomes de tabelas no banco de dados userdb como diretórios.

Resultado

drwxr-xr-x - hadoop supergroup 0 2014-12-22 22:50 _sqoop
drwxr-xr-x - hadoop supergroup 0 2014-12-23 01:46 emp
drwxr-xr-x - hadoop supergroup 0 2014-12-23 01:50 emp_add
drwxr-xr-x - hadoop supergroup 0 2014-12-23 01:52 emp_contact

Este capítulo descreve como exportar dados de volta do HDFS para o banco de dados RDBMS. A tabela de destino deve existir no banco de dados de destino. Os arquivos fornecidos como entrada para o Sqoop contêm registros, que são chamados de linhas na tabela. Eles são lidos e analisados ​​em um conjunto de registros 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.

Sintaxe

A seguir está a sintaxe do comando de exportação.

$ sqoop export (generic-args) (export-args) 
$ sqoop-export (generic-args) (export-args)

Exemplo

Tomemos um exemplo dos dados do funcionário em arquivo, no HDFS. Os dados do funcionário estão disponíveis ememp_dataarquivo no diretório 'emp /' no HDFS. oemp_data é o seguinte.

1201, gopal,     manager, 50000, TP
1202, manisha,   preader, 50000, TP
1203, kalil,     php dev, 30000, AC
1204, prasanth,  php dev, 30000, AC
1205, kranthi,   admin,   20000, TP
1206, satish p,  grp des, 20000, GR

É obrigatório que a tabela a ser exportada seja criada manualmente e esteja presente no banco de dados de onde deve ser exportada.

A consulta a seguir é usada para criar a tabela 'funcionário' na linha de comando do mysql.

$ mysql
mysql> USE db;
mysql> CREATE TABLE employee ( 
   id INT NOT NULL PRIMARY KEY, 
   name VARCHAR(20), 
   deg VARCHAR(20),
   salary INT,
   dept VARCHAR(10));

O seguinte comando é usado para exportar os dados da tabela (que está em emp_data arquivo em HDFS) para a tabela de funcionários no banco de dados db do servidor de banco de dados Mysql.

$ sqoop export \
--connect jdbc:mysql://localhost/db \
--username root \
--table employee \ 
--export-dir /emp/emp_data

O seguinte comando é usado para verificar a tabela na linha de comando do mysql.

mysql>select * from employee;

Se os dados fornecidos forem armazenados com êxito, você poderá encontrar a seguinte tabela de dados de funcionários fornecidos.

+------+--------------+-------------+-------------------+--------+
| Id   | Name         | Designation | Salary            | Dept   |
+------+--------------+-------------+-------------------+--------+
| 1201 | gopal        | manager     | 50000             | TP     |
| 1202 | manisha      | preader     | 50000             | TP     |
| 1203 | kalil        | php dev     | 30000             | AC     |
| 1204 | prasanth     | php dev     | 30000             | AC     |
| 1205 | kranthi      | admin       | 20000             | TP     |
| 1206 | satish p     | grp des     | 20000             | GR     |
+------+--------------+-------------+-------------------+--------+

Este capítulo descreve como criar e manter os trabalhos do Sqoop. O trabalho do Sqoop cria e salva os comandos de importação e exportação. Ele especifica parâmetros para identificar e recuperar o trabalho salvo. Essa nova chamada ou reexecução é usada na importação incremental, que pode importar as linhas atualizadas da tabela RDBMS para o HDFS.

Sintaxe

A seguir está a sintaxe para criar um trabalho Sqoop.

$ sqoop job (generic-args) (job-args)
   [-- [subtool-name] (subtool-args)]

$ sqoop-job (generic-args) (job-args)
   [-- [subtool-name] (subtool-args)]

Criar Trabalho (--create)

Aqui estamos criando um trabalho com o nome myjob, que pode importar os dados da tabela da tabela RDBMS para o HDFS. O seguinte comando é usado para criar um trabalho que está importando dados doemployee mesa no db banco de dados para o arquivo HDFS.

$ sqoop job --create myjob \
-- import \
--connect jdbc:mysql://localhost/db \
--username root \
--table employee --m 1

Verificar trabalho (--list)

‘--list’O argumento é usado para verificar os trabalhos salvos. O comando a seguir é usado para verificar a lista de trabalhos salvos do Sqoop.

$ sqoop job --list

Mostra a lista de trabalhos salvos.

Available jobs: 
   myjob

Inspecionar trabalho (--show)

‘--show’O argumento é usado para inspecionar ou verificar trabalhos específicos e seus detalhes. O seguinte comando e saída de amostra são usados ​​para verificar um trabalho chamadomyjob.

$ sqoop job --show myjob

Mostra as ferramentas e suas opções, que são utilizadas em myjob.

Job: myjob 
 Tool: import Options:
 ---------------------------- 
 direct.import = true
 codegen.input.delimiters.record = 0
 hdfs.append.dir = false 
 db.table = employee
 ...
 incremental.last.value = 1206
 ...

Execute Job (--exec)

‘--exec’opção é usada para executar um trabalho salvo. O seguinte comando é usado para executar um trabalho salvo chamadomyjob.

$ sqoop job --exec myjob

Mostra a seguinte saída.

10/08/19 13:08:45 INFO tool.CodeGenTool: Beginning code generation 
...

Este capítulo descreve a importância da ferramenta 'codegen'. Do ponto de vista do aplicativo orientado a objetos, cada tabela de banco de dados tem uma classe DAO que contém os métodos 'getter' e 'setter' para inicializar objetos. Esta ferramenta (-codegen) gera a classe DAO automaticamente.

Gera classe DAO em Java, com base na estrutura do Esquema de Tabela. A definição Java é instanciada como parte do processo de importação. O principal uso desta ferramenta é verificar se o Java perdeu o código Java. Nesse caso, ele criará uma nova versão do Java com o delimitador padrão entre os campos.

Sintaxe

A seguir está a sintaxe do comando Sqoop codegen.

$ sqoop codegen (generic-args) (codegen-args) 
$ sqoop-codegen (generic-args) (codegen-args)

Exemplo

Vamos dar um exemplo que gera código Java para o emp mesa no userdb base de dados.

O seguinte comando é usado para executar o exemplo fornecido.

$ sqoop codegen \
--connect jdbc:mysql://localhost/userdb \
--username root \ 
--table emp

Se o comando for executado com sucesso, ele produzirá a seguinte saída no terminal.

14/12/23 02:34:40 INFO sqoop.Sqoop: Running Sqoop version: 1.4.5
14/12/23 02:34:41 INFO tool.CodeGenTool: Beginning code generation
……………….
14/12/23 02:34:42 INFO orm.CompilationManager: HADOOP_MAPRED_HOME is /usr/local/hadoop
Note: /tmp/sqoop-hadoop/compile/9a300a1f94899df4a9b10f9935ed9f91/emp.java uses or 
   overrides a deprecated API.
Note: Recompile with -Xlint:deprecation for details.

14/12/23 02:34:47 INFO orm.CompilationManager: Writing jar file: 
   /tmp/sqoop-hadoop/compile/9a300a1f94899df4a9b10f9935ed9f91/emp.jar

Verificação

Vamos dar uma olhada na saída. O caminho, que está em negrito, é o local onde o código Java doemptabela gera e armazena. Vamos verificar os arquivos naquele local usando os seguintes comandos.

$ cd /tmp/sqoop-hadoop/compile/9a300a1f94899df4a9b10f9935ed9f91/
$ ls
emp.class
emp.jar
emp.java

Se você deseja verificar em profundidade, compare o emp mesa no userdb banco de dados e emp.java no seguinte diretório

/ tmp / sqoop-hadoop / compile / 9a300a1f94899df4a9b10f9935ed9f91 /.

Este capítulo descreve como usar a ferramenta 'eval' do Sqoop. Ele permite que os usuários executem consultas definidas pelo usuário nos respectivos servidores de banco de dados e visualizem o resultado no console. Portanto, o usuário pode esperar que os dados resultantes da tabela sejam importados. Usando eval, podemos avaliar qualquer tipo de consulta SQL que pode ser uma instrução DDL ou DML.

Sintaxe

A sintaxe a seguir é usada para o comando Sqoop eval.

$ sqoop eval (generic-args) (eval-args) 
$ sqoop-eval (generic-args) (eval-args)

Selecione Avaliação de Consulta

Usando a ferramenta eval, podemos avaliar qualquer tipo de consulta SQL. Vamos dar um exemplo de seleção de linhas limitadas noemployee mesa de dbbase de dados. O comando a seguir é usado para avaliar o exemplo fornecido usando a consulta SQL.

$ sqoop eval \
--connect jdbc:mysql://localhost/db \
--username root \ 
--query “SELECT * FROM employee LIMIT 3”

Se o comando for executado com sucesso, ele produzirá a seguinte saída no terminal.

+------+--------------+-------------+-------------------+--------+
| Id   | Name         | Designation | Salary            | Dept   |
+------+--------------+-------------+-------------------+--------+
| 1201 | gopal        | manager     | 50000             | TP     |
| 1202 | manisha      | preader     | 50000             | TP     |
| 1203 | khalil       | php dev     | 30000             | AC     |
+------+--------------+-------------+-------------------+--------+

Inserir avaliação de consulta

A ferramenta Sqoop eval pode ser aplicável para modelagem e definição de instruções SQL. Isso significa que podemos usar eval para instruções de inserção também. O seguinte comando é usado para inserir uma nova linha noemployee mesa de db base de dados.

$ sqoop eval \
--connect jdbc:mysql://localhost/db \
--username root \ 
-e “INSERT INTO employee VALUES(1207,‘Raju’,‘UI dev’,15000,‘TP’)”

Se o comando for executado com êxito, ele exibirá o status das linhas atualizadas no console.

Ou então, você pode verificar a tabela de funcionários no console MySQL. O seguinte comando é usado para verificar as linhas deemployee mesa de db banco de dados usando select 'query.

mysql>
mysql> use db;
mysql> SELECT * FROM employee;
+------+--------------+-------------+-------------------+--------+
| Id   | Name         | Designation | Salary            | Dept   |
+------+--------------+-------------+-------------------+--------+
| 1201 | gopal        | manager     | 50000             | TP     |
| 1202 | manisha      | preader     | 50000             | TP     |
| 1203 | khalil       | php dev     | 30000             | AC     |
| 1204 | prasanth     | php dev     | 30000             | AC     |
| 1205 | kranthi      | admin       | 20000             | TP     |
| 1206 | satish p     | grp des     | 20000             | GR     |
| 1207 | Raju         | UI dev      | 15000             | TP     |
+------+--------------+-------------+-------------------+--------+

Este capítulo descreve como listar os bancos de dados 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. Depois disso, ele lista os bancos de dados presentes no servidor.

Sintaxe

A sintaxe a seguir é usada para o comando Sqoop list-databases.

$ sqoop list-databases (generic-args) (list-databases-args) 
$ sqoop-list-databases (generic-args) (list-databases-args)

Consulta de amostra

O seguinte comando é usado para listar todos os bancos de dados no servidor de banco de dados MySQL.

$ sqoop list-databases \
--connect jdbc:mysql://localhost/ \
--username root

Se o comando for executado com êxito, ele exibirá a lista de bancos de dados em seu servidor de banco de dados MySQL como segue.

...
13/05/31 16:45:58 INFO manager.MySQLManager: Preparing to use a MySQL streaming resultset.

mysql
test
userdb
db

Este capítulo descreve como listar as tabelas de um determinado banco de dados no servidor de banco de dados MySQL usando Sqoop. A ferramenta de tabelas de listas Sqoop analisa e executa a consulta 'SHOW TABLES' em um banco de dados específico. Depois disso, ele lista as tabelas presentes em um banco de dados.

Sintaxe

A sintaxe a seguir é usada para o comando Sqoop list-tables.

$ sqoop list-tables (generic-args) (list-tables-args) 
$ sqoop-list-tables (generic-args) (list-tables-args)

Consulta de amostra

O seguinte comando é usado para listar todas as tabelas no userdb banco de dados do servidor de banco de dados MySQL.

$ sqoop list-tables \
--connect jdbc:mysql://localhost/userdb \
--username root

Se o comando for executado com sucesso, ele exibirá a lista de tabelas no userdb banco de dados da seguinte forma.

...
13/05/31 16:45:58 INFO manager.MySQLManager: Preparing to use a MySQL streaming resultset.

emp
emp_add
emp_contact

Este capítulo descreve como listar as tabelas de um determinado banco de dados no servidor de banco de dados MySQL usando Sqoop. A ferramenta de tabelas de listas Sqoop analisa e executa a consulta 'SHOW TABLES' em um banco de dados específico. Depois disso, ele lista as tabelas presentes em um banco de dados.

Sintaxe

A sintaxe a seguir é usada para o comando Sqoop list-tables.

$ sqoop list-tables (generic-args) (list-tables-args) 
$ sqoop-list-tables (generic-args) (list-tables-args)

Consulta de amostra

O seguinte comando é usado para listar todas as tabelas no userdb banco de dados do servidor de banco de dados MySQL.

$ sqoop list-tables \
--connect jdbc:mysql://localhost/userdb \
--username root

Se o comando for executado com sucesso, ele exibirá a lista de tabelas no userdb banco de dados da seguinte forma.

...
13/05/31 16:45:58 INFO manager.MySQLManager: Preparing to use a MySQL streaming resultset.

emp
emp_add
emp_contact