sqoop的安装与使用

安装

(1)编辑sqoop配置文件sqoop-env.sh,添加如下配置:

export HADOOP_COMMON_HOME=/home/bxp/install/hadoop-2.6.0-cdh5.10.0
export HADOOP_MAPRED_HOME=/home/bxp/install/hadoop-2.6.0-cdh5.10.0
export HIVE_HOME=/home/bxp/install/hive-1.1.0-cdh5.10.0

(2)拷贝数据库驱动到sqoop的lib目录

cp /home/bxp/Documents/doc/0paper/jar/mysql-connector-java-5.1.44-bin.jar  series1:/home/bxp/install/sqoop-1.4.6-cdh5.10.0/lib

创建测试数据库

登陆mysql,创建测试数据库:

create database test;
create table user1(
    id varchar(20) primary key,
    name varchar(20),
    sex varchar(20),
    age varchar(20),
    descp varchar(20)
);
insert into user(id, name, sex, age, descp) values('111id', '111name', '111sex', '111age', '111desc');
insert into user(id, name, sex, age, descp) values('222id', '222name', '222sex', '222age', '222desc');
insert into user(id, name, sex, age, descp) values('333id', '333name', '333sex', '333age', '333desc');
insert into user(id, name, sex, age, descp) values('444id', '444name', '444sex', '444age', '444desc');
insert into user(id, name, sex, age, descp) values('555id', '555name', '555sex', '555age', '555desc');
insert into user(id, name, sex, age, descp) values('666id', '666name', '666sex', '666age', '666desc');
insert into user(id, name, sex, age, descp) values('777id', '777name', '777sex', '777age', '777desc');
insert into user(id, name, sex, age, descp) values('888id', '888name', '888sex', '888age', '888desc');

简单测试操作:

列出所有的数据库

bin/sqoop list-databases \
--connect jdbc:mysql://localhost:3306 \
--username root \
--password 16127

数据导入Import

底层运行的是mapreduce, 对于import,底层只运行map任务。
(1)获取关系型数据库的元数据信息
(2)提交map
(1)将数据库中的数据导入hdfs

bin/sqoop import \
--connect jdbc:mysql://localhost:3306/test1 \       //数据库链接
--username root \
--password 16127 \
--table user \          //mysql数据库名称                                
--target-dir /user/bxp/sqoop/import_user_parquet \      //指定将要导入的hdfs文件目录
--num-mappers 1 \       //指定执行mapreduce时的map的个数
--where "name = '111name'" \        //指定条件对数据库中的数据进行过滤
--as-parquetfile \                  //指定数据再hdfs文件系统的文件存储格式
--columns id,name \                 //指定导入哪几列数据
--query 'select * from user where $CONDITIONS' \       //对导出的数据进行过滤的语句
--compress \        //启用压缩
--compression-codec org.apache.hadoop.io.compress.SnappyCodec   //设置压缩格式,如果hadoop支持压缩,要进行hadoop源码编译
--fields-terminated-by '\t'         //设置字段间的间隔,默认是逗号
--delete-target-dir         //hdfs中输出目标目录存在就删除
--direct        //直接使用mysql的import进行数据的导出,更高效。

如果没有指定hdfs中数据存放的目录target-dir,会存储在当前用户的主目录下的以表名为目录的目录。

(2)增量的数据导入:

通常有一个标识符,通常这个标都有一个字段 ,类似于插入时间createTime
方式一:
使用–query选项添加一个where条件。

where createTime > 20180203000000000 and < 20180204000000000

方式二 :使用sqoop自带增量选项

--check-column <column>       //以那一列数据为基准
--incremental <import-type>   //导入的类型是什么('append' or 'lastmodified'--last-value <value>        //上次从那里结束的(此次将从上次结束时候开始导入)

(3)把数据库中的数据导入到hive表中:

将mysql中的数据导入到hive表中,其实是先将数据导出到hdfs文件系统中,再将导出到hdfs文件系统中的数据加载到hive数据表指定的目录下。

再hive中创建数据表:

use default;
create table IF NOT EXISTS user
(
id string,
name string,
sex string,
age string,
descp string
)
ROW FORMAT DELIMITED FIELDS TERMINATED BY ','     ;

数据导入:

bin/sqoop import \
--connect jdbc:mysql://localhost:3306/test1 \
--username root \
--password 16127 \
--table user \
--delete-target-dir \       //数据的导出过程,实际是将数据先导出到hdfs,再将数据从hdfs加载到hive中,此处是删除中间产生的临时目录
--num-mappers 1 \
--hive-database default \       //指定hive数据库
--hive-table user \             //指定hive表
--hive-import \                 //指定是将数据导出的hive表中
--fields-terminated-by ',';     //指定hive表的数据分隔符

数据导出export

数据的导出底层是mapreduce,这里的导出只运行map任务。
(1)得到元数据(将数据导出到那个数据库的哪个表中去)
(2)提交map任务
(1)将数据从hdfs导出到mysql

bin/sqoop export \
--connect jdbc:mysql://localhost:3306/test1 \
--username root \
--password 16127 \
--table user1 \
--export-dir /user/bxp/sqoop/import_user \
--num-mappers 1 \
--fields-terminated-by ','      //指定输出字段的格式

(2)将hive表中的数据导出到mysql数据库中

在mysql中创建数据表:

create table user2(
    id varchar(20) primary key,
    name varchar(20),
    sex varchar(20),
    age varchar(20),
    descp varchar(20)
);

数据导出:

bin/sqoop export \
--connect jdbc:mysql://localhost:3306/test1 \
--username root \
--password 16127 \
--table user2 \
--export-dir /user/hive/warehouse/user \
--num-mappers 1 \
--input-fields-terminated-by ','    //指定数据导入时的分隔符

执行sqoop脚本文件:

(1)创建脚本文件:

#列出所有的数据库名称
list-databases
#数据库链接
--connect
jdbc:mysql://localhost:3306 
--username
root
--password
16127

(2)执行语句

bin/sqoop --options-file /home/bxp/Documents/doc/0paper/sqoop.txt
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值