sqoop介绍及数据迁移

一、Sqoop简介

  • Sqoop是一个用于在Hadoop和关系数据库之间传输数据的工具
  1. 将数据从RDBMS(关系型数据库管理系统)导入到HDFS
    HDFS、Hive、HBase
  2. 从HDFS导出数据到RDBMS
  3. 使用MapReduce导入和导出数据,提供并行操作和容错
  • 目标用户
  1. 系统管理员、数据库管理员
  2. 大数据分析师、大数据开发工程师等

二、从RDB(关系型数据库)导入数据到HDFS

2.1 基本语法
sqoop import 
--connect jdbc:mysql://主机名:3306/hive   //配置数据库连接为Mysql中的数据库 
--driver com.mysql.jdbc.Driver \
--table user \             //指定表
--username root \
--password hadoop \
--target-dir /data/user \        //指定导入的目录
--m 3              //Mapper的数量
  • sqoop-import是sqoop import的别名
2.2 通过Where语句过滤导入表
sqoop import \
--connect jdbc:mysql://主机名:3306/SQL库名 \
--table 表名 \
--where "order_date > '2015-10-10'" \  //指定条件
--username root \
--password hadoop \
--delete-target-dir \           //如果目标目录存在则删除,本质是删除再创建
--target-dir /data/orders \
--m 3
2.3 通过COLUMNS过滤导入表
sqoop import \
--connect jdbc:mysql://主机名:3306/SQL库名 \
--table 表名 \
--columns "host,name,age" \   //导入指定列
--username root \
--password hadoop \
--delete-target-dir \
--target-dir /data/user \
--m 3
2.4 使用query方式导入数据
sqoop import \
--connect jdbc:mysql://主机名:3306/SQL库名 \
--query "select * from 表名 where host != '127.0.0.1' and \$CONDITIONS" \            //所有查询都要以  \$CONDITIONS结束
--username root \
--password hadoop \
--split-by host \                    //指定用于分割数据的列名为host(注:query条件必须有split-by)
--delete-target-dir \
--target-dir /data/user \
--m 3
2.5 使用Sqoop增量导入数据

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

sqoop import \
--connect jdbc:mysql://主机名:3306/SQL库名 \
--table 表名 \
--username root \
--password hadoop \
--incremental append \     //增量导入方式为append追加数据到已经存在的hdfs数据集
--check-column order_date \    //指定递增的列
--last-value '2015-10-10' \    //指定上一次导入的最大值
--target-dir /data/orders \
--m 3

案例:

首次导入数据
--connect jdbc:mysql://hadoop001/students \
--table student \
--where 'sid<=10' \
--username root \
--P \
--target-dir /data/stu \
--m 2

再次增量导入
sqoop import \
--connect jdbc:mysql://hadoop001/students \
--table student \
--where 'sid>10' \
--username root \
--P \
--check-column sid \
--incremental append \
--last-value '10' \
--target-dir /data/stu \
--m 2

三、导入文件格式

  • 导入时指定文件格式参数(注:开头都是两杠)
–as-textfile导入数据为text文件(默认)
–as-avrodatafile导入数据为avro文件
–as-sequencefile导入数据为sequence文件
–as-parquetfile导入数据为parquet文件
sqoop import \
--connect jdbc:mysql://主机名:3306/hive \
--table orders \
--username root \
--password hadoop \
--delete-target-dir \
--target-dir /data/orders \
--m 3 \
--as-sequencefile

四、从RDB导入数据到Hive

4.1 直接导入数据到Hive

–create-hive-table :自动创建表,生产中一般不使用
–hive-overwrite :覆盖原有表数据

sqoop import \
--connect jdbc:mysql://主机名:3306/hive \
--table orders \
--username root \
--password hadoop \
--hive-import \    //通过hive-import指定导入的hive
--create-hive-table \        //指定创建一个新的hive表,如果表已经存在则报错
--hive-database retail_db \    //指定hive中的库
--hive-table orders \          //指定表
--m 3 \
--as-parquetfile

案例:

sqoop import \
--connect jdbc:mysql://hadoop001:3306/students \
--table student \
--username root \
--password ok \
--hive-import \
--hive-database sqooptest \
--hive-table student \
--hive-overwrite \
--m 1
4.2 导入数据到Hive分区
sqoop import \
--connect jdbc:mysql://主机名:3306/hive \
--query "select order_id, order_status from orders where order_date >= '2014-07-24' and order_date < '2014-07-25' and \$CONDITIONS" \
--username root \
--password hadoop \
--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

案例:

导入数据到分区
sqoop import \
--connect jdbc:mysql://hadoop001:3306/students \
--table orders \
--where "order_date between '2013-07-24' and '2013-07-25'" and \$CONDITIONS\
--username root \
--password ok \
--hive-import \
--hive-database sqooptest \
--hive-table orders_p \
--hive-partition-key 'date' \
--hive-partition-value '20200724' \
--hive-overwrite \
--m 1

分区内追加
sqoop import \
--connect jdbc:mysql://hadoop001:3306/students \
--query "select * from orders where order_date='2013-07-25' and \$CONDITIONS" \
--username root \
--password ok \
--incremental append \
--hive-import \
--hive-database sqooptest \
--hive-table orders_p \
--hive-partition-key 'date' \
--hive-partition-value '20200724' \
--check-column order_id \
--target-dir /data/order \
--m 1

五、从RDB导入数据到HBase

 sqoop import 
--connect jdbc:mysql://主机名:3306/retail_db \ 
--username root \
--password hadoop \ 
--table products \
--columns "customernum, customername" \
--hbase-table customercontactinfo \      //指定导入HBase的表
--column-family CustomerName \        //指定列簇
--hbase-row-key customernum \         //指定行键
-m 1

案例:

sqoop import \
--connect jdbc:mysql://hadoop001:3306/students \
--username root \
--password ok \
--table products \
--columns 'product_id,product_name,product_price' \
--hbase-create-table \
--hbase-table product \
--column-family prod \
--hbase-row-key product_id \
--m 1

六、导出HDFS数据到MySQL

  • 使用sqoop export导出数据到MySQL
  1. 在MySQL中创建表
  2. 导出数据到MySQL
sqoop export \
--connect jdbc:mysql://主机名:3306/sqoop \
--username root \
--password hadoop \
--table emp_demo \
--export-dir /data/sqoop/emp \
-m 1

案例:

sqoop export \
--connect jdbc:mysql://hadoop001:3306/students \
--username root \
--password ok \
--table stu \
--export-dir /data/stu \
--input-fields-terminated-by ',' \
--m 1
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值