一、sqoop使用导入
1、链接MySQL,查看有哪些表,换行语句必须有(空格+\)
bin/sqoop list-databases \
--connect jdbc:mysql://hadoop-senior.ibeifeng.com:3306 \
--username root \
--password 123456
2、导入数据到HDFS
在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');
2.1、普通导入
bin/sqoop import \ //导入数据到HDFS--connect jdbc:mysql://hadoop-senior.ibeifeng.com:3306/test \ //链接MySQL的 test 库
--username root \
--password 123456 \
--table my_user \--target-dir /user/beifeng/sqoop/imp_my_user \ //从MySQL中一张表输出到HDFS指定目录
--num-mappers 1 //设定map个数
2.2、>>>>>>>>>>>>>>import hdfs : parquet格式存储>>>>>>>>>>>>>>>>>>
bin/sqoop import \
--connect jdbc:mysql://hadoop-senior.ibeifeng.com:3306/test \
--username root \
--password 123456 \
--table my_user \
--target-dir /user/beifeng/sqoop/imp_my_user_parquet \
--fields-terminated-by ',' \
--num-mappers 1 \
--as-parquetfile
2.3、>>>>>>>>>>>>>>>>>import hdfs : columns 只导入选中的列>>>>>>>>>>>>>>>>>>
bin/sqoop import \
--connect jdbc:mysql://hadoop-senior.ibeifeng.com:3306/test \
--username root \
--password 123456 \
--table my_user \
--target-dir /user/beifeng/sqoop/imp_my_user_column \
--num-mappers 1 \
--columns id,account //只将my_user表中的 id和account两个字段导入到HDFS
2.4、* 在实际的项目中,要处理的数据,需要进行初步清洗和过滤(query的使用)
* 某些字段过滤
* 条件
* join
bin/sqoop import \
--connect jdbc:mysql://hadoop-senior.ibeifeng.com:3306/test \
--username root \
--password 123456 \
--query 'select id, account from my_user where $CONDITIONS' \ //与columns得出的结果相同
--target-dir /user/beifeng/sqoop/imp_my_user_query \
--num-mappers 1
3、导入时数据压缩 compress 配置
>>>>>>>>>>>>>>>>>import hdfs : compress >>>>>>>>>>>>>>>>>>
bin/sqoop import \
--connect jdbc:mysql://hadoop-senior.ibeifeng.com:3306/test \
--username root \
--password 123456 \
--table my_user \
--target-dir /user/beifeng/sqoop/imp_my_sannpy \
--delete-target-dir \ //若目标目录存在则删除
--num-mappers 1 \
--compress \ //启用压缩
--compression-codec org.apache.hadoop.io.compress.SnappyCodec \ //设置所用压缩的压缩码
--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/beifeng/sqoop/imp_my_sannpy' into table default.hive_user_snappy ;
4、导入的一个优化:direct ,导入数据较快
>>>>>>>>>>>>>>>>>import hdfs direct >>>>>>>>>>>>>>>>>>
bin/sqoop import \
--connect jdbc:mysql://hadoop-senior.ibeifeng.com:3306/test \
--username root \
--password 123456 \
--table my_user \
--target-dir /user/beifeng/sqoop/imp_my_incr \
--num-mappers 1 \
--delete-target-dir \
--direct
二、数据导出
1、>>>>>>>>>>>>>>>>>export mysql table >>>>>>>>>>>>>>>>>>
touch /opt/datas/user.txt
vi /opt/datas/user.txt
12,beifeng,beifeng
13xuanyun,xuanyu
bin/hdfs dfs -mkdir -p /user/beifeng/sqoop/exp/user/
bin/hdfs dfs -put /opt/datas/user.txt /user/beifeng/sqoop/exp/user/ //随便创建一个文件上传到HDFS
bin/sqoop export \ //导出
--connect jdbc:mysql://hadoop-senior.ibeifeng.com:3306/test \
--username root \
--password 123456 \
--table my_user \ //导出到MySQL的my_user表
--export-dir /user/beifeng/sqoop/exp/user/ \ //需要导出的文件所在目录
--num-mappers 1
三、===================导入导出Hive======================
Hive数据存储在hdfs上
schema
table location / file
>>>>>>>>>>>>>>>>>import hive table(MySQL数据导入到hive表中) >>>>>>>>>>>>>>>>>>
use default ;
drop table if exists user_hive ;
create table user_hive(
id int,
account string,
password string
)
ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' ;
bin/sqoop import \
--connect jdbc:mysql://hadoop-senior.ibeifeng.com:3306/test \
--username root \
--password 123456 \
--table my_user \ //将MySQL的my_user中数据导入到hive
--fields-terminated-by '\t' \ //导入的数据每列用制表符分隔
--delete-target-dir \
--num-mappers 1 \
--hive-import \ //导入到hive
--hive-database default \ //使用hive的哪个数据库
--hive-table user_hive //导入到该数据库的哪张表
>>>>>>>>>>>>>>>>>export mysql table (hive中数据导出到MySQL表)>>>>>>>>>>>>>>>>>>
CREATE TABLE `my_user2` (
`id` tinyint(4) NOT NULL AUTO_INCREMENT,
`account` varchar(255) DEFAULT NULL,
`passwd` varchar(255) DEFAULT NULL,
PRIMARY KEY (`id`)
);
bin/sqoop export \
--connect jdbc:mysql://hadoop-senior.ibeifeng.com:3306/test \
--username root \
--password 123456 \
--table my_user2 \
--export-dir /user/hive/warehouse/user_hive \
--num-mappers 1 \
--input-fields-terminated-by '\t'
=======================================================
shell scripts
## step 1
load data ...
## step 2
bin/hive -f xxxx
## step 3
bin/sqoop --options-file /opt/datas/sqoop-import-hdfs.txt