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

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


文章目录

  • Sqoop的简单使用案例之数据导入
    • 写在前面
    • 导入数据的演示说明
      • RDBMS到HDFS
      • RDBMS到Hive
      • RDBMS到Hbase


写在前面

  • 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'

全文结束!

你可能感兴趣的:(大数据常见同步工具,大数据技术栈文档,sqoop,hadoop,mysql,大数据)