使用Sqoop导入数据

1.RDBMS到HDFS

Sqoop把关系型数据库(这里以mysql为例)的数据导入到HDFS中,主要分为两步

          *得到元数据(mysql数据库中的数据)

          *提交map

这样流程就很清晰了,首先连接到mysql数据库得到表中的数据,然后进行map任务即可

1)先在mysql中创建一张表

create table ys.test(id int(4) primary key not null auto_increment, name varchar(255), sex varchar(255));

2)全部导入

bin/sqoop import \
--connect jdbc:mysql://172.17.0.5:3306/ys \
--username root \
--password root \
--table test \
--target-dir /user/company \
--delete-target-dir \
--num-mappers 1 \
--fields-terminated-by "\t"

参数说明:

--target-dir   :指定导入数据到hdfs的位置

--delete-target-dir :  如果导入数据到hdfs的位置目录已存在,则删除

--num-mappers   :指定mapper任务的个数,默认是有4个

--fields-terminated-by "\t"   :  指定导入数据到hdfs时每一列数据的分隔符,mysql数据导入到hdfs中默认的列分隔符是“,”,默认的行分隔符是"\n"

Sqoop导入数据到HDFS具体执行流程:

      *将命令自动生成相应的java类

      *将java代码编译成jar包

      *执行jar包

      *执行mapreduce(对import来说,只运行map任务)

3)查询导入

bin/sqoop import \
--connect jdbc:mysql://172.17.0.5:3306/ys \
--username root \
--password root \
--target-dir /user/test \
--delete-target-dir \
--num-mappers 1 \
--fields-terminated-by "\t" \
--query 'select name,sex from test where id <=1 and $CONDITIONS;'

注意:    局部导入数据使用的是--query参数,不能与--table参数一起使用,where语句后面必须跟$CONDITIONS,--query后边如果是双引号,$CONDITIONS必须加\,避免shell识别为自己的变量,如果是多个mapper任务的话,还需要加入--split-by参数来指定分割的字段名称,$CONDITIONS就是标记当前mapper从哪个数据段开始读

4)导入指定列

bin/sqoop import \
--connect jdbc:mysql://172.17.0.5:3306/ys \
--username root \
--password root \
--target-dir /user/test \
--delete-target-dir \
--num-mappers 1 \
--fields-terminated-by "\t" \
--columns id,sex \
--table test

5)使用Sqoop关键字筛选查询导入数据

bin/sqoop import \
--connect jdbc:mysql://172.17.0.5:3306/ys \
--username root \
--password root \
--target-dir /user/test \
--delete-target-dir \
--num-mappers 1 \
--fields-terminated-by "\t" \
--table test \
--where "id=1"

注意:  在 Sqoop 中可以使用 sqoop import -D property.name=property.value 这样的方式加入执行任务的参数,多个参数用空格隔开

2.RDBMS到Hive

bin/sqoop import \
--connect jdbc:mysql://172.17.0.6:3306/ys \
--username root \
--password root \
--table test \
--num-mappers 1 \
--hive-import \
--fields-terminated-by "\t" \
--hive-overwrite \
--hive-table test_hive

注意:    该过程分为两步,第一步将数据导入到 HDFS,第二步将导入到 HDFS 的数据迁移到 Hive 仓库
              第一步默认的临时目录是/user/root/表名

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值