Sqoop简介
Apache Sqoop(TM)是一种工具,用于在Apache Hadoop和结构化数据存储(如关系数据库)之间高效传输批量数据 。
Sqoop于2012年3月成功从孵化器毕业,现在是一个顶级Apache项目: 更多信息
最新的稳定版本是1.4.7(下载, 文档)。Sqoop2的最新剪辑是1.99.7(下载, 文档)。请注意,1.99.7与1.4.7不兼容且功能不完整,不适用于生产部署。
Sqoop的诞生:在Hadoop刚出现之时,很多公司为了把存储在传统型数据库的数据导入到HDFS中,需要编写大量的MapReduce代码,MapReduce代码很繁琐,为了简化这些过程,于是就有了Sqoop。Sqoop实际是对Map阶段的一个封装,因为只是把数据进行传输,所以Sqoop不包括Reduce阶段。
Sqoop安装部署
- 下载安装包:
http://www.apache.org/dyn/closer.lua/sqoop/1.4.7 - 解压
tar -zxvf .tar - 修改配置
vi sqoop-env.sh
#Set path to where bin/hadoop is available
export HADOOP_COMMON_HOME=/home/even/hd/hadoop-2.8.4
#Set path to where hadoop-*-core.jar is available
export HADOOP_MAPRED_HOME=/home/even/hd/hadoop-2.8.4
#Set the path to where bin/hive is available
export HIVE_HOME=/home/even/hd/hive-1.2.2
#Set the path for where zookeper config dir is
export ZOOCFGDIR=/home/even/hd/zookeeper-3.4.10/conf
- 安装mysql驱动到sqoop/lib下,网上自行下载
- 检测是否安装成功
/bin/sqoop help
Sqoop使用
import命令
- MySql整表导入到hdfs中。
sqoop import \
--connect jdbc:mysql://localhost:3306/sqoop \
--username root \
--password 123 \
--table user \
--target-dir /sqoop/datas \
--delete-target-dir \
--num-mappers 1 \
--fields-terminated-by '\t';
–connect是连接mysql数据库,–target-dir是要存储的目标目录,在hdfs上。–delete-target-dir是如果目标目录存在则删除,因为Sqoop实际是在跑一个MapReduce程序,如果目标目录已存在会报错。–num-mappers是MapTask数,–fields-terminated-by 是切割符。
- MySql Select数据导入hdfs中
sqoop import \
> --connect jdbc:mysql://localhost:3306/sqoop \
> --username root \
> --password 19940710 \
> --target-dir /sqoop/selectdemo \
> --delete-target-dir \
> --num-mappers 1 \
> --fields-terminated-by '\t' \
> --query 'select * from user where id <=1 and $CONDITIONS';
- where参数筛选MySql数据
sqoop import \
> --connect jdbc:mysql://localhost:3306/sqoop \
> --username root \
> --password 19940710 \
> --target-dir /sqoop/selectdemo \
> --delete-target-dir \
> --num-mappers 1 \
> --fields-terminated-by '\t' \
> --table user \
> --where "id<=1";
- mysql导入到hive
在此之前先创建hive表
hive
create table user1(id int,name string) \
>row format \
>dilimited fields \
>terminated by '\t';
然后修改环境变更:vi ~/.bash_profile
export HADOOP_CLASSPATH=$HADOOP_CLASSPASS:/home/even/hd/hive-1.2.2/lib/*
因为hadoop要把数据存入到hive,因此需要依赖hive的lib。
最后sqoop命令:
sqoop import \
>--connect jdbc:mysql://localhost:3306/sqoop \
>--username root \
>--password 123 \
>--table user \
>--num-mappers 1 \
>--delete-target-dir \
>--hive-import \
>--field-terminated-by '\t' \
>--hive-overwrite \
>--hive-table user1;
从MySql到Hive的过程中,首先会在hdfs的/user/root/下生成一个临时目录,然后再把这个目录的数据剪切到hive表。–delete-target-dir表示如果临时目录已存在,则删除。
export命令
把Hive的数据导入到MySQL表中,根据Hive表字段创建MySQL表。
#清空表数据
truncate user;
编写Sqoop命令
sqoop export \
> --connect jdbc:mysql://localhost:3306/sqoop \
> --username root \
> --password 123 \
> --table user \
> --num-mappers 1 \
> --export-dir /user/hive/warehouse/user1 \
> --input-fields-terminated-by '\t';
打包脚本使用
- 创建脚本
vi sqoop_job.opt
export --connect
jdbc:mysql://localhost:3306/sqoop
--username
root
--password
123
--table
user
--export-dir
/user/hive/warehouse/user1
--num-mappers
1
--input-fields-terminated-by
'\t'
# 注意:一行命令一行值的格式。
- 执行脚本:
sqoop --options-file sqoop_job.opt
Sqoop常用参数
参数 | 说明 |
---|---|
–connect | 连接关系型数据库URL |
–connectionmanager | 指定连接管理类 |
–driver | JDBC的driver class |
–username | 连接数据库的用户名 |
–password | 连接数据库的密码 |
–verbose | 在控制台中打印详细信息 |
–help | 查看帮助 |
–hiveimport | 将关系型数据库导入到hive表中 |
–hiveoverwrite | 覆盖掉hive表中已存在的数据 |
–createhivetable | 创建hive表 |
–hivetable | 接入hive表 |
–table | 指定关系型数据库的表名 |
–delete-target-dir | 如果目标目录存在,就删除 |