sqoop-import 详解

文章目录

  • 前言
  • 一、介绍
    • 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-homeHCatalog 安装的主目录
–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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/722038.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

栈和队列之队列

1.队列 1.1队列的概念 队列&#xff1a;只允许在一端进行插入数据操作&#xff0c;在另一端进行删除数据操作的特殊线性表&#xff0c;队列具有先进先出 FIFO(First In First Out) 入队列&#xff1a;进行插入操作的一端称为队尾 出队列&#xff1a;进行删除操作的一端称为队…

数学建模【基于熵权法对TOPSIS模型的修正】

一、修正原因 在前面有关于TOPSIS法和熵权法的介绍&#xff0c;我们可以知道TOPSIS有一个和层次分析法共有的问题&#xff0c;就是各个指标的权重是由我们主观或根据专家的主观评价估计的。层次分析法这个问题还更甚之。而恰好熵权法中的权重是由数据确定的&#xff0c;绝对客…

009-CSS-Less、Scss、Sass

Less、Scss、Sass 概念常用的扩展能力1、嵌套&#xff1a;代码层级清晰2、变量&#xff1a;项目风格抽离3、混合&#xff1a;公共样式封装4、&&#xff1a;当前选择器的父级5、导入&#xff1a;公共文件抽离 在实际工作中&#xff0c;CSS 编写更多的采用 CSS 扩展语言&…

Git 撤销修改

如果我们在我们的工作区写了很长时间代码&#xff0c;发现出现错误&#xff0c;想回退到之前的版本&#xff0c;这时改怎么做呢&#xff1f; 情况一&#xff1a;对于工作区的代码&#xff0c;还没有 add 我们当然也可以使用git diff 查看与上次提交的差异&#xff0c;进行手动删…

【场景题】让你设计一个订单号生成服务,该怎么做?

方案 当设计订单号生成服务时&#xff0c;我们需要考虑唯一性、数据量、可读性、基因法、可扩展性、高性能和高可用性等多个方面。根据这些考虑&#xff0c;一个简单的订单号生成服务设计方案可以采取以下措施&#xff1a; 使用Snowflake算法或第三方分布式ID生成器&#xff…

【力扣经典面试题】58. 最后一个单词的长度

目录 一、问题描述 二、解题思路 三、代码实现&#xff08;C版&#xff09; 四、总结 喜欢可以点赞关注哦&#xff01;谢谢大家哦 一、问题描述 给你一个字符串 s&#xff0c;由若干单词组成&#xff0c;单词前后用一些空格字符隔开。返回字符串中 最后一个 单词的长度。 单词 …

PackagesNotFoundError:学习利用报错信息找到解决方法

反思&#xff1a;之前看到报错经常是直接复制报错信息去网上搜&#xff0c;但很多情况下报错信息里其实就给出了解决方案 报错信息&#xff1a; Collecting package metadata (current_repodata.json): done Solving environment: unsuccessful initial attempt using frozen …

FRM模型十五:净值归因之Fama_French三因子模型

文章目录 一、起源二、构建因子三、投资组合的净值归因1. 市场因子2. 规模因子3.价值因子4. 基于净值的归因方法 三、代码实现 一、起源 在多因子模型推出之前&#xff0c;CAPM模型被视为资产定价的第一标准。随着市场不断发展&#xff0c;发现了越来越多CAPM模型无法解释的现…

java中的this

在Java中&#xff0c;this 是一个关键字&#xff0c;用于引用当前对象。它可以用于访问当前对象的实例变量和方法。this 关键字通常在以下情况下使用&#xff1a;区分实例变量和局部变量&#xff1a;当实例变量和局部变量名称相同时&#xff0c;可以使用 this 关键字来引用实例…

【linux】crontab定时任务介绍

1.简介2.crontab语法3.crontab限制4.crontab配置文件5.crontab格式介绍 1.简介 Linux crontab 是用来定期执行程序的命令。 当安装完成操作系统之后&#xff0c;默认便会启动此任务调度命令。 crond 命令每分钟会定期检查是否有要执行的工作&#xff0c;如果有要执行的工作便…

u-boot的DM驱动模型

0、本文基于U-Boot 2022.01-v2.07版本进行分析。 1、u-boot编译流程简要分析 2、u-boot启动流程简要分析 3、u-boot增加自定义命令 4、u-boot的DM驱动模型 4.1、参考资料 Uboot中的DM驱动模型&#xff1a;这篇文章详细介绍了DM驱动模型的原理。 本文重点整理了几个数据结构…

超详细的Scrapy框架的基本使用教程

Scrapy的介绍 scrapy的工作流程&#xff08;重点&#xff01;&#xff01;&#xff01;&#xff09; 如下图所示&#xff1a; 爬虫&#xff1a; 负责向引擎提供要爬取网页的URL&#xff0c;引擎会把这个URL封装成request对象并传递给调度器&#xff0c;把引擎传递过来的resp…

常用区块链安全关键名词和攻击方法解释

文章目录 一、重点名词解释1.1 钱包&#xff08;Wallet&#xff09;1.2 冷钱包(Cold Wallet)1.3 热钱包 &#xff08;Hot Wallet&#xff09;1.4 公钥(Public Key)1.5 私钥(Private Key)1.6 助记词(Mnemonic)1.7 Keystore1.8 公链(Public Blockchain)1.9 交易所 Exchange1.10 节…

API 常用的序列化协议详解

目录 JSON (JavaScript Object Notation) XML (Extensible Markup Language) Protocol Buffers (Protobuf) MessagePack Thrift Avro 小结 API&#xff08;Application Programming Interface&#xff0c;应用程序编程接口&#xff09;在软件开发中扮演着至关重要的角色…

leetcode 673.最长递增子序列的个数

上一题只需要知道最长递增子序列的长度就行了&#xff0c;那样的话直接一个dp就完事了&#xff0c;但是呢&#xff0c;这里说了需要记录这个最长长度递增子序列的个数&#xff0c;这下的话&#xff0c;如果你想用原先的思路&#xff0c;其实可以&#xff0c;但是要能做到计数的…

vue3 (六)自定义指令

1.定义自定义指令&#xff1a; app.directive(pos,{mounted(el,bunding){el.style[bunding.arg] bunding.value px;}, updated(el,bunding){el.style[bunding.arg] bunding.value px;} }) app.directive(指令名,{ mounted(el,bunding){}, updated(el,bunding){} }) 如果只…

安卓app软件开发的费用

我们公司总结的开发价格根据安卓APP&#xff0c;苹果APP行业的报价&#xff0c;开发的APP软件费用主要受到两个方面的影响。安卓和苹果APP软件应用的复杂性&#xff0c;第二个是定制开发的APP软件&#xff0c;开发成本和人员的投入成本&#xff0c;以下就是不同的报价费用是怎么…

面试经典150题【51-60】

文章目录 面试经典150题【51-60】71.简化路径155.最小栈150.逆波兰表达式求值224.基本计算器141.环形链表2.两数相加21.合并两个有序链表138.随机链表的复制19.删除链表的倒数第N个节点82.删除链表中的重复元素II 面试经典150题【51-60】 71.简化路径 先用split(“/”)分开。然…

10. Nginx进阶-Return

简介 什么是Return&#xff1f; nginx的return指令是用于在nginx配置文件中进行重定向或返回特定的HTTP响应码的指令。 它可以根据不同的条件来执行不同的操作&#xff0c;如重定向到其他URL、返回指定的HTTP响应码或自定义响应内容等。 Return适用范围 return指令只能在se…

四平方和 刷题笔记

/* 四平方和 直接暴力搜索 可能会超时 使用二分辅助搜索 先枚举出 c*cd*d并存入数组 用式子算出 a*ab*b还剩下多少查找sum数组里面是否存在符合条件的数 查找方式使用二分搜索 当逼近答案后 检查一下是否为所需的数 如果是 直接输出 */ #include <cstring> #includ…