大数据基础之Sqoop——Sqoop数据迁移

Sqoop概述:

  • Sqoop是一个用于在Hadoop和关系数据库之间传输数据的工具
     - 将数据从RDBMS导入到Hadoop
      - HDFS、Hive、Hbase
     - 从Hadoop导出数据到RDBMS
     - 从导入或导出命令翻译成MapReduce程序来并行操作和容错
  • 目标用户
     - 系统管理员、数据库管理员
     - 大数据分析师、大数据开发工程师等

案例一:从RDB导入到HDFS

导入到HDFS

sqoop import
--connect jdbc:mysql://clz:3306/retail_db
--driver com.mysql.jdbc.Driver
--table customers
--username root
--password root
--target-dir /sqoop/data
--m 3

//第2行:clz为虚拟机的机器名 最后为数据库名
//第4行:为需要迁移的表名
//第7行:为迁移的目标路径,为hdfs上的路径
//第8行:为分配的map数量

通过where语句过滤导入表

sqoop import
--connect jdbc:mysql://clz:3306/retail_db
--table orders
--where "order_id<500"
--username root
--password root
--delete-target-dir
--target-dir /sqoop/data
--m 3
//第7行:如果目标目录已存在,则删除

通过Columns过滤导入表

sqoop import
--connect jdbc:mysql://clz:3306/retail_db
--table user
--columns "order_id,order_date,order_customer_id"
--username root
--password root
--delete-target-dir
--target-dir /sqoop/data
--m 3

使用query方式导入数据

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

//$CONDITIONS:使用where字句必须添加,如果query后面使用的是双引号,则$CONDITIONS前面必须加转义符,防止shell之别为自己的变量
//split-by:用于指定分割的列,根据分割的列分配到不同的map上进行处理。

使用Sqoop增量导入数据

sqoop import
--connect jdbc:mysql://localhost:3306/retail_db
--driver com.mysql.jdbc.Driver
--table orders
--username root
--password root
--incremental append
--check-column order_date
--last-value '2013-07-24'
--target-dir /sqoop/data
--m 3

//第7行:增量导入方式为append,追加数据至已经存在的HDFS数据集
//第8行:指定递增的列
//第9行:指定上一次导入的最大值

导入文件格式(指定文件格式参数)

  • as-textfile 导入数据为text文件(默认)
  • as-avrodatafile 导入数据为avro文件
  • as-sequencefile 导入数据为sequence文件
  • as-parquetfile 导入数据为parquet文件
sqoop import 
--connect jdbc:mysql://hadoop102:3306/hr 
--table orders
--username root    
--password root
--delete-target-dir
--target-dir /data/orders
--m 3
--as-sequencefile

案例二:从RDB导入到Hive

直接导入数据到Hive

//先在Hive中创建表
create database if not exists retail_db;

sqoop import
--connect jdbc:mysql://clz:3306/retail_db
--driver com.mysql.jdbc.Driver
--table orders
--username root
--password root
--hive-import
--create-hive-table
--hive-database retail_db
--hive-table orders
--m 3

//create-hive-table:自动创建表,生产中一般不使用
//hive-overwrite:覆盖原有表数据
//通过hive-import指定导入到Hive
//第7行:指定创建一个新的hive表,如果表以存在则报错

导入数据到Hive分区

sqoop import
--connect jdbc:mysql://clz:3306/retail_db
--driver com.mysql.jdbc.Driver
--query "select order_id,order_status from orders where order_date>='2013-11-03' and order_date<'2013-11-04' and \$CONDITIONS"
--username root
--password root
--delete-target-dir
--target-dir /sqoop/data
--split by order_id
--hive-import
--hive-database retail_db
--hive-table orders
--hive-partition-key "order_date"
--hive-partition-value "2013-11-03"
--m 3

//注意:分区字段不能当成普通字段导入表中

从RDB导入到HBase

直接导入到HBase

//在HBase中建表
create 'products','data','category'

sqoop import
--connect jdbc:mysql://localhost:3306/retail_db
--driver com.mysql.jdbc.Driver
--username root
--password root
--table products
--columns "product_id, product_name, product_description,product_price,product_image"
--hbase-table products
--column-family data
--m 3

导出HDFS数据到MySQL

//在mysql中创建表
create table customers_demo as select * from customers where 1=2;
//上传数据
hdfs dfs -mkdir /customerinput
hdfs dfs -put customers.csv /customerinput
//导出数据到mysql
sqoop import
--connect jdbc:mysql://clz:3306/retail_db
--username root
--password root
--table customers_demo
--export-dir /customerinput
--m 1

sqoop脚本

//编写脚本 job_RDBMS2HDFS.opt
import
--connect
jdbc:mysql://localhost:3306/retail_db
--driver
com.mysql.jdbc.Driver
--table
customers
--username
root
--password
root
--target-dir
/sqoop/data
--delete-target-dir
--m
3
//执行脚本
sqoop --options-file job_RDBMS2HDFS.opt
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值