Sqoop全量及增量的导入导出实现

ETL的操作

  • E:抽取

    1、抽取OLTP的数据
    2、抽取日志数据
    3、通过接口抽取第三方数据
    
  • T:转换

    1、数据清洗
      丢弃一些异常数据
      处理一些脏数据
      处理一些重复数据
    2、数据的格式转换
       日期:
            crate_time     year   month   day
           2022-12-23 -->  2022   12      23
           2022-1-1   -->  2022-01-01
       字符串转换: 
              "path/list"  -->  path/list
               json数据     -->  解析
    
  • L:加载

    1、全量加载
      数据全部加载
    2、增量加载
      每次只加载新增或者修改数据
    

ETL 采集工具

  • Kettle

    特点:
     1:图形化操作
     2:底层是Java
     3: 支持集群
     4: 数据量大时,性能一般
    
  • Nify

    特点:
     1:图形化操作
     2:采集数据时会造成大量的IO操作,性能一般
    
  • Datax

    特点:
     1:单进程,多线程
     2:不能支撑海量数据的迁移操作
    
  • Flume

    特点:
     1:主要用于实时操作
     2: 底层是MapReduce
    
  • Sqoop(项目使用)

    特点:
     1:为Hadoop而生
     2:底层是MapReduce
     3:支撑大数据量的数据迁移工作
    

Sqoop框架

介绍

1、Sqoop的导入导出
 导入: RDBMS -----> Hadoop平台
 导出:  Hadoop平台 -----> RDBMS
 
2、Sqoop的重点是写导入导出的命令
3、Sqoop的底层是没有Reduce的MR
  Sqoop这是机械性将数据源的数据一条条进行搬移,不需要对数据做额外的聚合,所以不需要Reduce

测试

 #测试你的sqoop是否能查看MySQL中所有的数据库
sqoop list-databases \
 --connect jdbc:mysql://hadoop0	1:3306/ \
 --username root \
 --password 123456

应用1-导入

数据导入到HDFS-全量
#split-by后边的字段是数字类型
sqoop import \
--connect jdbc:mysql://192.168.88.80:3306/userdb \
--table emp \
--username root \
--password 123456 \
--target-dir /sqoop/result3 \
--delete-target-dir \
--fields-terminated-by '\t' \
--split-by id \
--m 2

#如果你要指定多个maptask来完成数据的导入,也就是--m参数的值不是1,则必须添加一个参数--split-by
#该参数用来指定你原表的数据如何分配给多个线程来实现导入
#--split-by id  内部原理是获取id的最小值和id的最大值,进行平均划分
 SELECT MIN(`id`), MAX(`id`) FROM `emp`
 
 
 #如果split-by后边的字段是字符串类型,则需要添加以下内容
 -Dorg.apache.sqoop.splitter.allow_text_splitter=true \
数据导入到HDFS-增量
sqoop import \
--connect jdbc:mysql://192.168.88.80:3306/userdb \
--username root \
--password 123456 \
--target-dir /sqoop/result5 \
--query 'select id,name,deg from emp WHERE  id>1203 and $CONDITIONS' \
--delete-target-dir \
--fields-terminated-by '\t' \
--m 1
(重点)数据导入-全量-到Hive-全量
-- 手动在hive中建一张表
create table test.emp_hive
(
    id     int,
    name   string,
    deg    string,
    salary int,
    dept   string
)
row format delimited fields terminated by '\t'
stored as orc;


-- 导入数据
sqoop import \
--connect jdbc:mysql://hadoop01:3306/userdb \
--table emp \
--username root \
--password 123456 \
--fields-terminated-by '\t' \
--hive-database test \
--hive-table emp_hive \
-m 1
(重点)数据导入-全量-到Hive-增量
#!/bin/bash

yes_day=$(date -d "yesterday" +%Y-%m-%d)


/usr/bin/hive -f a.sql

wait

/usr/bin/sqoop import \
--connect jdbc:mysql://192.168.88.80:3306/userdb \
--username root \
--password 123456 \
--query "select * from userdb.customertest where last_mod  between '${yes_day} 00:00:00' and  '${yes_day} 23:59:59'   and  \$CONDITION
S" \
--fields-terminated-by '\t' \
--hcatalog-database test \
--hcatalog-table customertest \
-m 1

应用2-导出

数据从HDFS导出到MySQL
sqoop export \
--connect jdbc:mysql://192.168.88.80:3306/userdb \
--table employee \
--username root \
--password 123456 \
--export-dir /sqoop/result1/
(重点)数据从Hive导出到MySQL
sqoop export \
--connect "jdbc:mysql://192.168.88.80:3306/userdb? useUnicode=true&characterEncoding=utf-8" \
--table employee \
--username root \
--password 123456 \
--hcatalog-database test \
--hcatalog-table emp_hive \
--input-fields-terminated-by '\t' \
-m 1 

OOzie

1、Oozie的底层是MapReduce

在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

留不住的人

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值