sqoop数据的导入和导出

本文介绍如何使用 Sqoop 在 MySQL 和 HDFS 或 Hive 间高效迁移数据,涵盖基本操作、高级选项如 Parquet 格式存储、列选择及数据压缩等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、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 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值