一:sqoop数据的导入
1.使用sqoop将:mysql中的数据导入到HDFS(直接导入)
Step1、确定Mysql服务的正常开启 service mysql status
Step2、在Mysql中创建一张表
mysql> create database company
mysql> create table staff(
id int(4) primary key not null auto_increment,
name varchar(255) not null,
sex varchar(255) not null);
mysql> insert into staff(name, sex) values('Thomas', 'Male');
Step3、使用Sqoop导入数据到HDFS
1. 将mysql数据全部导入hdfs
bin/sqoop import \
--connect jdbc:mysql://hadoop102:3306/company \
--username root \
--password 123456 \
--table staff \
--target-dir /user/company \
--delete-target-dir \
--num-mappers 1 \ = --m 1
--fields-terminated-by "\t"
//如果到这里结束,则默认存放在hdfs上路径为:/user/robot/staff/ ,默认数据用,逗号隔开
2.查询mysql总部分数据导入hdfs中
$ bin/sqoop import
--connect jdbc:mysql://hadoop-senior01.itguigu.com: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 >= 2 and $CONDITIONS;'
3.也算查询导入,导入指定列
$ bin/sqoop import
--connect jdbc:mysql://hadoop-senior01.robot.com: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
4.细化筛选查询导入
$ bin/sqoop import
--connect jdbc:mysql://hadoop-senior01.robot.com:3306/company
--username root
--password 123456
--target-dir /user/company
--delete-target-dir
--num-mappers 1
--fields-terminated-by "\t"
--table staff
--where "id=3"
2使用sqoop将:mysql中的数据导入到HIVE中
实际上先导入到hdfs中,然后在hive中创建一个表,不需要提前创建表,然后把数据源Load进表中。也可以提前创建表,导入到指定的表中
bin/sqoop import\
--connect jdbc:mysql://hadoop102:3306/company \
--username root\
--password 123456\
--table staff\
--target-dir /user/company \
--hive-import\
--m 1\
--fields-terminated-by "\t"
--hive-table company.staff_hive(针对提前创建表,把数据导入的指定表staff_hive中的,staff_hive是否创建无所谓。)
--hive-overwrite
过程详解:
1.底层的mapreduce先将文件上传到hdfs对应的目录,/user/company/下(在执行期间可以在这个目录下看到上传的文件)
2.然后hive在根据数据源创建对应的表
3.将hdfs的数据源导入load进hive的表中。(这时hdfs上的文件因为导入到hive表中,而没有了。新的文件在hive/warehouse目录下)
4.用bin/hive select * from company.staff可以查看数据,或者在user/hive/warehouse目录下查看。
二: Sqoop的数据导出
1. 将数据从HDFS导出到RDBMS数据库
- 导出前,目标表必须存在于目标数据库中。
- 默认操作是从将文件中的数据使用INSERT语句插入到表中
- 更新模式下,是生成UPDATE语句更新表数据
1.首先数据库中根据hdfs表中的属性建立空表
2.然后执行导出命令
3.验证表mysql命令行。
举例:
0.数据是在HDFS 中“EMP/”目录的emp_data文件中。
1.根据hdfs中属性建表
mysql> USE test;
mysql> CREATE TABLE employee (
id INT NOT NULL PRIMARY KEY,
name VARCHAR(20),
deg VARCHAR(20),
salary INT,
dept VARCHAR(10));
2.执行导出命令
bin/sqoop export \
--connect jdbc:mysql://hadoop102/test\
--username root \
--password root \
--table employee \
--export-dir /user/hadoop/emp/
3,在mysql里检查:mysql>select * from employee;
四:sqoop对应的脚本的文件是***.opt文件
使用opt文件打包sqoop命令,然后执行 (sqoop脚本命令参数必须分行)
Step1、创建一个.opt文件
Step2、编写sqoop脚本
export
--connect
jdbc:mysql://hadoop-senior01.robot.com:3306/company
--username
root
--password
123456
--table
staff_mysql
--num-mappers
1
--export-dir
/user/hive/warehouse/company.db/staff_hive
--input-fields-terminated-by
"\t"
Step3、执行该脚本
$ bin/sqoop --options-file opt/job_hffs2rdbms.opt
--------------------- 本文来自 alirobot 的CSDN 博客 ,全文地址请点击:https://blog.csdn.net/qq_26442553/article/details/78741008?utm_source=copy