简单了解Sqoop


概述

sqoop是一款开源工具,主要运用在Hadoop(Hive)与传统的数据库(mysql\postgresql等)间进行数据的传递;
它最早是作为hadoop的一个第三方模块存在,后来为了让使用者能快速部署以及迭代开发,最后独立成为Apache项目;
依赖于hadoop,数据并行写入;

传递类型分为两种:
1)import——MySQL导入到HDFS中;
2)export——将HDFS的数据导出到关系型数据库中;

在这里插入图片描述

我们可以将导入或导命令翻译成MapReduce程序来实现,并且不需要reducetask,在其中主要针对inputformat和outformat进行定制。

数据导入

在这里插入图片描述

  • sqoop会通过jdbc来获取需要的数据库的元数据信息,例如:导入的表的列名,数据类型。
  • 这些数据库的数据类型会被映射成为java的数据类型,根据这些信息,sqoop会生成一个与表名相同的类用来完成序列化工作,保存表中的每一行记录。
  • sqoop开启MapReduce作业 。
  • 启动的作业在input的过程中,会通过jdbc读取数据表中的内容,这时,会使用sqoop生成的类进行序列化。
  • 最后将这些记录写到hdfs上,在写入hdfs的过程中,同样会使用sqoop生成的类进行反序列化。

MySQL到HDFS

简单举例导入数据
基础思路:

  • 需要指明是导入import;
  • 之后必须指定所连接的数据库,其用户名和密码;
  • 指定数据库表,最终目标路径,同时注意如果这个目录已经存在,先删除或者使用append参数,表示追加;
  • 指定启动的maptask的个数;
  • hdfs文件数据的分隔符。

在shell命令行实现

sqoop import \ 
--connect jdbc:mysql://hadoop102:3306/sqoop \
--username root \ 
--password 123456 \ 
--table goodtbl \
--target-dir /root/sqoop_hdfs \
--delete-target-dir \
-m 1 \
--fields-terminated-by "\t"

//如果需要导入查询数据 
//两种方式
//1.使用query 不需要指定数据库表,sql语句中有
--query 'select col_name... from tbk_name where 筛选条件 and ¥CONDITIONS'
//查询语句中的where子句中必须包含'$CONDITIONS',也是为了数据分区使用,即使只有1个MapTask;
//若query后使用的是双引号,则$CONDITIONS前必须加转义符,也就是\$CONDITIO
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值