Sqoop学习笔记

1.1、何为Sqoop?
Sqoop(SQL-to-Hadoop)是一款开源的工具,主要用于在Hadoop(Hive)与传统的数据库(mysql、postgresql…)间进行数据的传递,可以将一个关系型数据库(例如 : MySQL ,Oracle ,Postgres等)中的数据导入到Hadoop的HDFS中,也可以将HDFS的数据导出到关系型数据库中。

1.2、为什么需要用Sqoop?
我们通常把有价值的数据存储在关系型数据库系统中,以行和列的形式存储数据,以便于用户读取和查询。但是当遇到海量数据时,我们需要把数据提取出来,通过MapReduce对数据进行加工,获得更符合我们需求的数据。数据的导入和导出本质上是Mapreduce程序,充分利用了MR的并行化和容错性。为了能够和HDFS系统之外的数据库系统进行数据交互,MapReduce程序需要使用外部API来访问数据,因此我们需要用到Sqoop。

1.3、关系图


1.4、架构图

 


在 mapreduce 中主要是对 inputformat 和 outputformat 进行定制。
Sqoop工具接收到客户端的shell命令或者Java api命令后,通过Sqoop中的任务翻译器(Task Translator)将命令转换为对应的MapReduce任务,而后将关系型数据库和Hadoop中的数据进行相互转移,进而完成数据的拷贝。

 导入到hdfs中:

  1.  sqoop import  

  2.  --connect jdbc:mysql://ip:3306/databasename  #指定JDBC的URL 其中database指的是(Mysql或者Oracle)中的数据库名

  3.  --table tablename  #要读取数据库database中的表名      

  4.  --username root    #用户名

  5.  --password  123456  #密码  

  6.  --target-dir /path  #指的是HDFS中导入表的存放目录(注意:是目录)

  7.  --fields-terminated-by '\t'  #设定导入数据后每个字段的分隔符,默认;分隔

  8.  --lines-terminated-by '\n'  #设定导入数据后每行的分隔符

  9.  --m 1  #并发的map数量1,如果不设置默认启动4个map task执行数据导入,则需要指定一个列来作为划分map task任务的依据

  10.  -- where ’查询条件‘  #导入查询出来的内容,表的子集

  11.  --incremental append  #增量导入

  12.  --check-column:column_id  #指定增量导入时的参考列

  13.  --last-value:num  #上一次导入column_id的最后一个值

  14.  --null-string ‘’  #导入的字段为空时,用指定的字符进行替换

导入到hive中

  1.  --hive-import   #导入到hive

  2.  --hive-overwrite  #可以多次写入

  3.  --hive-database databasename  #创建数据库,如果数据库不存在的必须写,默认存放在default中

  4.  --create-hive-table  #sqoop默认自动创建hive表

  5.  --delete-target-dir  #删除中间结果数据目录

  6.  --hive-table tablename  #创建表名

导入所有的表放到hdfs中:

 sqoop import-all-tables  --connect jdbc:mysql://ip:3306/库名 --username 用户名  --password  密码  --target-dir 导入存放的目录

导出(目标表必须在mysql数据库中已经建好,数据存放在hdfs中):

  1.  sqoop export

  2.  --connect jdbs:mysql://ip:3600/库名 #指定JDBC的URL 其中database指的是(Mysql或者Oracle)中的数据库名

  3.  --username用户名  #数据库的用户名

  4.  --password密码   #数据库的密码

  5.  --table表名     #需要导入到数据库中的表名

  6.  --export-dir导入数据的名称   #hdfs上的数据文件

  7.  --fields-terminated-by ‘\t’    #HDFS中被导出的文件字段之间的分隔符

  8.  --lines-terminated-by '\n'  #设定导入数据后每行的分隔符

  9.  --m 1  #并发的map数量1,如果不设置默认启动4个map task执行数据导入,则需要指定一个列来作为划分map task任务的依据

  10.  --incremental append  #增量导入

  11.  --check-column:column_id  #指定增量导入时的参考列

  12.  --last-value:num  #上一次导入column_id的最后一个值

  13.  --null-string ‘’  #导出的字段为空时,用指定的字符进行替换

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值