关键词:
一、Sqoop基本原理
① Sqoop是什么
Sqoop(SQL-to-Hadoop)是一款开源的工具,主要用于在Hadoop(Hive)与传统的数据库(mysql、postgresql…)间进行数据的传递,可以将一个关系型数据库(例如 : MySQL ,Oracle ,Postgres等)中的数据导入到Hadoop的HDFS中,也可以将HDFS的数据导出到关系型数据库中。
② Sqoop使用场景
我们通常把有价值的数据存储在关系型数据库系统中,以行和列的形式存储数据,以便于用户读取和查询。但是当遇到海量数据时,我们需要把数据提取出来,通过MapReduce对数据进行加工,获得更符合我们需求的数据。数据的导入和导出本质上是Mapreduce程序,充分利用了MR的并行化和容错性。为了能够和HDFS系统之外的数据库系统进行数据交互,MapReduce程序需要使用外部API来访问数据,因此我们需要用到Sqoop。
③ 关系图
④ 架构图
在 mapreduce 中主要是对 inputformat 和 outputformat 进行定制。
Sqoop工具接收到客户端的shell命令或者Java api命令后,通过Sqoop中的任务翻译器(Task Translator)将命令转换为对应的MapReduce任务,而后将关系型数据库和Hadoop中的数据进行相互转移,进而完成数据的拷贝。
二、Sqoop可用命令
对于不同的命令,有不同的参数,这里给大家列出来了一部分Sqoop操作时的常用参数,以供参考,需要深入学习的可以参看对应类的源代码,本文目前介绍常用的导入、导出的一些命令。
- 公用参数:数据库连接
- 公用参数:import
- 公用参数:export
- 公用参数:hive
- 其余
三、Sqoop常用方法
先在mysql中建一张表来使用
插入几条数据
3.1、RDBMS => HDFS (导入重点)
3.1.1、全表导入
命令:
MR的数据处理过程:
查看/sqoop/table_all目录下的数据结果:
查看hdfs的数据
hdfs dfs -cat /sqoop/table_all/part-m-0000
数据结果如下:
3.1.3、导入指定列
注意:columns中如果涉及到多列,用逗号分隔,分隔时不要添加空格
hdfs dfs -cat /sqoop/table_all/part-m-0000
数据结果如下:
3.1.4、where语句过滤
源表数据:
得到了如下 “sid>=6” 的数据:
3.1.5、①增量导入 append
–split-by 和 -m 结合实现numberReduceTasks并行
后面两句
–check-column sid
–last-value 0
结合使用的效果类似于where sid>0
MR过程中部分关键信息如下
因为有两个maptask,所以会分成两份文件
hdfs dfs -cat /sqoop/table_all/part-m-*
数据结果如下:
此时往mysql中再添加几条数据,再进行一次增量导入
insert into student(sid,sname,gender,age) values(7,云中君,男,19),(8,百里玄策,男,20),(9,裴擒虎,男,17);
再执行一次增量导入
此时多了一个文件
hdfs dfs -cat /sqooptest/add1/part-m-*
数据结果如下:
3.1.5、②增量导入 lastmodified
先在mysql创建一张新表:
insert into orderinfo(oid,oName,oPrice,oTime) values(1,爱疯12,6500.0,2020-11-11 00:00:00),(2,华为xpro,12000.0,2020-10-1 12:52:33),(3,行李箱,888.8,2019-5-22 21:56:17),(4,羽绒服,1100.0,2018-3-7 14:22:31);
–incremental lastmodified修改和增加 此时搭配–check-column 必须为timestamp类型
使用lastmodified方式导入数据要指定增量数据是要–append(追加)还是要–merge-key(合并)
hdfs dfs -cat /sqooptest/lastmod/part-m-00000
数据结果如下:
往mysql的orderinfo表中新插入几条数据,然后增量导入:
insert into orderinfo(oid,oName,oPrice,oTime) values(5,帕拉梅拉,1333333.3,2020-4-7 12:23:34),(6,保温杯,86.5,2017-3-5 22:52:16),(7,枸杞,46.3,2019-10-5 11:11:11),(8,电动牙刷,350.0,2019-9-9 12:21:41);
执行后合并了文件
从part-m-00000变成了part-r-00000
hdfs dfs -cat /sqooptest/lastmod/part-r-00000
数据结果如下:
发现只添加了两条记录,因为序号为6和8的记录的时间不在–last-value的范围内
3.2、RDBMS => HBase
先在hbase中建表:
hbase(main):007:0> create sqooptest:sqstudent,stuinfo
使用sqoop开始导入数据:
–column-family stuinfo
指定列族为stuinfo
–hbase-create-table
若表不存在,则自动创建
–hbase-row-key sid
指定行键为sid
查看hbase表数据
hbase(main):008:0> scan sqooptest:sqstudent
ROW COLUMN+CELL
1 column=stuinfo:age, timestamp=1605958889301, value=15
1 column=stuinfo:gender, timestamp=1605958889301, value=\\xE5\\xA5\\xB3
1 column=stuinfo:sname, timestamp=1605958889301, value=\\xE5\\xAD\\x99\\xE5\\xB0\\x9A\\x
E9\\xA6\\x99
2 column=stuinfo:age, timestamp=1605958889301, value=16
2 column=stuinfo:gender, timestamp=1605958889301, value=\\xE5\\xA5\\xB3
2 column=stuinfo:sname, timestamp=1605958889301, value=\\xE8\\xB2\\x82\\xE8\\x9D\\x89
...
...
...
9 column=stuinfo:age, timestamp=1605958892765, value=17
9 column=stuinfo:gender, timestamp=1605958892765, value=\\xE7\\x94\\xB7
9 column=stuinfo:sname, timestamp=1605958892765, value=\\xE8\\xA3\\xB4\\xE6\\x93\\x92\\x
E8\\x99\\x8E
9 row(s) in 0.1830 seconds
HBase中的数据没有数据类型,统一存储为字节码,是否显示具体的汉字只是前端显示问题,此处没有解决,因此gender和sname字段显示的都是字节码
3.3、RDBMS => Hive
3.3.1、导入普通表
将mysql中retail_db库下的orders表导入hive
导入过程日志会提示mapreduce过程等信息,导入成功日志最后会提示如下信息:
在hdfs的hive工作目录中生成文件
查看一下hive的orders表数据
3.3.2、导入分区表
执行结果
查询结果
3.4、Hive/Hdfs => RDBMS
先在mysql中建表
我们把刚才在hive中创建的sqstudent表数据再导出到mysql中
查看一下mysql中的数据结果
3.5、Sqoop Job
job参数说明:
创建job
- -和import之间有个空格。这里–空格之后表示给job添加参数,而恰好import又不需要–,所以这个空格很容易被忽略。
查看job:
sqoop job --list
结果:
显示job:
结果
此时未配备密码,因此在过程中需要输入密码:
删除job
sqoop job --delete myjob
保存密码
保存的job里并没有保存明文的password,所以每次使用job,都会要求提供密码【-P交互式】。
而在使用Oozie等这些自动化调度的时候,是没有机会输入password的。所以需要保存password。
1、使用–password-file文件
文件存放在/home/user(主机名)下,文件的权限应该是400,支持本地文件和HDFS。
我们新建一个指定密码文件路径的job:
查看新建的job:
执行job:
sqoop job --exec pwdjob
执行过程如下,已经不需要输入密码:
查看执行结果
hdfs dfs -cat /sqooptest/pwdjob/part-m-00000
结果数据如下:
2、保存在sqoop元数据里
You can enable passwords in the metastore by setting sqoop.metastore.client.record.password to true in the configuration.
配置文件在conf/sqoop-site.xml里,设置之后的第一次运行,需要提供密码。
sqoop导入数据到mysql原理_sqoop的详细使用及原理
1、sqoop简介sqoop是一个用来将hadoop中hdfs和关系型数据库中的数据相互迁移的工具,可以将一个关系型数据库(mysql、oracle等)中的数据导入到hadoop的hdfs中,也可以将hdfs的数据导入到关系型数据库中。2、sqoop的特点:sqoop的底层实现... 查看详情
storm基本原理概念及基本使用
1.背景介绍1.1离线计算是什么离线计算:批量获取数据、批量传输数据、周期性批量计算数据、数据展示;代表技术:Sqoop批量导入数据、HDFS批量存储数据、MapReduce批量计算数据、Hive批量计算数据1.2流式计算是什么流式计算:数... 查看详情
大数据之非常详细sqoop安装和基本操作(代码片段)
大数据大数据之非常详细Sqoop安装和基本操作目录大数据Sqoop1、上传解压2、配置环境变量配置sqoop环境变量配置sqoop-env.sh3、加入mysql的jdbc驱动包4、验证验证是否安装成功验证启动5、导入mysql表数据到HDFS6、导出HDFS数据到mysql总结... 查看详情
sqoop工作原理是啥?
...库中。Sqoop也是基于Mapreduce来做的数据导入。关于sqoop的原理sqoop的原理比较简单,就是根据用户指定的sql或者字段参数,从数据库中读取数据导入到hive或者hdfs中。也支持基于数据库导出工具导出,不过受限于数据库的版本。在... 查看详情
sqoop基本操作
列出hive的全部库 sqooplist-databases--connectjdbc:mysql://localhost--usernamehive--passwordhive列出全部的表 sqooplist-tables--connectjdbc:mysql://localhost/hive_metadata--usernamehive--passwordhive  查看详情
1.5sqoop安装及基本使用(代码片段)
一、安装sqoop1、解压##解压[[email protected]cdh]#tarzxfsqoop-1.4.5-cdh5.3.6.tar.gz-C/opt/cdh-5.3.6/2、/opt/cdh-5.3.6/sqoop-1.4.5-cdh5.3.6/conf/sqoop-env.sh &n 查看详情
sqoop安装及基本使用
Sqoop: 1、sqoop从数据库中导入数据到HDFS 2、SQOOP从数据库导入数据到hive 3、sqoop从hive中将数据导出到数据库 sqoop底层还是执行的mapreduce程序,,但是特殊的地方只有mapTASK ... 查看详情
sqoop关系型数据迁移原理以及map端内存为何不会爆掉窥探
...查询语句,将会拿到所有数据到map的客户端,安装jdbc的原理,数据全部缓存在内存中,但是内存没有出现爆掉情况,这是因为1.3以后,对jdbc进行了优化,改进jdbc内部原理,将数据写入磁盘存储了。原文和作者一起讨论: http:... 查看详情
sqoop笔记整理(代码片段)
...可以将外部数据迁移到hdfs目录或者hive表或者hbase表import原理从传统数据库获取元数据信息(schema、table、field、fieldtype),把导入功能转换为只有Map的Mapreduce作业,在mapreduce中有很多map,每个map读一片数据,进而并行的完成数据的... 查看详情
sqoop入门教程
目录一、Sqoop概述 1、简介 2、Sqoop架构原理 3、Sqoop连接器二、Sqoop安装 1、sqoop下载解压 2、sqoop配置文件 & 查看详情
头歌sqoop数据导出-详解(代码片段)
...出语法学习任务描述本关任务:学习Sqoop导出(export)的基本语法并配置好环境。相关知识为了完成本关任务,你需要掌握:1、Sqoop导出(export)的基本参数。2、配置环境。Sqoop导出(export)的基本参数。Sqoop能够让Hadoop上的HD... 查看详情
sqoop(代码片段)
sqoop1Sqoop简介2Sqoop原理3Sqoop安装3.1下载并解压3.2修改配置文件3.3拷贝JDBC驱动3.4验证Sqoop3.5测试Sqoop是否能够成功连接数据库4Sqoop的简单使用案例4.1导入数据4.1.1RDBMS到HDFS4.1.2RDBMS到Hive4.1.3RDBMS到Hbase4.2、导出数据4.2.1HIVE/HDFS到RDBMS4.3脚... 查看详情
sqoop(代码片段)
sqoop1Sqoop简介2Sqoop原理3Sqoop安装3.1下载并解压3.2修改配置文件3.3拷贝JDBC驱动3.4验证Sqoop3.5测试Sqoop是否能够成功连接数据库4Sqoop的简单使用案例4.1导入数据4.1.1RDBMS到HDFS4.1.2RDBMS到Hive4.1.3RDBMS到Hbase4.2、导出数据4.2.1HIVE/HDFS到RDBMS4.3脚... 查看详情
sqoop(代码片段)
sqoop1Sqoop简介2Sqoop原理3Sqoop安装3.1下载并解压3.2修改配置文件3.3拷贝JDBC驱动3.4验证Sqoop3.5测试Sqoop是否能够成功连接数据库4Sqoop的简单使用案例4.1导入数据4.1.1RDBMS到HDFS4.1.2RDBMS到Hive4.1.3RDBMS到Hbase4.2、导出数据4.2.1HIVE/HDFS到RDBMS4.3脚... 查看详情
sqoop学习之路(代码片段)
...三、安装1、前提概述2、软件下载3、安装步骤四、Sqoop的基本命令基本操作示例五、Sqoop的数据导入1、从RDBMS导入到HDFS中2、把MySQL数据库中的表数据导入到Hive中3、把MySQL数据库中的表数据导入到hbase 正文回到顶部一、概述sqoop是... 查看详情
2021-09-27
大数据基础—Sqoop基本使用一、Sqoop基本命令查看所有命令sqoophelp查看某条命令的具体使用方法sqoophelp命令名二、Sqoop与MySQL查询MySQL所有数据库通常用于Sqoop与MySQL连通测试:sqooplist-databases–connectjdbc:mysql://hadoop001:3306/–username... 查看详情
2021-09-27
大数据基础—Sqoop基本使用一、Sqoop基本命令查看所有命令sqoophelp查看某条命令的具体使用方法sqoophelp命令名二、Sqoop与MySQL查询MySQL所有数据库通常用于Sqoop与MySQL连通测试:sqooplist-databases–connectjdbc:mysql://hadoop001:3306/–username... 查看详情
sqoop使用入门(代码片段)
...hart来进行图表展示,更加直观的展示数据指标。sqoop基础基本概念如下图所示,sqoop中有导入和导出的概念,参照物都是hadoop文件系统,其中关系型数据库可以是mysql、oracle和db2,hadoop文件系统中可以是hdfs、hive和hbase等。执行sqoo... 查看详情