Sqoop学习笔记

一、sqoop官网

1、Sqoop 官网
2、Sqoop Documentation (v1.4.7)

二、简介

sqoop是一个数据迁移工具,主要用于在Hadoop(Hive)与传统的数据库(mysql、oracle…)之间进行数据的传递,可以将一个关系型数据库(例如 : MySQL ,Oracle ,Postgres等)中的数据导进到Hadoop的HDFS中,也可以将HDFS的数据导进到关系型数据库中

三、导入数据(RDBMS – > hive)

数据准备

--在mysql中建表 student
create table if not exists `student`(
   `id` int unsigned auto_increment,
   `name` varchar(100) not null,
   `age` varchar(40) not null,
   `submission_date` date,
   primary key ( `id` )
)engine=innodb default charset=utf8;

--插入数据
INSERT INTO student  (id, name,age,submission_date) VALUES(1, "lina","24", NOW());
INSERT INTO student  (id, name,age,submission_date) VALUES(2, "leo","22", NOW());
INSERT INTO student  (id, name,age,submission_date) VALUES(3, "Allen","22", NOW());	

1、导入到hdfs

# 测试sqoop是否可用
sqoop list-databases --connect jdbc:mysql://plum01:3306/ --username root --password 123455
--全表导入
sqoop import \
--connect jdbc:mysql://plum01:3306/test \
--username root \
--password 123455 \
--table student \
--target-dir /user/hive/warehouse \
--delete-target-dir \
--fields-terminated-by "\t" \
--num-mappers 2 \
--split-by id
#导入指定列
--columns age,name
#导入指定行
--where 'id is not null'
#查询导入
query "select * from student where \$CONDITIONS and id is not null" 
# must contain '$CONDITIONS' in WHERE clause.
#如果query后使用的是双引号,则$CONDITIONS前必须加转移符,防止shell识别为自己的变量。

2、导入到hive

sqoop import \
--connect jdbc:mysql://plum01:3306/test\
--username root \
--password 123456 \
--table student\
--num-mappers 1 \
--hive-import \
--fields-terminated-by "\t" \
--hive-overwrite \
--hive-table student

3、导入到hbases

sqoop import \
--connect jdbc:mysql://plum01:3306/test\
--username root \
--password 123456 \
--table staff \
--where 'id <= 5' \
--hbase-create-table \
--hbase-table "student" \
--hbase-row-key "id" \
--column-family "info" \
--num-mappers 1 \
--split-by id
四、导出数据(hive --> rdbms)
sqoop export \
--connect jdbc:mysql://plum01:3306/test\
--username root \
--password 123456 \
--table student\
--num-mappers 1 \
--export-dir /student\
--input-fields-terminated-by "\t"

### 需要提前创建mysql表,要是没有不会自动创建
五、使用脚本执行
# vim $ vim mysql_to_hdfs.opt
import
--connect jdbc:mysql://plum01:3306/test
--username root
--password 123456
--table student
--target-dir /user
--delete-target-dir
--num-mappers 1
--fields-terminated-by "\t"
--split-by id

执行脚本
sqoop --options-file mysql_to_hdfs.opt

六 常用命令

查看版本号: sqoop version
导入数据:sqoop import
导出数据:sqoop export
获取数据库中某张表数据生成Java并打包Jar:codegen
创建hive表:create-hive-table
查看sql执行的结果:eval
导入某个数据库下所有表到hdfs:import-all-tables
列出所有数据库名:list-databases
列出某个数据库下所有表:list-tables

七、sqoop数据导入导出一致性问题

Hive中的Null在底层是以“\N”来存储,而MySQL中的Null在底层就是Null,为了保证数据两端的一致性。在导出数据时采用–input-null-string和–input-null-non-string两个参数。导入数据时采用–null-string和–null-non-string。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值