四、Sqoop的简单使用案例
一、导入数据
大致过程:
导入数据:import
Sqoop import
连接MySQL
用户名
密码
导入的那张表(MR-输入)
导入到HDFS的目录(MR-输出)
判断目录是否存在,如果存在就删除~
设置Map的数量、设置数据导入到文件当中的格式-比如:分隔符
在Sqoop中,“导入”概念指:从非大数据集群(RDBMS)向大数据集群(HDFS,HIVE,HBASE)中传输数据,叫做:导入,即使用import关键字。
二、RDBMS到HDFS
1) 确定Mysql服务开启正常
2) 这个可以先略-Mysql中命令行创建表:
在Mysql中新建一张表并插入一些数据
$ mysql -uroot -p000000 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'); |
3) 导入数据
先新建一个名为test的数据库:
再新建一张表student:
注意:要启动集群:因为要上传到HDFS
(1)全部导入(整张表导入)
$ bin/sqoop import \ --connect jdbc:mysql://bigdata111:3306/test \ --username root \ --password 000000 \ --table student \ --target-dir /user/MYSQLTOHDFS/student \ --delete-target-dir \ --num-mappers 1 \ --fields-terminated-by "\t" |
参数无先后,这是个逻辑上的顺序~
查看HDFS文件:
查看上传上去的student文件夹中的内容:
[root@bigdata111 sqoop-1.4.6]# hdfs dfs -cat /user/MYSQLTOHDFS/student/*
(2)查询导入
$ bin/sqoop import \ --connect jdbc:mysql://bigdata111:3306/test \ --username root \ --password 000000 \ --target-dir /user/MYSQLTOHDFS/student \ --delete-target-dir \ --num-mappers 1 \ --fields-terminated-by "\t" \ --query 'select name,sex from student where id <=6 and $CONDITIONS;' |
尖叫提示:must contain '$CONDITIONS' in WHERE clause.单引号的话$就不用转义符号\
注:CONDITIONS 翻译‘条件’
尖叫提示:如果query后使用的是双引号,则$CONDITIONS前必须加转义符\,防止shell识别为自己的变量。
(3)导入指定列
$ bin/sqoop import \ --connect jdbc:mysql://bigdata111:3306/test \ --username root \ --password 000000 \ --target-dir /user/MYSQLTOHDFS/student \ --delete-target-dir \ --num-mappers 1 \ --fields-terminated-by "\t" \ --columns id,name \ --table student |
尖叫提示:columns中如果涉及到多列,用逗号分隔,分隔时不要添加空格
解释输入的命令行:
sqoop import \
#sqoop 导入 换行
--connect jdbc:mysql://bigdata111:3306/test \
#连接数据库用jdbc连接:mysql数据库://数据库所在的主机名:MySQL指定端口3306/数据库名 换行
--username root \
#用户名 换行
--password 000000 \
#密码 换行
--target-dir /user/MYSQLTOHDFS/student \
#指定上传到到HDFS上的目录 换行(target-目标)
--delete-target-dir \
#如果存在就删除这个目录 换行
--num-mappers 1 \
#map的数量 换行
--fields-terminated-by "\t" \
#每列的分隔符 换行
--columns id,name \
#选取的列的名字 换行
--table student
#选择的数据库名
(4)使用sqoop关键字筛选查询导入数据
$ bin/sqoop import \ --connect jdbc:mysql://bigdata111:3306/test \ --username root \ --password 000000 \ --target-dir /user/MYSQLTOHDFS/student \ --delete-target-dir \ --num-mappers 1 \ --fields-terminated-by "\t" \ --table student \ --where "id=2" |
尖叫提示:在Sqoop中可以使用sqoop import -D property.name=property.value这样的方式加入执行任务的参数,多个参数用空格隔开。