sqoop

1、sqoop是什么
  sqoop是一个hadoop(hdfs、hbase、hive)和结构数据库(关系型数据库)之间进行数据整合的工具。

2、sqoop的本质
将sqoop的语句转换成mapreduce来进行转换。


3、sqoop的命令
import:将结构数据库中的数据导入的hdfs中。
export:将hadoop中的数据导出到关系型数据库中。

关系型数据库 <---> hdfs
关系型数据库 ---> hive、hbase


4sqoop的安装
 (1)解压并配置环境变量

(2)、配置配置文件./conf/sqoop-env.sh  (./conf/sqoop-site.xml不用配置即可)

      配置时指定HADOOP_COMMEN_HOME=、 HBASE_HOME=、HIVE_HOME=、

     ZOOCFGDIR=(指定hadoop 、hbase、hivezookeeper、等安装的路径即可)

(3)、将mysql的驱动包cp到sqoop的安装目录下的lib目录下面
      cp /home/mysql-connector-java-5.1.6-bin.jar /usr/local/sqoop-1.4.6/lib/
(4)、测试运行:
    sqoop verison
   sqoop help


5、sqoop的语句()

注意  当需要换行是时 结尾使用 “\”


sqoop list-databases -connect jdbc:mysql://hadoop01:3306/ \
-username root -password root;

sqoop list-tables -connect jdbc:mysql://hadoop01:3306/ywp \
-username root -password root;

(1)、import导入:
sqoop import -connect jdbc:mysql://hadoop02:3306/ywp --driver com.mysql.jdbc.Driver \
-username root -password root \
-table hfile --target-dir /sqo/01;

sqoop import -connect jdbc:mysql://hadoop01:3306/ywp --driver com.mysql.jdbc.Driver \
-username root -password root \
-table hfile -m 1 --fields-terminated-by '\t' --lines-terminated-by '\n' \
--null-string '\\N' --null-non-string '\\N' \
--target-dir /sqo/05;

(2)、import指定列导入:
sqoop import -connect jdbc:mysql://hadoop01:3306/ywp --driver com.mysql.jdbc.Driver \
-username root -password root \
-table hfile -m 1 \
--columns 'id,fname,fpath,owner' \
--fields-terminated-by '\t' --lines-terminated-by '\n' \
--null-string '\\N' --null-non-string '\\N' \
--target-dir /sqo/06;


(3)、import导入到hive表:
sqoop import -connect jdbc:mysql://hadoop01:3306/ywp --driver com.mysql.jdbc.Driver \
-username root -password root \
-table hfile -m 1 \
--columns 'id,fname,fpath,owner' \
--fields-terminated-by '\t' --lines-terminated-by '\n' \
--null-string '\\N' --null-non-string '\\N' \
--create-hive-table --hive-import --hive-overwrite \
--hive-table gp1702.sq1 --delete-target-dir \
;


 (4)\import指定where来导入:
sqoop import -connect jdbc:mysql://hadoop01:3306/ywp --driver com.mysql.jdbc.Driver \
-username root -password root \
-table hfile -m 1 \
--columns 'id,fname,fpath,owner' \
--where 'id > 5' \
--fields-terminated-by '\t' --lines-terminated-by '\n' \
--null-string '\\N' --null-non-string '\\N' \
--target-dir /sqo/08 --delete-target-dir;

(5)、import指定query来导入:
Cannot specify --query and --table together.

sqoop import -connect jdbc:mysql://hadoop01:3306/ywp --driver com.mysql.jdbc.Driver \
-username root -password root -m 1 \
--query 'select id,fname,fpath from hfile WHERE id > 3 and  $CONDITIONS' \
--fields-terminated-by '\t' --lines-terminated-by '\n' \
--null-string '\\N' --null-non-string '\\N' \
--target-dir /sqo/10 --delete-target-dir;

(6)、import指定split-by来导入:

sqoop import -connect jdbc:mysql://hadoop01:3306/ywp --driver com.mysql.jdbc.Driver \
-username root -password root -m 2 -table hfile --split-by id \
--fields-terminated-by '\t' --lines-terminated-by '\n' \
--null-string '\\N' --null-non-string '\\N' \
--target-dir /sqo/12 --delete-target-dir;


(7)、导出到mysql中:
CREATE TABLE `hfile1` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `fname` varchar(255) NOT NULL,
  `fpath` varchar(255) NOT NULL,
  `owner` varchar(45) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=0 DEFAULT CHARSET=utf8;


sqoop export -connect jdbc:mysql://hadoop01:3306/ywp --driver com.mysql.jdbc.Driver \
-username root -password root -table hfile1 -m 1 \
--export-dir '/sqo/07' --update-mode updateonly \
--update-key id \
--input-fields-terminated-by '\t' --input-lines-terminated-by '\n' \
--input-null-string '\\N' --input-null-non-string '\\N' \

;

6、sqoop的import运行机制

Sqoop在import时,需要制定split-by参数。Sqoop根据不同的split-by参数值来进行切分,然后将切分出来的区域分配到不同map中。每个map中再处理数据库中获取的一行一行的值,写入到HDFS中。同时split-by根据不同的参数类型有不同的切分方法,如比较简单的int型,Sqoop会取最大和最小split-by字段值,然后根据传入的num-mappers来确定划分几个区域。比如select max(split_by),min(split-by) from得到的max(split-by)和min(split-by)分别为1000和1,而num-mappers为2的话,则会分成两个区域(1,500)和(501-100),同时也会分成2个sql给2个map去进行导入操作,分别为select XXX from table where split-by>=1 and split-by<500和select XXXfrom table where split-by>=501 and split-by<=1000。最后每个map各自获取各自SQL中的数据进行导入工作。

 7、应用场景

Sqoop可以在HDFS/Hive和关系型数据库之间进行数据的导入导出,其中主要使用了import和export这两个工具。这两个工具非常强大,提供了很多选项帮助我们完成数据的迁移和同步。比如,下面两个潜在的需求:

(1)、业务数据存放在关系数据库中,如果数据量达到一定规模后需要对其进行分析或同统计,单纯使用关系数据库可能会成为瓶颈,这时可以将数据从业务数据库数据导入(import)到Hadoop平台进行离线分析。

(2)、   对大规模的数据在Hadoop平台上进行分析以后,可能需要将结果同步到关系数据库中作为业务的辅助数据,这时候需要将Hadoop平台分析后的数据导出(export)到关系数据库。









  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值