Sqoop数据迁移用法详解

安装sqoop文档见之前的Sqoop数据迁移安装详细教程
准备工作

一、MySQL -》HDFS

需要导入两个jar包
cp /data/java-json.jar /opt/soft/sqoop-1.4.6-cdh5.14.2/lib/

  1. 使用where过滤
sqoop import \
--connect jdbc:mysql://localhost:3306/retail_db \
--driver com.mysql.jdbc.Driver \
--table orders \
--where "order_id<100" \
--username root \
--password root \
--delete-target-dir \
--target-dir /data/retail_db/orders \
--m 3
  1. 使用columns过滤
sqoop import \
--connect jdbc:mysql://localhost:3306/retail_db \
--driver com.mysql.jdbc.Driver \
--table customers \
--columns "customer_id,customer_fname,customer_lname" \
--username root \
--password root \
--delete-target-dir \
--target-dir /data/retail_db/customers \
--m 3
  1. 使用查询语句进行过滤
    必须要加split-by 列名\$CONDITIONS\表示转义字符
sqoop import \
--connect jdbc:mysql://localhost:3306/hr \
//所有查询都应该以\$CONDITIONS结束;sqoop内部使用该条件将记录范围分发给所有Mapper
--query “select * from user where host != '127.0.0.1' and \$CONDITIONS” \
--username root \
--password hadoop \
//指定用于分割数据的列为host
--split-by host \
--delete-target-dir \
--target-dir /data/user \
--m 3
  1. 增量导入
    检查列
    append:支持动态的增加,不支持修改
    astmodefied:支持修改,也支持增加
sqoop import \
--connect jdbc:mysql://localhost:3306/retail_db \
--driver com.mysql.jdbc.Driver \
--table orders \
--username root \
--password root \
//增量导入方式为append追加数据至已经存在的HDFS数据集
--incremental append \
//指定递增的列
--check-column order_date \
//指定上一次导入的最大值
--last-value '2013-07-24 00:00:00'
--target-dir /data/retail_db/orders \
--m 3

创建job

sqoop job --create mysql2hdfs \
-- 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 '0' \
--target-dir /data/retail_db/orders \
--m 3

【注意】每次job执行成功之后都会修改 --last-value 值 将最后一次的最大值填充进去
这里的 ‘0’ 没有实际含义,只是为了保证第一次数据导入时值最小
查看job
sqoop job --list

执行job
sqoop job --exec mysql2hdfs
删除job

sqoop job --delete myjob

每天早上2点可以定时执行

crontab -e 
* 2 */1 * * sqoop job --exec mysql2hdfs

二、导入数据到Hive中

准备工作
导包
cp /opt/soft/hive110/lib/hive-common-1.1.0-cdh5.14.2.jar /opt/soft/sqoop146/lib/
cp /opt/soft/hive110/lib/hive-shims* /opt/soft/sqoop146/lib/
2.1 直接导入数据到Hive

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

2.2 导入数据到Hive分区

sqoop import \
--connect jdbc:mysql://localhost: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 /data/retail_db/orders \
--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

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

三、导入数据到HBase中

3.1 在HBase中建表
需要在HBase中创建表

  • 方式一: 加row-key,row-key需要和mysql中的字段对应
sqoop import \
--connect jdbc:mysql://localhost:3306/retail_db \
--username root 
--password ok \
--table products \
//Mysql中的字段
--columns "customernum, customername" \
--hbase-table customercontactinfo \
//hbase中的列族名
--column-family CustomerName \
//rowkey和
--hbase-row-key customernum \
--m 1
  • 方式二:不写row-key,自动对应mysql中的第一个字段
sqoop import \
--connect jdbc:mysql://localhost:3306/retail_db \
--driver com.mysql.jdbc.Driver \
--username root \
--password root \
--table products \
--hbase-table products \
--column-family data \
--m 3

四、使用sqoop export导出数据到MySQL

需要在Mysql中需要有emp_demo表

sqoop export 
--connect jdbc:mysql://localhost:3306/sqoop
--username root
--password hadoop 
--table emp_demo 
--export-dir /data/sqoop/emp 
-m 1

五、编写sqoop 脚本

5.1 编写脚本 job_RDBMS2HDFS.opt

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

5.2 执行脚本
sqoop --options-file job_RDBMS2HDFS.opt

六、防止在执行sqoop job的时候手动输入密码

#echo -n 表示不换行输入
echo -n "ok" > sqoopPWD.pwd
hdfs dfs -mkdir -p /sqoop/pwd
hdfs dfs -put sqoopPWD.pwd /sqoop/pwd/
hdfs dfs -chmod 400 /sqoop/pwd/sqoopPWD.pwd
下次执行job就可以不用输入密码了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值