开发者学堂课程【Sqoop 企业级大数据迁移方案实战:导出 Export--默认模式导出(Insert)】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/718/detail/12841
导出 Export--默认模式导出(Insert)
一、默认模式导出
所谓的导出,指的是数据从我们 Hadoop 生态体系来到我们关系型数据库当中,这个过程叫做导出
在进行数据导出有个非常重要的前提,叫做目标表必须存在于目标数据库当中。
export 有三种模式:
默认操作是从将文件中的数据使用 INSERT 语句插入到表中。
更新模式:Sqoop 将生成 UPDATE 替换数据库中现有记录的语句。
调用模式:Sqoop 将为每条记录创建一个存储过程调用。
以下是 export 命令语法:
$sqoop export (generic-args)(ekport-args)
$sqoop export
来进行导出,导出的时候呢,后面需要跟一些参数(例如:generic-args、ekport-args)
1、默认模式导出 HDFS 数据到 mysql
默认情况下,sqoopexport 将每行输入记录转换成一条 INSERT 语句,添加到目标数据库表中。如果数据库中的表具有约束条件(例如,其值必须唯一的主键列)并且已有数据存在,则必须注意避免插入违反这些约束条件的记录。如果INSERT 语句失败,导出过程将失败。此模式主要用于将记录导出到可以接收这些结果的空表中。通常用于全表数据导出。
导出时可以是将Hive表中的全部记录或者 HDFS 数据(可以是全部字段也可以部分字段)导出到 Mysql 目标表。
(1)准备 DFS 数据
在 HDFS 文件系统中“/emp/”目录的下创建一个文件 emp data.txt:
1201gopalmanager50000TP
1202,manisha,preader,50000,TP
1203kalilphp dev30000AC
1204,prasanthphp dev,30000AC
1205kranthiadmin20000.TP
1206,satishpgrpdes,20000GR
打开服务器,创建路径,
将以上数据复制过来,结构化的数据文件,保存,上传到 hadoopfs-put emp_data.txt /emp_data/路径上,
(2)手创 mysq 中的目标表
mysqI> USE userdb;
mysqI>CREATE TABLE employee(
id INT NOT NULL PRIMARY KEY
name VARCHAR(20),
deg VARCHAR(20),
salary INT,
dept varchar(10));
建表语法,创建一个表叫 employee,第一个字段叫 id,int 类型,不为空的主键,第二个 name 是 VARCHAR,以上这些类型是 mysql 类型,右键运行刷新,发现左侧多出一张表叫 employee,
在用 Sqoop 进行导出的时候,你必须自己根据数据提前手动的去创建表结构,你创建什么样决定了你导出能不能成功。
然后执行导出命令:
bin/sqoop export \
--connect jdbc:mysgl://node-1:3306/userdb\
--username root\
--password hadoop\
--table employee\
--export-dir /emp data/
bin 下的 sqoop export 导出,把数据连接到 JDBCmysgl://node-1:3306/userdb 这个地址下,username root 用户名,password hadoop 密码,employee 表名,导出的路径在emp data路径下。
将以上代码复制,运行,刷新,会发现数据已经导入进来了。
底层执行,打开文件,读一行文件进行切割,往数据库做一个 insert 语句,所以底层就是 insert 插入。
小记:
数据导出操作
1、注意:导出的目标表需要自己手动提前创建也就是sgoop 并不会帮我们创建复制表结构
2、导出有三种模式:
(1)默认模式目标表是空表底层把数据一条条 insert 进去
(2)更新模式底层是 update 语包
(2)调用模式调用存储过程