我是靠谱客的博主 呆萌唇彩,最近开发中收集的这篇文章主要介绍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

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

最后

以上就是呆萌唇彩为你收集整理的3.sqoop 导入到HDFS,导出到RDBMS的全部内容,希望文章能够帮你解决3.sqoop 导入到HDFS,导出到RDBMS所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(42)

评论列表共有 0 条评论

立即
投稿
返回
顶部