概述:

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的优缺点:
sqoop1sqoop2
架构仅仅使用一个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.增量导入两种方式
appendlastmodified两种方式
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

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐