1、抽取OLTP的数据
2、抽取日志数据
3、通过接口抽取第三方数据
1、数据清洗
丢弃一些异常数据
处理一些脏数据
处理一些重复数据
2、数据的格式转换
日期:
crate_time year month day
2022-12-23 --> 2022 12 23
2022-1-1 --> 2022-01-01
字符串转换:
"path/list" --> path/list
json数据 --> 解析
1、全量加载
数据全部加载
2、增量加载
每次只加载新增或者修改数据
特点:
1:图形化操作
2:底层是Java
3: 支持集群
4: 数据量大时,性能一般
特点:
1:图形化操作
2:采集数据时会造成大量的IO操作,性能一般
特点:
1:单进程,多线程
2:不能支撑海量数据的迁移操作
特点:
1:为Hadoop而生
2:底层是MapReduce
3:支撑大数据量的数据迁移工作
1、Sqoop的导入导出
导入: RDBMS -----> Hadoop平台
导出: Hadoop平台 -----> RDBMS
2、Sqoop的重点是写导入导出的命令
3、Sqoop的底层是没有Reduce的MR
Sqoop这是机械性将数据源的数据一条条进行搬移,不需要对数据做额外的聚合,所以不需要Reduce
- #split-by后边的字段是数字类型
- sqoop import \
- --connect jdbc:mysql://192.168.88.80:3306/userdb \
- --table emp \
- --username root \
- --password 123456 \
- --target-dir /sqoop/result3 \
- --delete-target-dir \
- --fields-terminated-by '\t' \
- --split-by id \
- --m 2
-
- #如果你要指定多个maptask来完成数据的导入,也就是--m参数的值不是1,则必须添加一个参数--split-by
- #该参数用来指定你原表的数据如何分配给多个线程来实现导入
- #--split-by id 内部原理是获取id的最小值和id的最大值,进行平均划分
- SELECT MIN(`id`), MAX(`id`) FROM `emp`
-
-
- #如果split-by后边的字段是字符串类型,则需要添加以下内容
- -Dorg.apache.sqoop.splitter.allow_text_splitter=true \
- sqoop import \
- --connect jdbc:mysql://192.168.88.80:3306/userdb \
- --username root \
- --password 123456 \
- --target-dir /sqoop/result5 \
- --query 'select id,name,deg from emp WHERE id>1203 and $CONDITIONS' \
- --delete-target-dir \
- --fields-terminated-by '\t' \
- --m 1