一、Sqoop简明笔记

1、Sqoop概述

  • 简介

    Sqoop 是一款开源的工具,主要用于在 Hadoop(Hive)与传统的数据库(mysql、postgresql...) 间进行数据的传递,可以将一个关系型数据库(例如 : MySQL ,Oracle ,Postgres 等)中的 数据导进到 Hadoop 的 HDFS 中,也可以将 HDFS 的数据导进到关系型数据库中。

  • 原理

    将导入或导出命令翻译成mapreduce程序,即对inputformat和outputformat进行定制。

  • 官方文档

    Sqoop User Guide (v1.4.7) (apache.org)

2、Sqoop安装

  1. 下载地址

    https://archive.apache.org/dist/sqoop/1.4.7/

  2. 解压缩防止到对应目录

  3. 修改配置文件

    [1] cd $SQOOP_HOME/conf
    [2] cp mv sqoop-env-template.sh sqoop-env.sh
    [3] vim sqoop-env.sh
    
    # 添加以下内容
    export HADOOP_COMMON_HOME=/opt/software/hadoop-3.1.3
    export HADOOP_MAPRED_HOME=/opt/software/hadoop-3.1.3
    
    export HIVE_HOME=/opt/software/hive-3.1.2
    
    export ZOOKEEPER_HOME=/opt/software/zookeeper-3.4.10
    export ZOOCFGDIR=//opt/software/zookeeper-3.4.10
    
  4. 拷贝JDBC驱动到$SQOOP_HOME/lib中

    MySQL :: Download Connector/J

  5. 添加到myenv.sh

    # 6.配置Sqoop目录
    # SQOOP_HOME
    export SQOOP_HOME=/opt/software/sqoop-1.4.7
    export PATH=$PATH:$SQOOP_HOME/bin
    
  6. 验证Sqoop

    sqoop help # 可以通过command来验证sqoop配置是否正确,出现的Warin警告属于未配置对象,不影响使用
    

  7. 测试Sqoop是否能够成功连接数据库

    sqoop list-databases --connect jdbc:mysql://pc001:3306/ --username root --password root
    

3、Sqoop使用

3.1 导入数据

在 Sqoop 中,“导入”概念指:从非大数据集群(RDBMS)向大数据集群(HDFS,HIVE, HBASE)中传输数据,叫做:导入,即使用 import 关键字。

3.1.1 mysql数据准备

create database sqoop_test;

-- 创建mysql表
create table table_test(
    id int(4) primary key not null auto_increment,
    name varchar(255),
    sex varchar(255)
);

-- 创建数据到Mysql
insert into table_test(name,sex) values("Tom","M");
insert into table_test(name,sex) values("Happy","W");

3.1.2 RDBMS到HDFS

  1. 全部导入

    # 全部导入
    sqoop import \
    --connect jdbc:mysql://pc001:3306/sqoop_test \
    --username root \
    --password root \
    --table table_test \
    --target-dir /user/sqoop_test \
    --delete-target-dir \
    --num-mappers 1 \
    --fields-terminated-by ","
    
  2. 查询导入

    • 查询导入时,查询条件中,必须包含 “$CONDITIONS”

    • 如果 query 后使用的是双引号,则$CONDITIONS 前必须加转移符,防止 shell 识别为自己的变量

    -- 查询导入
    sqoop import \
    --connect jdbc:mysql://pc001:3306/sqoop_test \
    --username root \
    --password root \
    --target-dir /user/sqoop_test \
    --delete-target-dir \
    --num-mappers 1 \
    --fields-terminated-by "," \
    --query 'select name,sex from table_test where id<=1 and $CONDITIONS;';
    
    
    sqoop import \
    --connect jdbc:mysql://pc001:3306/sqoop_test \
    --username root \
    --password root \
    --target-dir /user/sqoop_test \
    --delete-target-dir \
    --num-mappers 1 \
    --fields-terminated-by "," \
    --query "select name,sex from table_test where id<=1 and \$CONDITIONS";
    
  3. 导入指定列

    • columns 中如果涉及到多列,用逗号分隔,分隔时不要添加空格
    sqoop import \
    --connect jdbc:mysql://pc001:3306/sqoop_test \
    --username root \
    --password root \
    --columns id,sex \
    --table table_test \
    --target-dir /user/sqoop_test \
    --delete-target-dir \
    --num-mappers 1 \
    --fields-terminated-by "," ;
    
  4. 使用 sqoop 关键字筛选查询导入数据

    sqoop import \
    --connect jdbc:mysql://pc001:3306/sqoop_test \
    --username root \
    --password root \
    --table table_test \
    --where "id=1" \
    --target-dir /user/sqoop_test \
    --delete-target-dir \
    --num-mappers 1 \
    --fields-terminated-by ",";
    

3.1.3 RDBMS到HIVE

该过程分为两步,第一步将数据导入到 HDFS,第二步将导入到 HDFS 的数据迁移到 Hive 仓库,第一步默认的临时目录是/user/nuochengze/表名

sqoop import \
--connect jdbc:mysql://pc001:3306/sqoop_test \
--username root \
--password root \
--table table_test \
--num-mappers 1 \
--hive-import \
--fields-terminated-by "," \
--hive-overwrite \
--hive-table test.sqoop_test;

3.4 导出数据

在 Sqoop 中,“导出”概念指:从大数据集群(HDFS,HIVE,HBASE)向非大数据集群 (RDBMS)中传输数据,叫做:导出,即使用 export 关键字。

说明:Mysql 中如果表不存在,不会自动创建。

sqoop export \
--connect jdbc:mysql://pc001:3306/sqoop_test \
--username root \
--password root \
--table table_test \
--num-mappers 1 \
--export-dir /user/hive/warehouse/test.db/sqoop_test \
--input-fields-terminated-by ",";

3.5 脚本打包

sqoop命令一般以opt格式的文件存储打包内容

posted @ 2021-10-12 23:17  Norni  阅读(66)  评论(0编辑  收藏  举报