3.sqoop 导入到HDFS,导出到RDBMS

导入操作会在sqoop的目录下生成一个以目标表为名称的java文件,这个java文件就是将sqoop语句生成的java类。然后执行sql语句,然后将java文件编译打成jar包,并执行map-reduce。
可以使用bin/sqoop import –help 命令查看导入的参数信息
1.普通导入数据
bin/sqoop list-databases \
–connect jdbc:mysql://hostname:3306 \
–username root \
–password 123456
——————————————
mysql中创建表:

CREATE TABLE my_user (
id tinyint(4) NOT NULL AUTO_INCREMENT,
account varchar(255) DEFAULT NULL,
passwd varchar(255) DEFAULT NULL,
PRIMARY KEY (id)
);
INSERT INTO my_user VALUES (‘1’, ‘admin’, ‘admin’);
INSERT INTO my_user VALUES (‘2’, ‘pu’, ‘12345’);
INSERT INTO my_user VALUES (‘3’, ‘system’, ‘system’);
INSERT INTO my_user VALUES (‘4’, ‘zxh’, ‘zxh’);
INSERT INTO my_user VALUES (‘5’, ‘test’, ‘test’);
INSERT INTO my_user VALUES (‘6’, ‘pudong’, ‘pudong’);
INSERT INTO my_user VALUES (‘7’, ‘qiqi’, ‘qiqi’);

——————————————————

bin/sqoop import \                             //import表示导入HDFS,export表示导入RDBMS
--connect jdbc:mysql://hostname:3306/test \     //连接mysql
--username root \
--password 123456 \
--table my_user                               //导入的目标数据在mysql中表

————————————————————————

bin/sqoop import \
--connect jdbc:mysql://hostname:3306/test \
--username root \
--password 123456 \
--table my_user \
--target-dir /user/sqoop/imp_my_user \       //指定HDFS中的存储位置
--num-mappers 1                                              //指定map任务数量

注意:如果不指定–target-dir,数据会存储在HDFS中的对应用户名目录下
2.以parquet作为文件格式导入

bin/sqoop import \
--connect jdbc:mysql://hadoop-CDH:3306/test \
--username root \
--password 123456 \
--table my_user \
--target-dir /user/sqoop/imp_my_user_parquet \     
--fields-terminated-by ',' \            //说明数据的分割形式,防止读取数据时为null
--num-mappers 1 \
--as-parquetfile       //指定数据存储格式parquet

——导入到hive————————————————

drop table if exists default.hive_user_orc ;
create table default.hive_user_orc(
id int,
username string,
password string
)
ROW FORMAT DELIMITED FIELDS TERMINATED BY ','
STORED AS parquet ;

load data inpath '/user/sqoop/imp_my_user_parquet' into table default.hive_user_orc ;

3.导入指定数据列

bin/sqoop import \
--connect jdbc:mysql://hostname:3306/test \
--username root \
--password 123456 \
--table my_user \
--target-dir /user/sqoop/imp_my_user_column \
--num-mappers 1 \
--columns id,account        //指定导入的列

4.使用查询query导入

bin/sqoop import \
--connect jdbc:mysql://hadoop-CDH:3306/test \
--username root \
--password 123456 \
--query 'select id, account from my_user where $CONDITIONS' \   //如果不指定将报错
--target-dir /user/sqoop/imp_my_user_query \
--num-mappers 1

注意:使用query查询导入必须指定条件$CONDITIONS,如果不指定将报错。
5.导入时使用snappy压缩
首先需要把编译好的native源文件导入到hadoop安装目录下的lib中,
可以使用bin/hadoop checknative查看snappy是否可用

bin/sqoop import \
--connect jdbc:mysql://hadoop-CDH:3306/test \
--username root \
--password 123456 \
--table my_user \
--target-dir /user/sqoop/imp_my_sannpy \
--delete-target-dir \                             //若输出目标文件夹存在,删除
--num-mappers 1 \
--compress \
--compression-codec org.apache.hadoop.io.compress.SnappyCodec \//snappy压缩
--fields-terminated-by '\t'

__________hive___________

drop table if exists default.hive_user_snappy ;
create table default.hive_user_snappy(
id int,
username string,
password string
)
ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' ;

load data inpath '/user/sqoop/imp_my_sannpy' into table default.hive_user_snappy ;

6.增量方式导入
有一个唯一标识符,通常这个表都有一个字段,类似于插入时间createtime
* (1)使用query(时间戳)导入实现增量方式
where createtime => 20150924000000000 and createtime < 20150925000000000
*(2)sqoop方式
Incremental import arguments:

 --check-column <column>       // Source column to check for incremental change
   --incremental <import-type>   // Define an incremental import of type 'append' or 'lastmodified'
   --last-value <value>           //Last imported value in the incremental

注意:增量方式不能与–delete-target-dir \ 同时使用

bin/sqoop import \
--connect jdbc:mysql://hadoop-CDH:3306/test \
--username root \
--password 123456 \
--table my_user \
--target-dir /user/sqoop/imp_my_incr \
--num-mappers 1 \
--incremental append \                          //指定增量的方式是追加
--check-column id \                              //指定增量的参考对象
--last-value 4                               //上一次增量的结束值,本次的开始值

7.mysql direct导入方式 –优化速度
mysqldump fast path import

bin/sqoop import \
--connect jdbc:mysql://hadoop-CDH:3306/test \
--username root \
--password 123456 \
--table my_user \
--target-dir /user/sqoop/imp_my_incr \
--num-mappers 1 \
--delete-target-dir \
--direct        //mysqldump方式直接导入

8.导出数据
默认的操作是从输入文件到数据库表,使用INSERT语句插入所有记录。在更新模式,Sqoop生成替换现有记录到数据库的UPDATE语句。
以下是export命令语法。

$ sqoop export (generic-args) (export-args) 
$ sqoop-export (generic-args) (export-args)
bin/sqoop export \
--connect jdbc:mysql://hadoop-CDH:3306/test \
--username root \
--password 123456 \
--table my_user \
--export-dir /user/sqoop/exp/user/ \         //指定被导出数据在HDFS上的存储目录
--num-mappers 1

当然,导出数据也可以使用指定列的方式。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值