Notas de estudo de Big Data (7)

One, sqoop

sqoop é uma ferramenta de migração de dados de código aberto que pode importar e exportar dados entre Hive e RDMS. Ele também pode realizar a função de migração de dados entre HDFS e RDMS.
Insira a descrição da imagem aqui

1.1 O mecanismo de funcionamento do Sqoop

1.1.1 Mecanismo de importação

A operação de importação do Sqoop é importar dados RDBMS para HDFS.
Ao executar uma operação de importação, o Sqoop lerá as colunas e os tipos de dados da coluna na tabela por meio de JDBC e, em seguida, mapeará os tipos de dados lidos para os tipos de dados Java, e o MapReduce subjacente lerá do banco de dados por meio dos dados do objeto InputFormat e o O objeto DataDrivenDBInputFormat pode ser dividido em diferentes tarefas de mapa de acordo com os resultados da consulta e, finalmente, essas tarefas são enviadas ao cluster MapReduce para execução, e os resultados das tarefas de Mapa serão preenchidos nas instâncias correspondentes.

1.1.2 Mecanismo de exportação

A operação de exportação do Sqoop é exportar dados em HDFS para RDBMS. Antes de exportar, o Sqoop escolherá o método de exportação, geralmente JDBC, e então o Sqoop gerará uma classe Java que pode analisar os dados de texto no HDFS e inserir o valor correspondente na tabela. O método de exportação baseado em JDBC irá gerar várias instruções de inserção e cada instrução de inserção irá inserir várias partes de dados na tabela. Ao mesmo tempo, para garantir que diferentes I / Os possam ser executados em paralelo, ao ler dados do HDFS e se comunicar com o banco de dados, vários threads são iniciados para executar simultaneamente.

1.2 Instalação Sqoop

Endereço de download: http://archive.apache.org/dist/sqoop/, descompacte após o download.

1.2.1 Configuração Sqoop

cd /export/servers/sqoop-1.4.7/conf
cp sqoop‐env‐template.sh sqoop‐env.sh
vi sqoop-env.sh

Adicione o seguinte conteúdo ao arquivo sqoop-env.sh:

export HADOOP_COMMON_HOME/export/servers/hadoop‐3.1.1
export HADOOP_MAPRED_HOME=/export/servers/hadoop‐3.1.1
export HIVE_HOME=/export/servers/apache‐hive‐3.1.1‐bin

1.2.2 Adicionar pacote jar dependente

O Sqoop precisa adicionar o pacote de driver do banco de dados e o pacote de dependência de java-json. Depois de preparar os pacotes jar, adicione-os ao diretório lib do sqoop.

Depois que a adição for concluída, execute o seguinte comando para verificar se foi bem-sucedido:

cd /export/servers/sqoop-1.4.7/
bin/sqoop-version

1.3 Importação de dados

1.3.1 comando sqoop

  • Liste todos os bancos de dados no mysql:
bin/sqoop list‐databases ‐‐connect jdbc:mysql://192.168.31.7:3306/ ‐‐username root ‐‐password root
  • Verifique quais tabelas estão no banco de dados mysql:
bin/sqoop list‐tables ‐‐connect jdbc:mysql://192.168.31.7:3306/azkaban ‐‐username root ‐‐password root
  • Veja o documento de ajuda:
bin/sqoop list‐databases ‐‐help

1.3.2 Exemplo de importação

  • Dados da tabela:
create table emp(
	id int primary key auto_increment,
	name varchar(255) not null default '',
	dep varchar(20) default '',
	salary int default 0,
	dept char(2) default ''
);

create table emp_add(
	id int primary key auto_increment,
	hon varchar(20) not null default '',
	street varchar(20) default '',
	city varchar(20) default ''
);

create table emp_conn(
	id int primary key auto_increment,
	phone varchar(11) not null default '',
	email varchar(50) default ''
);

insert into emp values(1201, 'gopal', 'manager', 50000, 'TP');
insert into emp values(1202, 'manisha', 'proof reader', 50000, 'TP');
insert into emp values(1203, 'khalil', 'php dev', 30000, 'AC');
insert into emp values(1204, 'prasanth', 'php dev', 30000, 'AC');
insert into emp values(1205, 'kranthi', 'admin', 20000, 'TP');

insert into emp_add values(1201, '288A', 'vgiri', 'jublee');
insert into emp_add values(1202, '108I', 'aoc', 'sec-bad');
insert into emp_add values(1203, '144Z', 'pgutta', 'hyd');
insert into emp_add values(1204, '78B', 'old city', 'sec-bad');
insert into emp_add values(1205, '720X', 'hitec', 'sec-bad');

insert into emp_conn values(1201, '2356742', '[email protected]');
insert into emp_conn values(1202, '1661663', '[email protected]');
insert into emp_conn values(1203, '8887776', '[email protected]');
insert into emp_conn values(1204, '9988774', '[email protected]');
insert into emp_conn values(1205, '1231231', '[email protected]');

Comando de importação:

# 将emp表数据导入到HDFS中
bin/sqoop import ‐‐connect jdbc:mysql://192.168.31.7:3306/azkaban ‐‐password root ‐‐username root ‐‐table emp ‐‐m 1

Depois que a importação for bem-sucedida, execute o comando HDFS para visualizar o resultado da importação:

hdfs dfs -cat /user/root/emp/part*

Você também pode especificar o parâmetro -target-dir para especificar o diretório HDFS exportado. tal como:

bin/sqoop import --connect jdbc:mysql://192.168.31.7:3306/azkaban --username root --password root --delete-target-dir --table emp --target-dir /sqoop/emp -m 1

Por padrão, o sqoop usa uma vírgula "," para separar os dados em cada coluna. Se você deseja especificar o separador, pode especificar o parâmetro -fields-terminated-by. tal como:

bin/sqoop import --connect jdbc:mysql://192.168.31.7:3306/azkaban --username root --password  root --delete-target-dir --table emp --target-dir /sqoop/emp2 -m 1 --fields-terminated-by '\t'

Você também pode exportar dados para o Hive, as etapas de exportação:

  • Primeiro hive‐exec‐3.1.1.jarcopie o pacote para o diretório lib do sqoop;
cp /export/servers/apache‐hive‐3.1.1‐bin/lib/hive‐exec‐3.1.1.jar /export/servers/sqoop‐1.4.7/lib
  • Antes de exportar, você precisa criar as tabelas necessárias no hive;
create database sqooptohive;
use sqooptohive;
create external table emp_hive(id int,name string,dep string,salary int ,dept string) row format delimited fields terminated by '\001';
  • Executar operações de exportação;
bin/sqoop import ‐‐connect jdbc:mysql://192.168.31.7:3306/azkaban ‐‐username root ‐‐password root ‐‐table emp ‐‐fields‐terminated‐by '\001' ‐‐hive‐import ‐‐hive‐table sqooptohive.emp_hive ‐‐hive‐overwrite ‐‐delete‐target‐dir ‐‐m 1

Descrição do parâmetro ::
‐‐hive‐importEspecifique que o comando deve realizar a operação de importação
--hive-table;: O nome da tabela Hive a ser exportada ;:
--hive-overwriteEspecifique os dados de origem a serem substituídos ;: Especifique
-mquantas tarefas de mapa são executadas simultaneamente;

Você pode --hive-databaseimportar diretamente os dados do mysql e a estrutura da tabela para o hive especificando parâmetros;

bin/sqoop import ‐‐connect jdbc:mysql://192.168.31.7:3306/azkaban ‐‐username root ‐‐password root ‐‐table emp_conn ‐‐hive‐import ‐m 1 ‐‐hive‐database sqooptohive

Se você só precisa exportar dados que atendam às condições, você pode especificar --whereparâmetros.

bin/sqoop import --connect jdbc:mysql://192.168.31.7:3306/azkaban --username root --password root --table emp_add --target‐dir /sqoop/emp_add -m 1 --delete‐target‐dir --where "city = 'sec‐bad'"

Você também pode especificar --queryo comando SQL a ser executado especificando parâmetros.

bin/sqoop import --connect jdbc:mysql://192.168.31.7:3306/azkaban --username root --password root -m 1 --query 'select * from emp_add where city="sec-bad" and $CONDITIONS' --target-dir /sqoop/emp_add --delete-target-dir

Se você repetir o comando de importação acima, verá que a operação de importação subsequente substituirá os dados importados anteriormente. O Sqoop também oferece suporte para 增量导入que os dados importados posteriormente não substituam os dados importados anteriormente. Se você estiver usando uma importação incremental, você precisa especificar três --incrementalparâmetros: --check-column, --last-value,.

// 导入emp表中id大于1202的记录。
bin/sqoop import --connect jdbc:mysql://192.168.31.7:3306/azkaban --username root --password root --table emp --incremental append --check-column id --last-value 1202 -m 1 --target-dir /sqoop/increment

--whereUm controle mais preciso também pode ser obtido por meio de parâmetros.

bin/sqoop import --connect jdbc:mysql://192.168.31.7:3306/azkaban --username root --password root --table emp --incremental append --check-column id --where "id > 1202" -m 1 --target-dir /sqoop/increment

Nota: A importação incremental não pode especificar o parâmetro -delete-target-dir.

1.4 Exportação de dados

A exportação de dados é exportar dados de HDFS para RDMBS. O conteúdo dos dados exportados é o seguinte:
Insira a descrição da imagem aqui

Etapas de exportação de dados:

  • Passo 1: Crie uma tabela no banco de dados mysql Os campos da tabela devem ser iguais ao tipo e número de dados a serem exportados no HDFS;

Nota: Antes de realizar a exportação de dados, a tabela de destino já deve existir.

create table emp_out(id int, name varchar(100), dep varchar(50), sal int, dept varchar(10), create_time timestamp);
  • Etapa 2: Executar a exportação;
bin/sqoop export --connect jdbc:mysql://192.168.31.7:3306/azkaban --username root --password root --table emp_out --export-dir /sqoop/emp --input-fields-terminated-by ","

Acho que você gosta

Origin blog.csdn.net/zhongliwen1981/article/details/107342672
Recomendado
Clasificación