Hadoop-3.1.3
CentOS7.5
Sqoop-1.4.6
MySQL5.7
Hive-3.1.2
HBase-2.0.5
在Sqoop中,
「导入」
概念指:从非大数据集群(RDBMS)向大数据集群(HDFS
,HIVE
,HBASE
)中传输数据,叫做:导入,即使用import
关键字。
以下有关sqoop的导入命令都需要先进入到sqoop的安装目录下
可以参考这篇文章:https://developer.aliyun.com/article/597860
[root@node01 /]# service mysqld start (5.0版本是mysqld)
[root@node01 etc]# service mysql start (5.5.7版本是mysql)
[whybigdata@node01 sqoop-1.4.6]# service mysql status
[whybigdata@node01 sqoop-1.4.6]# ps aux | grep 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"
关系型数据库通过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
关系型数据库通过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'
全文结束!