大数据理论与实践6 分布式ETL工具Sqoop

本文介绍了大数据ETL过程中的重要工具Sqoop,它主要用于在Hadoop和关系数据库之间进行数据迁移。Sqoop支持多种数据库连接,包括MySQL、PostgreSQL等,并提供了批量导入导出功能。文章详细讲解了Sqoop的命令行用法,如列出数据库、导入数据等,并讨论了全量数据和增量数据导入的策略。同时,还提到了性能优化,如Map任务数量的控制,以提升数据导入效率。
摘要由CSDN通过智能技术生成

ETL是指数据收集层,指的是数据抽取(Extract)、转换(Transform)、加载(Load),在真正的大数据工作中,很大的工作量都在做这一块的内容。

Sqoop简介

只要用于在Hadoop和关系数据库之间进行批量数据迁移的工具。
Hadoop:HDFS、Hive/Inceptor、HBase/Hyperbase
基于MapReduce实现面向大数据集的批量导入导出,将输入数据集分为N个切片,然后启动N个Map任务并行传输(Sqoop 1不进行Reduce)。
提供多种Sqoop连接器:内置的有经过优化的专用RDBMS连接器(MySQL、PostgreSQL、Oracle、DB2、SQL Server、Netzza等)以及通用的JDBC连接器(支持JDBC协议的数据库),也支持第三方的连接器(数据仓库:Teradata(MPP)NoSQL数据库:Couchbase(文档数据库))

但是目前Sqoop发展的一般,Sqoop 2的开发效果一般,项目发展不顺利。这里主要介绍Sqoop1的内容。Sqoop 1和2完全不兼容。

Sqoop原理

数据导入

RDBMS → Hadoop
在这里插入图片描述
在这里插入图片描述

Sqoop使用

安装测试

# 列出MySQL中的所有数据库
sqoop list-databases --connect jdbc:mysql://192.168.0.123:3316/ --username root --password transwarp

Sqoop命令的两种形式:

  1. 命令行
sqoop list-databases --connect jdbc:mysql://192.168.0.123:3316/ --username root --password transwarp
sqoop --options-file /users/home/work/import.txt
  1. 命令行 + 配置文件
list-databases
--connect
jdbc:mysql://192.168.0.123:3316/
--username
root
--password
*****

基本用法

列出RDBMS的所有数据库

# 明文密码
sqoop list-databases \
--connect jdbc:mysql://192.168.0.123:3316/ \
--username root \
--password 123456
# 手工输入密码
sqoop list-databases \
--connect jdbc:mysql://192.168.0.123:3316/ \
--username root \
-P
# 密码文件
sqoop list-databases \
--connect jdbc:mysql://192.168.0.123:3316/ \
--username root \
--password-file file:/root/pwd
Command OptionsDescription
list-databases列出所有数据库
–connectJDBC连接
–username用户名
–password明文密码
-P手工输入密码
–password-file密码文件(400权限)

列出数据库的所有表

Command OptionsDescription
list-tables列出所有表
–connectJDBC连接
–username用户名
–password明文密码
-P手工输入密码
–password-file密码文件(400权限)

全量数据导入

Command OptionsDescription
import数据导入
–querySQL查询语句
–target-dirHDFS目标目录(确保目录不存在,否则会报错)
–fields-terminated-by列分隔符
–hive-drop-import-delims删除数据中包含的Hive默认分隔符(^A, ^B, \n)
–null-stringstring类型空值的替换符(Hive中Null用\n表示)
–null-non-string非string类型空值的替换符
–split-by数据切片字段(int类型,m>1时必须指定)
-mMap任务数,默认为4

基于递增列的增量数据导入(Append方式)

Command OptionsDescription
–incremental append基于递增列的增量导入(将递增列大于阈值的所有数据增量导入Hadoop)
–check-column递增列(int)
–last-value阈值(int)

基于时间列的增量数据导入(LastModified方式)

Command OptionsDescription
–incremental lastmodified基于时间列的增量导入(将时间列大于等于阈值的所有数据增量导入Hadoop)
–merge-key合并列(主键,合并键值相同的记录)
–check-column时间列(timestamp)
–last-value阈值(timestamp)

并发度控制

数据导入的性能瓶颈:RDBMS和Hadoop集群的网络带宽以及RDBMS的IO限制。
数据导入的性能可按每个Map任务的处理速度5~10MB/s做估算。Map任务并非越多越好,过多的Map会导致RDBMS发生IO抢占,反而降低整体性能。
RDBMS的导出速度控制在60~80MB/s。实战中一般设置4-8个Map任务,通过Query人工均匀切分数据。

参考

课程内容来自:南京大学+星环科技课程,大数据大数据理论与实践课程

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值