阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

Sqoop 结合多种系统的具体应用

397次阅读
没有评论

共计 5041 个字符,预计需要花费 13 分钟才能阅读完成。

Sqoop 与 HDFS 结合

        下面我们结合 HDFS,介绍 Sqoop 从关系型数据库的导入和导出。

Sqoop import

        它的功能是将数据从关系型数据库导入 HDFS 中,其流程图如下所示。

Sqoop 结合多种系统的具体应用

我们来分析一下 Sqoop 数据导入流程,首先用户输入一个 Sqoop import 命令,Sqoop 会从关系型数据库中获取元数据信息,比如要操作数据库表的 schema 是什么样子,这个表有哪些字段,这些字段都是什么数据类型等。它获取这些信息之后,会将输入命令转化为基于 Map 的 MapReduce 作业。这样 MapReduce 作业中有很多 Map 任务,每个 Map 任务从数据库中读取一片数据,这样多个 Map 任务实现并发的拷贝,把整个数据快速的拷贝到 HDFS 上。

下面我们看一下 Sqoop 如何使用命令行来导入数据的,其命令行语法如下所示

sqoop import \
–connect jdbc:mysql://db.dajiangtai.net:3306/djtdb_Hadoop \
–username sqoop \
–password sqoop \
–table user \
–target-dir /junior/sqoop/ \        // 可选,不指定目录,数据默认导入到 /user 下
–where “sex=’female'” \    // 可选
–as-sequencefile \        // 可选,不指定格式,数据格式默认为 Text 文本格式
–num-mappers 10 \        // 可选,这个数值不宜太大
–null-string ‘\\N’ \        // 可选
–null-non-string ‘\\N’ \        // 可选

  –connect:指定 JDBC URL。

        –username/password:mysql 数据库的用户名。

        –table:要读取的数据库表。

        –target-dir:将数据导入到指定的 HDFS 目录下,文件名称如果不指定的话,会默认数据库的表名称。

        –where:过滤从数据库中要导入的数据。

        –as-sequencefile:指定数据导入数据格式。

        –num-mappers:指定 Map 任务的并发度。

        –null-string,–null-non-string:同时使用可以将数据库中的空字段转化为 ’\N’,因为数据库中字段为 null,会占用很大的空间。

        下面我们介绍几种 Sqoop 数据导入的特殊应用。

  1、Sqoop 每次导入数据的时候,不需要把以往的所有数据重新导入 HDFS,只需要把新增的数据导入 HDFS 即可,下面我们来看看如何导入新增数据。

sqoop import \
–connect jdbc:mysql://db.dajiangtai.net:3306/djtdb_hadoop \
–username sqoop \
–password sqoop \
–table user \
–incremental append \        // 代表只导入增量数据
–check-column id \            // 以主键 id 作为判断条件
–last-value 999        // 导入 id 大于 999 的新增数据

上述三个组合使用,可以实现数据的增量导入。

        2、Sqoop 数据导入过程中,直接输入明码存在安全隐患,我们可以通过下面两种方式规避这种风险。

        1)-P:sqoop 命令行最后使用 -P,此时提示用户输入密码,而且用户输入的密码是看不见的,起到安全保护作用。密码输入正确后,才会执行 sqoop 命令。

sqoop import \
–connect jdbc:mysql://db.dajiangtai.net:3306/djtdb_hadoop \
–username sqoop \
–table user \
-P

  2)–password-file:指定一个密码保存文件,读取密码。我们可以将这个文件设置为只有自己可读的文件,防止密码泄露。

sqoop import \
–connect jdbc:mysql://db.dajiangtai.net:3306/djtdb_hadoop \
–username sqoop \
–table user \
–password-file my-sqoop-password

Sqoop export

        它的功能是将数据从 HDFS 导入关系型数据库表中,其流程图如下所示。

Sqoop 结合多种系统的具体应用

        我们来分析一下 Sqoop 数据导出流程,首先用户输入一个 Sqoop export 命令,它会获取关系型数据库的 schema,建立 Hadoop 字段与数据库表字段的映射关系。然后会将输入命令转化为基于 Map 的 MapReduce 作业,这样 MapReduce 作业中有很多 Map 任务,它们并行的从 HDFS 读取数据,并将整个数据拷贝到数据库中。

        下面我们看一下 Sqoop 如何使用命令行来导出数据的,其命令行语法如下所示。

sqoop export \
–connect jdbc:mysql://db.dajiangtai.net:3306/djtdb_hadoop \
–username sqoop \
–password sqoop \
–table user \
–export-dir user

  –connect:指定 JDBC URL。

        –username/password:mysql 数据库的用户名和密码。

        –table:要导入的数据库表。

        –export-dir:数据在 HDFS 上的存放目录。

        下面我们介绍几种 Sqoop 数据导出的特殊应用。

        1、Sqoop export 将数据导入数据库,一般情况下是一条一条导入的,这样导入的效率非常低。这时我们可以使用 Sqoop export 的批量导入提高效率,其具体语法如下。

sqoop export \
–Dsqoop.export.records.per.statement=10 \
–connect jdbc:mysql://db.dajiangtai.net:3306/djtdb_hadoop \
–username sqoop \
–password sqoop \
–table user \
–export-dir user \
–batch

–Dsqoop.export.records.per.statement:指定每次导入 10 条数据,–batch:指定是批量导入。

2、在实际应用中还存在这样一个问题,比如导入数据的时候,Map Task 执行失败,那么该 Map 任务会转移到另外一个节点执行重新运行,这时候之前导入的数据又要重新导入一份,造成数据重复导入。因为 Map Task 没有回滚策略,一旦运行失败,已经导入数据库中的数据就无法恢复。Sqoop export 提供了一种机制能保证原子性,使用 –staging-table 选项指定临时导入的表。Sqoop export 导出数据的时候会分为两步:第一步,将数据导入数据库中的临时表,如果导入期间 Map Task 失败,会删除临时表数据重新导入;第二步,确认所有 Map Task 任务成功后,会将临时表名称为指定的表名称。

sqoop export \
–connect jdbc:mysql://db.dajiangtai.net:3306/djtdb_hadoop \
–username sqoop \
–password sqoop \
–table user \
–staging-table staging_user

3、在 Sqoop 导出数据过程中,如果我们想更新已有数据,可以采取以下两种方式。

1) 通过 –update-key id 更新已有数据。

sqoop export \
–connect jdbc:mysql://db.dajiangtai.net:3306/djtdb_hadoop \
–username sqoop \
–password sqoop \
–table user \
–update-key id

2) 使用 –update-key id 和 –update-mode allowinsert 两个选项的情况下,如果数据已经存在,则更新数据,如果数据不存在,则插入新数据记录。

sqoop export \
–connect jdbc:mysql://db.dajiangtai.net:3306/djtdb_hadoop \
–username sqoop \
–password sqoop \
–table user \
–update-key id \
–update-mode allowinsert

4、如果 HDFS 中的数据量比较大,很多字段并不需要,我们可以使用 –columns 来指定插入某几列数据。

sqoop export \
–connect jdbc:mysql://db.dajiangtai.net:3306/djtdb_hadoop \
–username sqoop \
–password sqoop \
–table user \
–column username,sex

 5、当导入的字段数据不存在或者为 null 的时候,我们使用 –input-null-string 和 –input-null-non-string 来处理。

sqoop export \
–connect jdbc:mysql://db.dajiangtai.net:3306/djtdb_hadoop \
–username sqoop \
–password sqoop \
–table user \
–input-null-string ‘\\N’ \
–input-null-non-string ‘\\N’

Sqoop 与其它系统结合

        Sqoop 也可以与 Hive、HBase 等系统结合,实现数据的导入和导出,用户需要在 sqoop-env.sh 中添加 HBASE_HOME、HIVE_HOME 等环境变量。

        1、Sqoop 与 Hive 结合比较简单,使用 –hive-import 选项就可以实现。

sqoop import \
–connect jdbc:mysql://db.dajiangtai.net:3306/djtdb_hadoop \
–username sqoop \
–password sqoop \
–table user \
–hive-import

2、Sqoop 与 HBase 结合稍微麻烦一些,需要使用 –hbase-table 指定表名称,使用 –column-family 指定列名称。

sqoop import \
–connect jdbc:mysql://db.dajiangtai.net:3306/djtdb_hadoop \
–username sqoop \
–password sqoop \
–table user \
–hbase-table user \
–column-family city

相关阅读

通过 Sqoop 实现 Mysql / Oracle 与 HDFS / Hbase 互导数据 http://www.linuxidc.com/Linux/2013-06/85817.htm

Sqoop 安装配置及 Hive 导入 http://www.linuxidc.com/Linux/2016-09/135129.htm

[Hadoop] Sqoop 安装过程详解 http://www.linuxidc.com/Linux/2013-05/84082.htm

用 Sqoop 进行 MySQL 和 HDFS 系统间的数据互导 http://www.linuxidc.com/Linux/2013-04/83447.htm

Hadoop Oozie 学习笔记 Oozie 不支持 Sqoop 问题解决 http://www.linuxidc.com/Linux/2012-08/67027.htm

Hadoop 生态系统搭建(hadoop hive hbase zookeeper oozie Sqoop)http://www.linuxidc.com/Linux/2012-03/55721.htm

Hadoop 学习全程记录——使用 Sqoop 将 MySQL 中数据导入到 Hive 中 http://www.linuxidc.com/Linux/2012-01/51993.htm

Sqoop 的详细介绍 :请点这里
Sqoop 的下载地址 :请点这里

本文永久更新链接地址 :http://www.linuxidc.com/Linux/2017-01/139175.htm

正文完
星哥玩云-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-21发表,共计5041字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中

星哥玩云

星哥玩云
星哥玩云
分享互联网知识
用户数
4
文章数
19351
评论数
4
阅读量
7997203
文章搜索
热门文章
星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛 NAS-6:抖音视频同步工具,视频下载自动下载保存 前言 各位玩 NAS 的朋友好,我是星哥!...
星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛 NAS-3:安装飞牛 NAS 后的很有必要的操作 前言 如果你已经有了飞牛 NAS 系统,之前...
我把用了20年的360安全卫士卸载了

我把用了20年的360安全卫士卸载了

我把用了 20 年的 360 安全卫士卸载了 是的,正如标题你看到的。 原因 偷摸安装自家的软件 莫名其妙安装...
再见zabbix!轻量级自建服务器监控神器在Linux 的完整部署指南

再见zabbix!轻量级自建服务器监控神器在Linux 的完整部署指南

再见 zabbix!轻量级自建服务器监控神器在 Linux 的完整部署指南 在日常运维中,服务器监控是绕不开的...
飞牛NAS中安装Navidrome音乐文件中文标签乱码问题解决、安装FntermX终端

飞牛NAS中安装Navidrome音乐文件中文标签乱码问题解决、安装FntermX终端

飞牛 NAS 中安装 Navidrome 音乐文件中文标签乱码问题解决、安装 FntermX 终端 问题背景 ...
阿里云CDN
阿里云CDN-提高用户访问的响应速度和成功率
随机文章
仅2MB大小!开源硬件监控工具:Win11 无缝适配,CPU、GPU、网速全维度掌控

仅2MB大小!开源硬件监控工具:Win11 无缝适配,CPU、GPU、网速全维度掌控

还在忍受动辄数百兆的“全家桶”监控软件?后台偷占资源、界面杂乱冗余,想查个 CPU 温度都要层层点选? 今天给...
再见zabbix!轻量级自建服务器监控神器在Linux 的完整部署指南

再见zabbix!轻量级自建服务器监控神器在Linux 的完整部署指南

再见 zabbix!轻量级自建服务器监控神器在 Linux 的完整部署指南 在日常运维中,服务器监控是绕不开的...
星哥带你玩飞牛NAS-4:飞牛NAS安装istore旁路由,家庭网络升级的最佳实践

星哥带你玩飞牛NAS-4:飞牛NAS安装istore旁路由,家庭网络升级的最佳实践

星哥带你玩飞牛 NAS-4:飞牛 NAS 安装 istore 旁路由,家庭网络升级的最佳实践 开始 大家好我是...
12.2K Star 爆火!开源免费的 FileConverter:右键一键搞定音视频 / 图片 / 文档转换,告别多工具切换

12.2K Star 爆火!开源免费的 FileConverter:右键一键搞定音视频 / 图片 / 文档转换,告别多工具切换

12.2K Star 爆火!开源免费的 FileConverter:右键一键搞定音视频 / 图片 / 文档转换...
你的云服务器到底有多强?宝塔跑分告诉你

你的云服务器到底有多强?宝塔跑分告诉你

你的云服务器到底有多强?宝塔跑分告诉你 为什么要用宝塔跑分? 宝塔跑分其实就是对 CPU、内存、磁盘、IO 做...

免费图片视频管理工具让灵感库告别混乱

一言一句话
-「
手气不错
自己手撸一个AI智能体—跟创业大佬对话

自己手撸一个AI智能体—跟创业大佬对话

自己手撸一个 AI 智能体 — 跟创业大佬对话 前言 智能体(Agent)已经成为创业者和技术人绕...
每年0.99刀,拿下你的第一个顶级域名,详细注册使用

每年0.99刀,拿下你的第一个顶级域名,详细注册使用

每年 0.99 刀,拿下你的第一个顶级域名,详细注册使用 前言 作为长期折腾云服务、域名建站的老玩家,星哥一直...
零成本上线!用 Hugging Face免费服务器+Docker 快速部署HertzBeat 监控平台

零成本上线!用 Hugging Face免费服务器+Docker 快速部署HertzBeat 监控平台

零成本上线!用 Hugging Face 免费服务器 +Docker 快速部署 HertzBeat 监控平台 ...
星哥带你玩飞牛NAS-14:解锁公网自由!Lucky功能工具安装使用保姆级教程

星哥带你玩飞牛NAS-14:解锁公网自由!Lucky功能工具安装使用保姆级教程

星哥带你玩飞牛 NAS-14:解锁公网自由!Lucky 功能工具安装使用保姆级教程 作为 NAS 玩家,咱们最...
150元打造低成本NAS小钢炮,捡一块3865U工控板

150元打造低成本NAS小钢炮,捡一块3865U工控板

150 元打造低成本 NAS 小钢炮,捡一块 3865U 工控板 一块二手的熊猫 B3 工控板 3865U,搭...