sqoop-import 详解

文章目录

  • 前言
  • 一、介绍
      1. sqoop简介
      1. sqoop import的作用
      1. 语法
      • 3.1 sqoop import 语法
      • 3.2 导入配置属性
  • 二、导入参数
      1. 常见参数
      1. 验证参数
      1. 导入控制参数
      1. 用于覆盖映射的参数
      1. 增量导入参数
      1. 输出行格式参数
      1. 输入解析参数
      1. Hive 参数
      1. HBase 参数
      1. Accumulo 参数
      1. 代码生成参数
  • 三、Sqoop-HCatalog
      1. 介绍
      1. HCatalog 参数
      1. HCatalog 支持的 Hive 参数
      1. HCatalog 不支持的参数
  • 四、应用示例
      1. 从SQL server导入数据到Hive
      1. 从Oracle导入数据到Hive
  • 总结

前言

本文介绍了Sqoop工具的基本概念、使用方法和常见参数,以及Sqoop与HCatalog的集成。Sqoop是一个用于在Hadoop和关系型数据库之间传输数据的工具,可以方便地将关系型数据库中的数据导入到Hadoop生态系统中的HDFS或Hive中。通过Sqoop的导入功能,用户可以选择全表导入或增量导入模式,并可以使用各种参数来控制导入的行为。此外,本文还介绍了Sqoop与HCatalog的集成,HCatalog是Hadoop生态系统中的一个表和存储管理服务,可以为Sqoop提供更多的数据处理和管理功能。


一、介绍

1. sqoop简介

Sqoop是一个用于在Apache Hadoop和关系型数据库之间传输数据的工具。它允许用户将结构化数据从关系型数据库(如MySQL、Oracle、PostgreSQL等)导入到Hadoop生态系统中的Hadoop分布式文件系统(HDFS)或Hive中,并且可以将数据从HDFS或Hive导出到关系型数据库中。

2. sqoop import的作用

sqoop import用于从关系型数据库中导入数据到Hadoop生态系统中。它支持全表导入和增量导入两种模式。全表导入将整个表的数据导入到HDFS或Hive中,而增量导入只导入源数据库中新增或更新的数据。

3. 语法

3.1 sqoop import 语法

shell 复制代码
sqoop import (泛型参数) (导入参数)

3.2 导入配置属性

可以在命令行的泛型参数中指定导入配置属性。

shell 复制代码
sqoop import -D property.name=property.value ...
参数 描述
sqoop.bigdecimal.format.string 控制 BigDecimal 列在存储为 String 时的格式设置方式。值 (default) 将使用 toPlainString 来存储它们,而无需指数分量 (0.0000001);而值 true或false 将使用 toString,其中可能包含指数 (1E-7)
sqoop.hbase.add.row.key 设置为(default)时,Sqoop 不会将用作行键的列添加到 HBase 中的行数据中。设置为 false或true 时,用作行键的列将添加到 HBase 中的行数据中。

二、导入参数

1. 常见参数

参数 描述
--connect <jdbc-uri> 指定 JDBC 连接字符串
--connection-manager <class-name> 指定要使用的连接管理器类
--driver <class-name> 手动指定要使用的 JDBC 驱动程序类
--hadoop-mapred-home <dir> 覆盖 $HADOOP_MAPRED_HOME
--help 打印使用说明
--password-file 设置包含身份验证密码的文件的路径
-P 从控制台读取密码
--password <password> 设置身份验证密码
--username <username> 设置身份验证用户名
--verbose 工作时打印更多信息
--connection-param-file <filename> 提供连接参数的可选属性文件
--relaxed-isolation 将连接事务隔离设置为映射器的未提交读取

2. 验证参数

参数 描述
--validate 启用对复制数据的验证,仅支持单个表副本。
--validator <class-name> 指定要使用的验证程序类。
--validation-threshold <class-name> 指定要使用的验证阈值类。
--validation-failurehandler <class-name> 指定要使用的验证失败处理程序类。

3. 导入控制参数

参数 描述
--append 将数据追加到 HDFS 中的现有数据集中
--as-avrodatafile 将数据导入 Avro 数据文件中
--as-sequencefile 将数据导入 Sequence 文件中
--as-textfile 以纯文本格式导入数据(默认)
--as-parquetfile 将数据导入 Parquet 文件中
--boundary-query <statement> 用于创建拆分的边界查询
--columns <col,col,col...> 要从表中导入的列
--delete-target-dir 删除导入目标目录(如果存在)
--direct 如果数据库存在,请使用直接连接器
--fetch-size <n> 一次要从数据库读取的条目数
--inline-lob-limit <n> 设置内联 LOB 的最大大小
-m,--num-mappers <n> 使用 n 个map任务并行导入
-e,--query <statement> 导入sql查询语句的结果
--split-by <column-name> 用于拆分工作单元的表列。不能与选项 --autoreset-to-one-mapper 一起使用。
--split-limit <n> 每个拆分大小的上限。这仅适用于 Integer 和 Date 列。对于日期或时间戳字段,它以秒为单位计算。
--autoreset-to-one-mapper 如果表没有主键且未提供拆分列,则导入应使用一个映射器。不能与选项 --split-by <col> 一起使用。
--table <table-name> 要读取的表
--target-dir <dir> HDFS 目标目录
--temporary-rootdir <dir> 导入期间创建的临时文件的 HDFS 目录(覆盖默认的"_sqoop")
--warehouse-dir <dir> 表目标的 HDFS 父级
--where <where clause> 导入期间使用的 WHERE 子句
-z,--compress 启用压缩
--compression-codec <c> 使用 Hadoop 编解码器(默认 gzip)
--null-string <null-string> 要为字符串列的 null 值写入的字符串
--null-non-string <null-string> 要为非字符串列的 null 值写入的字符串

4. 用于覆盖映射的参数

参数 描述
--map-column-java <mapping> 覆盖已配置列从 SQL 到 Java 类型的映射
--map-column-hive <mapping> 覆盖从 SQL 到 Hive 类型的映射,以配置列

5. 增量导入参数

参数 描述
--check-column (col) 指定在确定要导入的行时要检查的列。(该列不应为 CHAR/NCHAR/VARCHAR/VARNCHAR/LONGVARCHAR/LONGVARCHAR 类型)
--incremental (mode) 指定 Sqoop 如何确定哪些行是新行。include 和 modeappendlastmodified 的合法值。
--last-value (value) 指定上一次导入的检查列的最大值。

6. 输出行格式参数

参数 描述
--enclosed-by <char> 设置封闭字符
--escaped-by <char> 设置转义字符
--fields-terminated-by <char> 设置字段分隔符
--lines-terminated-by <char> 设置行尾字符
--mysql-delimiters 使用 MySQL 的默认分隔符集: fields: lines: escaped-by: optionally-enclosed-by:,\n'
--optionally-enclosed-by <char> 设置可选封闭字符

7. 输入解析参数

参数 描述
--input-enclosed-by <char> 设置输入封闭字符
--input-escaped-by <char> 设置输入转义字符
--input-fields-terminated-by <char> 设置输入字段分隔符
--input-lines-terminated-by <char> 设置输入行尾字符
--input-optionally-enclosed-by <char> 设置输入可选封闭字符

8. Hive 参数

参数 描述
--hive-home <dir> 覆盖$HIVE_HOME
--hive-import 将表导入 Hive,如果未设置任何分隔符,则使用 Hive 的默认分隔符。
--hive-overwrite 覆盖 Hive 表中的现有数据。
--create-hive-table 设置后,如果目标 hive 表存在,任务将失败。默认情况下,此属性为 false。
--hive-table <table-name> 设置导入 Hive 时要使用的表名。
--hive-drop-import-delims 导入到 Hive 时,从字符串字段中删除 \n、\r 和 \01。
--hive-delims-replacement 导入到 Hive 时,将字符串字段中的 \n、\r 和 \01 替换为用户定义的字符串。
--hive-partition-key 要分区的 hive 字段的名称
--hive-partition-value <v> hive 分区值
--map-column-hive <map> 覆盖已配置列从 SQL 类型到 Hive 类型的默认映射。如果在此参数中指定逗号,请使用 URL 编码的键和值,例如,使用 DECIMAL(1%2C%201) 而不是 DECIMAL(1, 1)。

9. HBase 参数

参数 描述
--column-family <family> 设置导入的目标列族
--hbase-create-table 如果指定,请创建缺少的 HBase 表
--hbase-row-key <col> 指定要用作行键的输入列,如果输入表包含复合键,则
--hbase-table <table-name> 指定要用作目标的 HBase 表,而不是 HDFS
--hbase-bulkload 支持批量加载

必须采用逗号分隔的复合键列表属性

10. Accumulo 参数

参数 描述
--accumulo-table <table-nam> 指定要用作目标的 Accumulo 表,而不是 HDFS
--accumulo-column-family <family> 设置导入的目标列族
--accumulo-create-table 如果指定,将创建缺少的 Accumulo 表
--accumulo-row-key <col> 指定要用作行键的输入列
--accumulo-visibility <vis> (可选)指定要应用于插入到 Accumulo 中的所有行的可见性标记。默认值为空字符串。
--accumulo-batch-size <size> (可选)设置 Accumulo 的写入缓冲区的大小(以字节为单位)。默认值为 4MB。
--accumulo-max-latency <ms> (可选)设置 Accumulo 批处理编写器的最大延迟(以毫秒为单位)。默认值为 0。
--accumulo-zookeepers <host:port> Accumulo 实例使用的 Zookeeper 服务器的逗号分隔列表
--accumulo-instance <table-name> 目标Accumulo实例的名称
--accumulo-user <username> 要导入为 的 Accumulo 用户的名称
--accumulo-password <password> Accumulo 用户的密码

11. 代码生成参数

参数 描述
--bindir <dir> 已编译对象的输出目录
--class-name <name> 设置生成的类名。这将覆盖 --package-name 与 --jar-file 结合使用时,设置的输入类。
--jar-file <file> 禁用代码生成,使用指定的 jar
--outdir <dir> 生成代码的输出目录
--package-name <name> 将自动生成的类放在此包中
--map-column-java <m> 覆盖已配置列从 SQL 类型到 Java 类型的默认映射。

三、Sqoop-HCatalog

1. 介绍

HCatalog是Hadoop生态系统中的一个表和存储管理服务,它为用户提供了在Hadoop集群上读取和写入数据的便利性。HCatalog的设计目标是为使用不同数据处理工具(如Pig、MapReduce和Hive)的用户提供一个统一的接口,使他们能够更轻松地处理分布式数据。

HCatalog通过提供表的抽象概念,向用户展示了Hadoop分布式数据的关系视图。它将底层的文件系统(如HDFS)中的数据组织成表的形式,并隐藏了数据的存储细节,使用户无需关心数据存储在何处以及数据的存储格式(如RCFile、文本文件或序列文件)。

HCatalog支持读取和写入Hive所支持的任何文件格式,这得益于它使用了序列化器-反序列化器(SerDe)。默认情况下,HCatalog支持RCFile、CSV、JSON和SequenceFile格式的文件。如果需要使用自定义的文件格式,用户需要提供相应的InputFormat和OutputFormat以及SerDe。

HCatalog的能力可以抽象各种存储格式,这也使得它能够为其他工具提供支持。例如,HCatalog可以为Sqoop提供RCFile(以及未来的文件类型)的支持,使得Sqoop能够更方便地与HCatalog集成,实现数据的导入和导出操作。

总而言之,HCatalog是一个在Hadoop生态系统中提供表和存储管理服务的组件,它简化了用户对分布式数据的处理,提供了统一的接口和抽象,使得用户可以更轻松地读取和写入数据,而无需关心底层数据的存储细节和格式。

在HCatalog作业中,以下选项将被忽略:

  • 所有输入分隔符选项都会被忽略。
  • 输出分隔符通常会被忽略,除非使用了--hive-delims-replacement--hive-drop-import-delims选项。当指定了--hive-delims-replacement选项时,所有类型的数据库表列将被后处理,以删除或替换分隔符。这仅在HCatalog表使用文本格式时才需要。

2. HCatalog 参数

参数 描述
--hcatalog-database 指定hive数据库
--hcatalog-table 指定hive表
--hcatalog-home HCatalog 安装的主目录
--create-hcatalog-table 创建hive表,默认已创建
--drop-and-create-hcatalog-table 如果hive表已存在,则删除后再创建
--hcatalog-storage-stanza 指定要追加到表的存储节
--hcatalog-partition-keys 指定多个静态分区 键/值 对,用逗号分隔
--hcatalog-partition-values 指定多个静态分区 键/值 对,用逗号分隔

3. HCatalog 支持的 Hive 参数

参数 描述
--hive-home <dir> 覆盖$HIVE_HOME
--hive-partition-key 要分区的 hive 字段的名称
--hive-partition-value <v> hive 分区值
--map-column-hive <map> 覆盖已配置列从 SQL 类型到 Hive 类型的默认映射。如果在此参数中指定逗号,请使用 URL 编码的键和值,例如,使用 DECIMAL(1%2C%201) 而不是 DECIMAL(1, 1)。

4. HCatalog 不支持的参数

参数
--hive-import
--hive-overwrite
--export-dir
--target-dir
--warehouse-dir
--append
--as-sequencefile
--as-avrodatafile
--as-parquetfile

四、应用示例

1. 从SQL server导入数据到Hive

shell 复制代码
sqoop import \
  --connect "jdbc:sqlserver://ip:port;database=db_name" \
  --username sqlserver_username \
  --password sqlserver_password \
  --query "select * from sqlserver_table where \$CONDITIONS" \
  --hcatalog-database hive_database_name \
  --hcatalog-table hive_table_name \
  --fields-terminated-by '\0001' \
  --lines-terminated-by '\n' \
  --hive-drop-import-delims \
  --null-string '\\N' \
  --null-non-string '\\N' \
  -m 1

注意:如果并行度大于1,必须使用 --split-by 指定拆分列

2. 从Oracle导入数据到Hive

shell 复制代码
sqoop import "-Dorg.apache.sqoop.splitter.allow_text_splitter=true" \
  --connect "jdbc:oracle:thin:@ip:port:oracle_database_name" \
  --username oracle_username \
  --password oracle_password \
  --query "select * from oracle_table_name where \$CONDITIONS" \
  --hcatalog-database hive_database_name \
  --hcatalog-table hive_table_name \
  --hcatalog-partition-keys 'year,month' \
  --hcatalog-partition-values '2019,03' \
  --fields-terminated-by '\0001' \
  --lines-terminated-by '\n' \
  --hive-drop-import-delims \
  --null-string '\\N' \
  --null-non-string '\\N' \
  -m 1

总结

本文详细介绍了Sqoop工具的导入功能和常见参数,以及Sqoop与HCatalog的集成。通过Sqoop的导入功能,用户可以方便地将关系型数据库中的数据导入到Hadoop生态系统中,并可以使用各种参数来控制导入的行为。同时,通过与HCatalog的集成,用户可以更方便地管理和处理导入的数据。

希望本教程对您有所帮助!如有任何疑问或问题,请随时在评论区留言。感谢阅读!

参考链接:

相关推荐
江畔独步3 小时前
Hive内置集合函数-size,map_keys,map_values,sort_array,array_contains
数据仓库·hive·hadoop
天地风雷水火山泽3 小时前
二百六十五、Hive——目前Hive数仓各层表样例
数据仓库·hive·hadoop
棉花糖灬3 小时前
Hive常用函数
数据仓库·hive·hadoop
mizuhokaga1 天前
Hive parquet表通过csv文件导入数据
数据仓库·hive·hadoop
全栈弟弟1 天前
高级大数据开发协会
大数据·数据仓库·hadoop·flink·spark
lzhlizihang1 天前
Hadoop的一些高频面试题 --- hdfs、mapreduce以及yarn的面试题
大数据·hadoop·hdfs·mapreduce·面试题·yarn
楠奕1 天前
linux hadoop-3.3.6 hbase-2.5.7
linux·hadoop·hbase
学习3人组1 天前
Hadoop分布式集群配置
大数据·hadoop·分布式
赵渝强老师1 天前
【赵渝强老师】基于ZooKeeper实现Hadoop HA
大数据·hadoop·分布式·zookeeper