网站首页 > 教程分享 正文
首先我们已经安装好sqoop了,如果没有安装好参考文档《基于CentOS6.5-Hadoop2.7.3-hive-2.1.1安装sqoop1.4.7》
准备一些基本的认识
1、sqoop分为了sqoop1和sqoop2
2、sqoop2拆分server和client,类似于hiveserver2和beeline
3、sqoop早期是一些封装MR程序,以jar文件的形式,最后才演变成了框架
4、用于在hadoop和结构化数据库之间的高效传输批量数据的工具
下面我们开始做一些简单是使用,熟悉sqoop的使用方式
查看帮助信息:bin/sqoop help
连接mysql
bin/sqoop list-databases --connect jdbc:mysql://mastercdh:3306/ --username root --password password
可以将数据库罗列出来,显示mysql数据库说明安装成功
从关系型数据库中导入到HDFS(rdbms -> hdfs)
在mysql中创建一个库和表,方便我们练习
create table importhdfs(
id int primary key not null,
name varchar(20) not null
);
插入数据
insert into importhdfs values(1,'x1');
insert into importhdfs values(2,'x2');
insert into importhdfs values(3,'x3');
insert into importhdfs values(4,'x4');
insert into importhdfs values(5,'x5');
使用命令导入数据(注意反斜杠,反斜杠后面不能有空格等)
bin/sqoop import \
--connect jdbc:mysql://mastercdh:3306/sqoop_test \
--username root \
--password password \
--table importhdfs
我们可以看reduce数量,sqoop不运行reduce
或者
那么我们的数据在哪里?
搜索outputdir,就可以看到目录
hdfs://mastercdh:8020/user/root/importhdfs
我们就可以看到数据了
我们查看下数据
bin/hdfs dfs -text /user/root/importhdfs/part-m-00001
我们也可以
控制map任务的个数 -m,--num-mappers
输出目录路径如果存在则删除--delete-target-dir
指定输出目录 --target-dir
运行下
bin/sqoop import \
--connect jdbc:mysql://mastercdh:3306/sqoop_test \
--username root \
--password password \
--delete-target-dir \
--target-dir /sqoop_test \
--table importhdfs \
-m 1
我们查看数据
bin/hdfs dfs -text /sqoop_test/part-m-00000
这个数据分隔符是逗号
1,x1
2,x2
3,x3
4,x4
5,x5
我们可以指定数据输出分隔符(mysql默认是 ',')
分隔符参数fields-terminated-by
命令
bin/sqoop import \
--connect jdbc:mysql://mastercdh:3306/sqoop_test \
--username root \
--password password \
--delete-target-dir \
--target-dir /sqoop_test \
--table importhdfs \
-m 1 \
--fields-terminated-by "\t"
查看下数据
bin/hdfs dfs -text /sqoop_test/part-m-00000
其中有个日志信息
指定快速模式 --direct
命令
bin/sqoop import \
--connect jdbc:mysql://mastercdh:3306/sqoop_test \
--username root \
--password password \
--direct \
--delete-target-dir \
--target-dir /sqoop_test \
--table importhdfs \
-m 1 \
--fields-terminated-by "\t"
bin/hdfs dfs -text /sqoop_test/part-m-00000
增量导入,从原有的数据上进行追加数据。比如mysql中表数据变化了,那么我重新执行sqoop,会把HDFS上的数据删除,这不符合我们的要求,我们只希望在原来的基础上添加数据。
首先了解三个参数
--check-column (col):指定要导入时检查的列,行的检测列,一般都是拿主键作为检测列。注意:char、varchar类型不可以使用
--incremental (mode):有两种模式:append 和 lastmodifuied
append :追加 lastmodifuied:时间戳
--last-value (value):指定上次导入检测列最后字段的最大值,也就是最后一个值
在append模式下
增加几条数据
insert into importhdfs values(5,'x5');
insert into importhdfs values(6,'x6');
insert into importhdfs values(7,'x7');
insert into importhdfs values(8,'x8');
insert into importhdfs values(9,'x9');
注意:append和--delete-target-dir不能同时使用
bin/sqoop import \
--connect jdbc:mysql://mastercdh:3306/sqoop_test \
--username root \
--password password \
--direct \
--target-dir /sqoop_test \
--table importhdfs \
-m 1 \
--fields-terminated-by "\t" \
--check-column id \
--incremental append \
--last-value 5
会有很多信息
查看
查看
bin/hdfs dfs -text /sqoop_test/part-m-00000
bin/hdfs dfs -text /sqoop_test/part-m-00001
在lastmodifuied模式下
如果check-column是时间列time的话
--check-column time time列下面的数据,指定的就是你添加数据时最后的时间戳
--last-value"2019-12-19 19:04:07" 最后一行的时间戳
创建表
create table inc_tab(
id int,
name varchar(20),
last_mod timestamp default current_timestamp on update current_timestamp
);
添加数据
insert into inc_tab(id,name) values(1,'inc1');
insert into inc_tab(id,name) values(2,'inc2');
insert into inc_tab(id,name) values(3,'inc3');
insert into inc_tab(id,name) values(4,'inc4');
insert into inc_tab(id,name) values(5,'inc5');
执行sqoop命令
bin/sqoop import \
--connect jdbc:mysql://mastercdh:3306/sqoop_test \
--username root \
--password password \
--table inc_tab \
--target-dir /sqoop_test_inc \
--fields-terminated-by '\t' \
--num-mappers 1
查看数据
bin/hdfs dfs -text /sqoop_test_inc/part-m-00000
再添加几条数据
insert into inc_tab(id,name) values(6,'inc6');
insert into inc_tab(id,name) values(7,'inc7');
insert into inc_tab(id,name) values(8,'inc8');
使用lastmodifuied模式进行增量导入指定增量数据是以--append(附加)还是 --merge-key(合并)模式进行添加
bin/sqoop import \
--connect jdbc:mysql://mastercdh:3306/sqoop_test \
--username root \
--password password \
--table inc_tab \
--target-dir /sqoop_test_inc \
--check-column last_mod \
--fields-terminated-by '\t' \
--incremental lastmodified \
--last-value "2019-12-20 03:13:51" \
--num-mappers 1 \
--merge-key id
bin/hdfs dfs -text /sqoop_test_inc/part-r-00000
这个地方是有reduce的
这些命令我们可以使用job执行:sqoop job
bin/sqoop job --create job01 创建
bin/sqoop job --delete 删除任务
bin/sqoop job --exec 执行job
bin/sqoop job --show 显示job的详细信息
bin/sqoop job --list 显示可执行的job
示例语句:
sqoop job --create myjob -- import --connect jdbc:mysql://example.com/db \
--table mytable
我们做个练习
先导入数据
insert into importhdfs values(11,'x11');
insert into importhdfs values(12,'x12');
insert into importhdfs values(13,'x13');
insert into importhdfs values(14,'x14');
insert into importhdfs values(15,'x15');
执行命令
bin/sqoop job \
--create job_importhdfs \
-- \
import \
--connect jdbc:mysql://mastercdh:3306/sqoop_test \
--username root \
--password password \
--direct \
--target-dir /sqoop_test \
--table importhdfs \
-m 1 \
--fields-terminated-by "\t" \
--check-column id \
--incremental append \
--last-value 10
我们查看是否成功
我们执行一下
bin/sqoop job --exec job_importhdfs
执行job的时候会确认密码,指定成mysql的登录密码
我们查看数据
可以选择行列
导出某几列数据或者几行数据
bin/sqoop import \
--connect jdbc:mysql://mastercdh:3306/sqoop_test \
--username root \
--password password \
--direct \
--delete-target-dir \
--target-dir /where_test_importhdfs \
--table importhdfs \
-m 1 \
--fields-terminated-by "\t" \
--where 'id<6'
查看数据
bin/hdfs dfs -text /where_test_importhdfs/part-m-00000
导出某几列
--query使用要点:
不能使用--table
如果--query的sql语句带着where字句,
必须要加上标识符$CONDITIONS
查看数据
bin/hdfs dfs -text /where_test_importhdfs_sql/part-m-00000
猜你喜欢
- 2024-09-09 彻底告别python第三方包import问题!只需要7行代码(码住)
- 2024-09-09 python每日一练之如何copy(python copy)
- 2024-09-09 你知道import Vue from 'vue' 吗?
- 2024-09-09 spring中的@import/@ImportResource注解
- 2024-09-09 Spring中@Import注解详解(spring import注解原理)
- 2024-09-09 python首行代码import *,from * import * 解析
- 2024-09-09 Import注解的理解(java @import注解)
- 2024-09-09 link与@import的区别和分别对应的例子
- 2024-09-09 第五章 import导入第三方库或者模块
- 2024-09-09 ES6模块化一缕(export、import)(es6模块化引入)
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- css导航条 (66)
- sqlinsert (63)
- js提交表单 (60)
- param (62)
- parentelement (65)
- jquery分享 (62)
- check约束 (64)
- curl_init (68)
- sql if语句 (69)
- import (66)
- chmod文件夹 (71)
- clearinterval (71)
- pythonrange (62)
- 数组长度 (61)
- javafx (59)
- 全局消息钩子 (64)
- sort排序 (62)
- jdbc (69)
- php网页源码 (59)
- assert h (69)
- httpclientjar (60)
- postgresql conf (59)
- winform开发 (59)
- mysql数字类型 (71)
- drawimage (61)
本文暂时没有评论,来添加一个吧(●'◡'●)