Sqoop - Importar

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_adde 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