Sqoop的简单使用案例之数据导入

举报
WHYBIGDATA 发表于 2023/03/18 08:27:00 2023/03/18
【摘要】 Sqoop的简单使用案例之数据导入

Sqoop的简单使用案例之数据导入



写在前面

  • Hadoop版本:Hadoop-3.1.3
  • Linux版本:CentOS7.5
  • Sqoop版本:Sqoop-1.4.6
  • MySQL版本:MySQL5.7
  • Hive版本:Hive-3.1.2
  • HBase版本:HBase-2.0.5

导入数据的演示说明

在Sqoop中,「导入」概念指:从非大数据集群(RDBMS)向大数据集群(HDFSHIVEHBASE)中传输数据,叫做:导入,即使用 import 关键字。

以下有关sqoop的导入命令都需要先进入到sqoop的安装目录下

RDBMS到HDFS

  • 确定MySQL服务开启正常

可以参考这篇文章:https://developer.aliyun.com/article/597860

[root@node01 /]# service mysqld start (5.0版本是mysqld)

[root@node01 etc]# service mysql start (5.5.7版本是mysql)
  • 查看MySQL进程|状态
[whybigdata@node01 sqoop-1.4.6]# service mysql status
[whybigdata@node01 sqoop-1.4.6]# ps aux | grep mysql
  • 在MySQL中新建一张表并插入一些数据
[whybigdata@node01 sqoop-1.4.6]# mysql -uroot -p123456

mysql> create database company;
mysql> create table company.staff(id int(4) primary key not null auto_increment, name varchar(255), sex varchar(255));
mysql> insert into company.staff(name, sex) values('Thomas', 'Male');
mysql> insert into company.staff(name, sex) values('Catalina', 'FeMale');
  • 导入数据

(1)全部导入

关系型数据库通过sqoop数据导入到HDFS的shell命令如下所示:

[whybigdata@node01 sqoop-1.4.6]# bin/sqoop import \
--connect jdbc:mysql://node01:3306/company \
--username root \
--password 123456 \
--table staff \
--target-dir /user/company \
--delete-target-dir \
--num-mappers 1 \
--fields-terminated-by "\t"

参数解析

--delete-target-dir : 若目标路径已经存在,则先删除掉它

--num-mappers:指定sqoop数据导入时的mapper数量

注意:Shell命令如果要换行,需要在行尾使用 \ 作为标识符,以便系统明白你的用意

(2)查询导入

[whybigdata@node01 sqoop-1.4.6]# bin/sqoop import \
--connect jdbc:mysql://node01:3306/company \
--username root \
--password 123456 \
--target-dir /user/company \
--delete-target-dir \
--num-mappers 1 \
--fields-terminated-by "\t" \
--query 'select name,sex from staff where id <=1 and $CONDITIONS;'

提示:must contain ‘$CONDITIONS’ in WHERE clause.

如果query后使用的是双引号,则 $CONDITIONS 前必须加转移符,防止shell识别为自己的变量。

参数解析

  • --query :指定查询的SQL语句

(3)导入指定列

我们可以通过--columns参数来执行导入数据的列,相对应的shell命令如下所示:

[whybigdata@node01 sqoop-1.4.6]# bin/sqoop import \
--connect jdbc:mysql://node01:3306/company \
--username root \
--password 123456 \
--target-dir /user/company \
--delete-target-dir \
--num-mappers 1 \
--fields-terminated-by "\t" \
--columns id,sex \
--table staff

提示:columns中如果涉及到多列,用逗号分隔,分隔时不要添加空格

(4)使用sqoop关键字筛选查询导入数据

我们可以通过--where参数来作为过滤条件,筛选出合适的数据,相对应的shell命令如下所示:

[whybigdata@node01 sqoop-1.4.6]# bin/sqoop import \
--connect jdbc:mysql://node01:3306/company \
--username root \
--password 123456 \
--target-dir /user/company \
--delete-target-dir \
--num-mappers 1 \
--fields-terminated-by "\t" \
--table staff \
--where "id=1"

RDBMS到Hive

关系型数据库通过sqoop数据导入到Hive的shell命令如下所示:

[whybigdata@node01 sqoop-1.4.6]# bin/sqoop import \
--connect jdbc:mysql://node01:3306/company \
--username root \
--password 123456 \
--table staff \
--num-mappers 1 \
--hive-import \
--fields-terminated-by "\t" \
--hive-overwrite \
--hive-table staff_hive

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

数据导入到Hive所涉及到的关键词有:--hive-import--hive-table--hive-overwrite

RDBMS到Hbase

关系型数据库通过sqoop数据导入到HBase的shell命令如下所示:

[whybigdata@node01 sqoop-1.4.6]# bin/sqoop import \
--connect jdbc:mysql://node01:3306/company \
--username root \
--password 123456 \
--table staff \
--columns "id,name,sex" \
--column-family "info" \
--hbase-create-table \
--hbase-row-key "id" \
--hbase-table "hbase_company" \
--num-mappers 1 \
--split-by id

提示:sqoop1.4.6只支持HBase1.0.1之前的版本的自动创建HBase表的功能

解决方案:手动创建HBase表

hbase> create 'hbase_company','info'

(5)在HBase中scan这张表得到表的数据

hbase> scan 'hbase_company'

全文结束!

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。