概述
导入操作会在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所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复