Sqoop数据迁移

本文介绍了Sqoop作为数据迁移工具在Hadoop和关系数据库间的作用,包括导入(从数据库到Hadoop)、导出(从Hadoop到数据库)及增量导入的原理和操作,还详细阐述了不同场景下的数据格式选择,如导入到HDFS、Hive和HBase,并讲解了如何使用Sqoop Job进行任务管理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Sqoop简介

1.概念:Sqoop是一个用于在Hadoop和关系数据库之间传输数据的工具
(1)导入:从关系型数据库到Hadoop平台
(2)导出:从Hadoop平台到关系型数据库
(3)本质:将导入导出命令翻译成MapReduce程序并行执行
(4)场景:常用于数仓中业务数据导入

2.目标用户
(1)系统管理员、数据库管理员
(2)大数据分析师、大数据开发工程师等

Sqoop命令

1.导入(sqoop import)
(1)从RDB导入表到HDFS
①常规导入

sqoop import 
--connect jdbc:mysql://192.168.228.152:3306/retail_db //配置数据库连接为MySQL中数据库
--driver com.mysql.jdbc.Driver--table customers
--username root 
--password 12345
--target-dir /data/retail_db/customers //导入指定目录
-m 3 //表示Mapper数量

②通过where语句过滤导入表中

sqoop import 
--connect jdbc:mysql://192.168.228.152:3306/retail_db 
--table orders
--where "order_id < 500" //指定where条件
--username root 
--password 12345
--delete-target-dir //如果目标文件存在,则删除
--target-dir /data/orders
-m 3

③通过COLUMNS过滤导入表

sqoop import 
--connect jdbc:mysql://192.168.228.152:3306/retail_db 
--table user
--columns "order_id,order_date,order_customer_id" //导入指定列
--username root 
--password 12345
--delete-target-dir
--target-dir /data/user
-m 3

④使用query方式导入数据
注: C O N D I T I O N S : 使 用 w h e r e 子 句 必 须 添 加 , 如 果 q u e r y 后 面 使 用 的 是 双 引 号 , 则 CONDITIONS:使用where子句必须添加,如果query后面使用的是双引号,则 CONDITIONS:使wherequery使CONDITIONS前面必须加转义符,防止Shell识别为自己的变量
split-by:用于指定分割的列

sqoop import 
--connect jdbc:mysql://192.168.228.152:3306/retail_db 
--query "select * from orders where order_status != 'CLOSED' and \$CONDITIONS" 
--username root 
--password 12345
--split-by order_status
--delete-target-dir
--target-dir /data/order_stauts
-m 3

⑤使用Sqoop增量导入数据
incremental指定增量导入的模式
append:追加数据记录
lastmodified:可追加更新的数据

sqoop import 
--connect jdbc:mysql://192.168.228.152:3306/retail_db 
--table orders
--username root 
--password 12345
--incremental append //增量导入方式为append 追加数据至已经存在的HDFS数据集
--check-column order_date //指定递增的列
--last-value '2014-04-15' //指定上一次导入的最大值
--target-dir /data/orders
-m 3

⑥导入文件格式
导入时指定文件格式参数
–as-textfile 导入数据为text文件(默认)
–as-avrodatafile 导入数据为avro文件
–as-sequencefile 导入数据为sequence文件
–as-parquetfile 导入数据为parquet文件

sqoop import 
--connect jdbc:mysql://192.168.228.152:3306/hr 
--table orders
--username root    
--password 12345
--delete-target-dir
--target-dir /data/orders
-m 3
--as-sequencefile

(2)从RDB导入数据到Hive
①直接导入数据到Hive
–create-hive-table:自动创建表,生产中一般不使用
–hive-overwrite:覆盖原有表数据

sqoop import 
--connect jdbc:mysql://192.168.228.152:3306/retail_db 
--table orders
--username root 
--password 12345
--hive-import //通过hive-import指定导入到Hive
--create-hive-table //指定创建一个新的hive表,如果表已经存在则报错
--hive-database retail_db
--hive-table orders
-m 3

②导入数据到Hive分区

sqoop import 
--connect jdbc:mysql://hadoop102:3306/retail_db 
--query "select order_id, order_status from orders where order_date >= '2014-07-24' and order_date < '2014-07-26'           and \$CONDITIONS"
--username root
--password 12345
--target-dir /user/data/orders
--split-by order_status
--hive-import
--hive-table eShop.orders
--hive-partition-key "order_date" //指定分区字段
--hive-partition-value "20140724" //指定分区值
-m 3

(3)从RDB导入数据到HBase
导入MySQL数据到HBase

sqoop import 
--connect jdbc:mysql://192.168.228.152:3306/retail_db 
--username root
--password 12345
--driver com.mysql.jdbc.Driver 
--table products //指定导入HBase的表
--columns "product_id, product_name, product_description, product_price, product_image" 
--hbase-table products 
--column-family data 
--hbase-row-key product_id 
-m 3

2.导出(sqoop export)
(1)导出HDFS数据到MySQL
①在MySQL中创建表
②导出数据到MySQL

sqoop export 
--connect jdbc:mysql://192.168.228.152:3306/retail_db 
--username root 
--password 12345
--table customers_demo  
--export-dir /customerinput 
-m 1

3.sqoop job使用
(1)创建job进行增量导入

sqoop job \
--create sqoop_time \
-- import \
--connect jdbc:mysql://192.168.228.152:3306/retail_db \
--username root \
--password 12345 \
--table orders \
--hive-import \
--hive-table retail_db.orders \
--fields-terminated-by '\t' \
--lines-terminated-by '\n' \
--incremental append \
--check-column order_date \
--last-value '2014-07-26 00:00:00'

(2)查看job

sqoop job --list

(3)执行job

sqoop job --exec sqoop_time

(4)删除job

sqoop job --delete sqoop_name
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值