文章目录 前言 一、介绍 1. sqoop简介 2. sqoop import的作用 3. 语法 3.1 sqoop import 语法 3.2 导入配置属性 二、导入参数 1. 常见参数 2. 验证参数 3. 导入控制参数 4. 用于覆盖映射的参数 5. 增量导入参数 6. 输出行格式参数 7. 输入解析参数 8. Hive 参数 9. HBase 参数 10. Accumulo 参数 11. 代码生成参数 三、Sqoop-HCatalog 1. 介绍 2. HCatalog 参数 3. HCatalog 支持的 Hive 参数 4. HCatalog 不支持的参数 四、应用示例 1. 从SQL server导入数据到Hive 2. 从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 语法
sqoop import ( 泛型参数) ( 导入参数)
3.2 导入配置属性
可以在命令行的泛型参数 中指定导入配置属性。
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
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
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的集成,用户可以更方便地管理和处理导入的数据。
希望本教程对您有所帮助!如有任何疑问或问题,请随时在评论区留言。感谢阅读!
参考链接:
https://sqoop.apache.org/docs/1.4.7/SqoopUserGuide.html