Sqoop数据导入导出
概述:sqoop是一款开源工具,主要用于传统关系型数据库和Hadoop之间的数据导入导出,他是Hadoop环境下链接关系型数据库和Hadoop之间的桥梁支持多种关系型数据源和Hive、HDFS、HBase的相互导入,每天数据量不大的情况,可以全表导入,但是sqoop也提供了增量数据的导入功能.sqoop利用MapReduce分布式批处理,加快了数据传输剫,保证了容错性。总的来说就是它可以将关系..
概述:
sqoop是一款开源工具,主要用于传统关系型数据库和Hadoop之间的数据导入导出,他是Hadoop环境下链接关系型数据库和Hadoop之间的桥梁支持多种关系型数据源和Hive、HDFS、HBase的相互导入,每天数据量不大的情况,可以全表导入,但是sqoop也提供了增量数据的导入功能.
sqoop利用MapReduce分布式批处理,加快了数据传输剫,保证了容错性。总的来说就是它可以将关系型数据库中的数据导入到Hadoop(Hive、HDFS、HBase)中,也可以将Hadoop中的数据导入到关系型数据库(MySQL、Oracle)中。
工作原理:
Sqoop主要通过JDBC和关系型数据库进行交互,理论上面支持JDBC的Database都可以使用Sqoop和HDFS进行交互。
从关系型数据库导入到HDFS的原理:
- 1.首先用户输入一个spoop的import命令,Sqoop会从关系型数据库中获取元数据信息
- 2.将导入的命令转化为mapreduce作业
- 3.执行mapreduce作业,将数据复制到HDFS上面。
Sqoop导出的原理(从Hadoop=>关系型数据库):
- 1.首先用户输入一个Sqoop的export命令,他会获取关系型数据库的元数据信息
- 2.将导出的命令转化为mapreduce作业
- 3.执行mapreduce任务,将数据复制到数据库中
Sqoop1与sqoop2的优缺点:
sqoop1 | sqoop2 | |
---|---|---|
架构 | 仅仅使用一个sqoop客户端 | 引入了sqoopServer集中化管理Connector,以及RESTAPI、webUI,并引入基于角色的安全机制 |
部署 | 部署简单,安装需要root权限 Connector必须符合JDBC模型 | 架构复杂,配置部署更繁琐 |
使用 | 命令行方式容易出错,安全机制不高 | 多种交互方式,命令行、WebUI、REST API,Connect集中化管理。 |
Sqoop不仅可以用于在关系型数据库与HDFS文件系统之间进行数据转化,而且也可以将数据从关系数据库传输至Hive或Hbase。
对于数据从Hive或HBase传输至关系型数据库来说,可以从Hive或者HBase将数据提取至HDFS,然后使用Sqoop将上一步的输出导入到关系型数据库中。
进行操作之前需要将JDBC驱动放到sqoop的lib文件夹下面。
cp /opt/mysql-connect-java-5.1.41-bin.jar /opt/cloudera/parcels/cdh5.11.2.p0.4/lib/sqoop
1.列出Mysql上面所有数据库:
sqoop list-databases --connect jdbc:mysql://192.168.34.120:3306 --username root --password root123
2.查看MySQL表:
sqoop list-databases --connect jdbc:mysql://192.168.34.120:3306/sqoopdemo --username root --password root123
3.将MySQL数据库的表dept导入HDFS
sqoop import --connect jdbc:mysql://192.168.34.120:3306/sqoopdemo --username root --password root123 -table dept -m 1 -target-dir /user/dept
4.将数据从HDFS导出到MySQL数据库的表dept
sqoop export --connect jdbc:mysql://192.168.34.120:3306/sqoopdemo --username root --password root123 --table dept -m 1 --export-dir /usr/dept
5.增量导入两种方式
append和lastmodified两种方式
lastmodified模式区别于append模式的地方是可以指定一个时间戳字段,按照时间的顺序导入,这种模式可以指定增量数据在HDFS的存在方式,比如最终增量结果为一个文件
-
-cleck-column 指定增量导入的依赖字段,通常为自增的主键id或者时间戳
-
-increment 指定导入的模式(append或lastmoddified)
-
-last-value 指定导入的上次最大值,也就是这次开始的值
6.sqoop增量导入示例:
sqoop import --connect jdbc:mysql://192.168.34.120:3306/sqoopdemo --username root --password root123 --table dept -m 1 --target-dir /user/dept --incremental append --check-column id --last-value 1230
7.把MySQL数据导入到Hive当中去
sqoop import --connect jdbc:mysql://192.168.3.120/sqoopdemo --username root --password root123 --table dept -m 1 --hive-import
8.将MySQL数据库的表dept导入HBase
sqoop import --connect jdbc:mysql://192.168.34.120/sqoopdemo --username root --password root123m --table dept --habase-create-table --hbase-table hbasse_dept
--column-family col_family --hbase-row-key id
![Logo](https://devpress.csdnimg.cn/79de2bf0b7994defa4242ef90d5513fa.jpg)
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)