Resumen de uso de Sqoop

Resumen de uso de Sqoop

1. Comandos básicos de Sqoop

1. Ver todos los comandos

# sqoop help

Inserte la descripción de la imagen aquí

2. Ver el uso específico de un comando

# sqoop help 命令名

Dos, Sqoop y MySQL

1. Consultar todas las bases de datos MySQL

Generalmente se usa para probar la conexión entre Sqoop y MySQL:

sqoop list-databases \
--connect jdbc:mysql://hadoop001:3306/ \
--username root \
--password root

Inserte la descripción de la imagen aquí

2. Consultar todas las tablas de datos en la base de datos especificada

sqoop list-tables \
--connect jdbc:mysql://hadoop001:3306/mysql \
--username root \
--password root

3. Sqoop y HDFS

3.1 Importar datos de MySQL a HDFS

1. Importar comandos

Ejemplo: Exportar help_keywordtablas de base de datos MySQL al /sqoopdirectorio HDFS , el directorio existe si se introduce eliminar y luego se introduce, utilizando tres map tasksimportaciones paralelas.

Nota: help_keyword es una tabla de diccionario integrada en MySQL, y los siguientes ejemplos utilizan esta tabla.

sqoop import \
--connect jdbc:mysql://hadoop001:3306/mysql \     
--username root \
--password root \
--table help_keyword \           # 待导入的表
--delete-target-dir \            # 目标目录存在则先删除
--target-dir /sqoop \            # 导入的目标目录
--fields-terminated-by '\t'  \   # 指定导出数据的分隔符
-m 3                             # 指定并行执行的 map tasks 数量

Como salida de registro, los datos de entrada que se pueden ver son el promedio splitde tres, cada uno de los cuales consta de tres map taskprocesos. Los datos se dividen en función de la columna de clave principal de la tabla de forma predeterminada. Si su tabla no tiene una clave principal, hay dos opciones:

  • Agregue un -- autoreset-to-one-mapperparámetro representativo de solo un inicio map task, que no se ejecuta en paralelo;
  • Cuando aún se desea la ejecución en paralelo, es posible utilizar --split-by <column-name>una columna de referencia que indique los datos divididos.

Inserte la descripción de la imagen aquí

2. Verificación de importación

# 查看导入后的目录
hadoop fs -ls  -R /sqoop
# 查看导入内容
hadoop fs -text  /sqoop/part-m-00000

Verifique el directorio de importación de HDFS, puede ver que los datos en la tabla están divididos en 3 partes para el almacenamiento, que está determinado por el paralelismo especificado.

Inserte la descripción de la imagen aquí

3.2 Exportar datos HDFS a MySQL

sqoop export  \
    --connect jdbc:mysql://hadoop001:3306/mysql \
    --username root \
    --password root \
    --table help_keyword_from_hdfs \        # 导出数据存储在 MySQL 的 help_keyword_from_hdf 的表中
    --export-dir /sqoop  \
    --input-fields-terminated-by '\t'\
    --m 3 

La tabla debe crearse con anticipación y la declaración para construir la tabla es la siguiente:

CREATE TABLE help_keyword_from_hdfs LIKE help_keyword ;

Cuatro, Sqoop y Hive

4.1 Importar datos de MySQL a Hive

Sqoop para importar datos a Hive se introduce a través de los primeros datos a un directorio temporal en HDFS, luego los datos de HDFS Loada Hive y finalmente se elimina el directorio temporal. Puede usarse target-dirpara especificar un directorio temporal.

1. Importar comandos

sqoop import \
  --connect jdbc:mysql://hadoop001:3306/mysql \
  --username root \
  --password root \
  --table help_keyword \        # 待导入的表     
  --delete-target-dir \         # 如果临时目录存在删除
  --target-dir /sqoop_hive  \   # 临时目录位置
  --hive-database sqoop_test \  # 导入到 Hive 的 sqoop_test 数据库,数据库需要预先创建。不指定则默认为 default 库
  --hive-import \               # 导入到 Hive
  --hive-overwrite \            # 如果 Hive 表中有数据则覆盖,这会清除表中原有的数据,然后再写入
  -m 3                          # 并行度

Hive importado a la sqoop_testbase de datos debe crearse de antemano, no especifique el uso de Hive en la defaultbiblioteca predeterminada .

 # 查看 hive 中的所有数据库
 hive>  SHOW DATABASES;
 # 创建 sqoop_test 数据库
 hive>  CREATE DATABASE sqoop_test;

2. Verificación de importación

# 查看 sqoop_test 数据库的所有表
 hive>  SHOW  TABLES  IN  sqoop_test;
# 查看表中数据
 hive> SELECT * FROM sqoop_test.help_keyword;

Inserte la descripción de la imagen aquí

3. Posibles problemas

Inserte la descripción de la imagen aquí

Si se produce un error de ejecución java.io.IOException: java.lang.ClassNotFoundException: org.apache.hadoop.hive.conf.HiveConf, debe instalar el directorio Hive liben hive-exec-**.jarlugar de sqoop lib.

[root@hadoop001 lib]# ll hive-exec-*
-rw-r--r--. 1 1106 4001 19632031 11 月 13 21:45 hive-exec-1.1.0-cdh5.15.2.jar
[root@hadoop001 lib]# cp hive-exec-1.1.0-cdh5.15.2.jar  ${SQOOP_HOME}/lib

4.2 Exportar datos de Hive a MySQL

Dado que los datos de Hive se almacenan en HDFS, Hive importa datos a MySQL, que en realidad es HDFS importa datos a MySQL.

1. Ver la ubicación de almacenamiento de la tabla de Hive en HDFS

# 进入对应的数据库
hive> use sqoop_test;
# 查看表信息
hive> desc formatted help_keyword;

Location El atributo es su ubicación de almacenamiento:

Inserte la descripción de la imagen aquí

Aquí puede consultar este directorio, la estructura del archivo es la siguiente:

Inserte la descripción de la imagen aquí

3.2 Ejecutar comando de exportación

sqoop export  \
    --connect jdbc:mysql://hadoop001:3306/mysql \
    --username root \
    --password root \
    --table help_keyword_from_hive \
    --export-dir /user/hive/warehouse/sqoop_test.db/help_keyword  \
    -input-fields-terminated-by '\001' \             # 需要注意的是 hive 中默认的分隔符为 \001
    --m 3 

Las tablas en MySQL deben crearse de antemano:

CREATE TABLE help_keyword_from_hive LIKE help_keyword ;

Five, Sqoop y HBase

Esta sección solo explica la importación de datos de RDBMS a HBase, porque no hay un comando para exportar datos directamente de HBase a RDBMS.

5.1 Importar datos de MySQL a HBase

1. Importar datos

Los help_keyworddatos de importación en la tabla La tabla HBase help_keyword_hbase, utilizando la clave maestra de la tabla original, help_keyword_idya que RowKeytoda la tabla original se enumera en keywordInfoel grupo de columnas, solo admite la columna completa en el siguiente grupo, el grupo no admite columnas designadas.

sqoop import \
    --connect jdbc:mysql://hadoop001:3306/mysql \
    --username root \
    --password root \
    --table help_keyword \              # 待导入的表
    --hbase-table help_keyword_hbase \  # hbase 表名称,表需要预先创建
    --column-family keywordInfo \       # 所有列导入到 keywordInfo 列族下 
    --hbase-row-key help_keyword_id     # 使用原表的 help_keyword_id 作为 RowKey

La tabla de HBase importada debe crearse de antemano:

# 查看所有表
hbase> list
# 创建表
hbase> create 'help_keyword_hbase', 'keywordInfo'
# 查看表信息
hbase> desc 'help_keyword_hbase'

2. Verificación de importación

Usar scandatos de la tabla de vista:

Inserte la descripción de la imagen aquí

Seis, toda la exportación de la biblioteca

Sqoop es compatible con import-all-tableslas exportaciones de bibliotecas completas al comando HDFS / Hive, pero tenga en cuenta las dos limitaciones siguientes:

  • Todas las tablas deben tener una clave primaria, o utilizarla --autoreset-to-one-mapper, lo que significa que solo se inicia una map task;
  • No puede usar columnas divididas no predeterminadas, ni puede agregar restricciones a través de la cláusula WHERE.

El segundo punto de explicación es más confuso, aquí está la explicación original oficial:

  • No debe tener la intención de utilizar una columna de división no predeterminada ni imponer ninguna condición a través de una WHEREcláusula.

Exporta toda la biblioteca a HDFS:

sqoop import-all-tables \
    --connect jdbc:mysql://hadoop001:3306/数据库名 \
    --username root \
    --password root \
    --warehouse-dir  /sqoop_all \     # 每个表会单独导出到一个目录,需要用此参数指明所有目录的父目录
    --fields-terminated-by '\t'  \
    -m 3

Exporta toda la biblioteca a Hive:

sqoop import-all-tables -Dorg.apache.sqoop.splitter.allow_text_splitter=true \
  --connect jdbc:mysql://hadoop001:3306/数据库名 \
  --username root \
  --password root \
  --hive-database sqoop_test \         # 导出到 Hive 对应的库   
  --hive-import \
  --hive-overwrite \
  -m 3

Siete, filtrado de datos Sqoop

7.1 parámetros de consulta

Sqoop admite el uso de queryconsultas SQL definidas por parámetros, que pueden exportar cualquier conjunto de resultados que desee. Los ejemplos de uso son los siguientes:

sqoop import \
  --connect jdbc:mysql://hadoop001:3306/mysql \
  --username root \
  --password root \
  --query 'select * from help_keyword where  $CONDITIONS and  help_keyword_id < 50' \  
  --delete-target-dir \            
  --target-dir /sqoop_hive  \ 
  --hive-database sqoop_test \           # 指定导入目标数据库 不指定则默认使用 Hive 中的 default 库
  --hive-table filter_help_keyword \     # 指定导入目标表
  --split-by help_keyword_id \           # 指定用于 split 的列      
  --hive-import \                        # 导入到 Hive
  --hive-overwrite \                     、
  -m 3                                  

En uso querycuando se filtran datos, tenga en cuenta los siguientes tres puntos:

  • Debe --hive-tableespecificar la tabla de destino;
  • Si el grado de paralelismo -mno es designado o no --autoreset-to-one-mapper, debe usar el --split-byespecificado en la columna de referencia;
  • whereDeben incluirse las palabras de SQL $CONDITIONS, que es una redacción fija, para reemplazar la dinámica.

7.2 Importación incremental

sqoop import \
    --connect jdbc:mysql://hadoop001:3306/mysql \
    --username root \
    --password root \
    --table help_keyword \
    --target-dir /sqoop_hive  \
    --hive-database sqoop_test \         
    --incremental  append  \             # 指明模式
    --check-column  help_keyword_id \    # 指明用于增量导入的参考列
    --last-value 300  \                  # 指定参考列上次导入的最大值
    --hive-import \   
    -m 3  

incremental El parámetro tiene las siguientes dos opciones opcionales:

  • el agregar : el valor requerido de la columna de referencia debe incrementarse, es mayor que todos last-valuelos valores que se importan;
  • LastModified : el valor requerido debe ser una referencia al timestamptipo de columna , y el tiempo para insertar datos en la marca de tiempo actual en la columna de referencia, la columna debe actualizar la marca de tiempo al actualizar los datos de referencia, después de que last-valuese importen todos los datos.

De la explicación anterior, podemos ver que, de hecho, la importación incremental de Sqoop no tiene demasiados artefactos, depende de la columna de referencia mantenida para determinar cuáles son los datos incrementales. Por supuesto, también podemos utilizar los queryparámetros descritos anteriormente para la exportación incremental manualmente, por lo que en lugar de ser más flexible.

8. Tipo de apoyo

Sqoop admite la mayoría de los tipos de campo de la base de datos de forma predeterminada, pero no se admiten algunos tipos especiales. Si se encontró un tipo no admitido, el programa generará Hive does not support the SQL type for column xxxuna excepción y ahora se puede transmitir mediante los siguientes dos parámetros:

  • --Map-column-java <mapeo> : reescribe el mapeo de SQL a tipos de Java;
  • --Map-column-hive <mapeo> : Vuelva a escribir el mapeo de Hive al tipo Java.

Los ejemplos son los siguientes, y el idcampo original forzado en el valuecampo Tipo de cadena forzado en tipo Integer:

$ sqoop import ... --map-column-java id=String,value=Integer

Referencia

Guía del usuario de Sqoop (v1.4.7)

Supongo que te gusta

Origin blog.csdn.net/godlovedaniel/article/details/108884300
Recomendado
Clasificación