Sqoop实战-- Sqoop的Job任务、增量导入、数据格式转换与Lombok的使用指南

        数据传输是任何数据驱动型组织的关键时刻。Apache Sqoop 在促进关系型数据库和Hadoop之间的高效数据传输方面表现出色,使其成为大数据工作流程中不可或缺的工具。本文将详细介绍如何使用Sqoop执行Job任务以及进行增量导入,如何在HDFS上指定数据存储格式,以及如何利用Lombok简化Java实体类的编写。

一、Sqoop的Job任务

1.1、Job任务的好处

  1. 简化操作:可以将常用的导入导出脚本保存为Job任务,简化操作步骤。
  2. 记录last-value:帮助记录增量导入的last-value,方便后续操作。

job命令中有哪些参数:

参数说明
--create创建一个新的保存的任务
--delete删除一个已保存的任务
--exec执行一个已保存的任务
--help打印使用说明
--list列出所有已保存的任务
--meta-connect指定元数据存储的JDBC连接字符串
--show显示一个已保存的任务的参数
--verbose在执行时打印更多的信息

1.2、创建Job任务

创建Job

sqoop job --create jjoobb -- import  --connect jdbc:mysql://bigdata01:3306/sqoop \
--username root \
--password 123456 \
--table user \
--delete-target-dir \
--target-dir '/sqoopdata/user' \
-m 1

 如果出现上面的关于Json的错误,请进行如下修复:

1)在sqoop/lib 下,拷贝一个 java-json的jar包:

2) sqoop-env.sh 中 添加 export HCAT_HOME=/opt/installs/hive/hcatalog

3)删除 sqoop中的lib中 hive-exec-3.1.2.jar 这个jar包(可选,我们以前就没有拷贝)。

以上操作完成后,继续创建job任务,如果创建好了之后,就可以执行了

sqoop job --exec jjoobb

要输入mysql的密码。

sqoop job --create  jod的名字
sqoop job --list
sqoop job --delete job的名字
sqoop job --exec job的名字

二、Sqoop的增量导入

2.1、 创建增量导入Job任务

Sqoop是一个用于在Hadoop和关系型数据库之间高效传输数据的工具。增量导入是Sqoop的一个常用功能,它允许我们只导入自上次导入后发生变化的数据。以下是创建一个增量导入Job任务的示例:

Last-Value方法:利用Sqoop的last-value特性,只导入记录中值高于上次导入记录的记录。

sqoop job --create auto_import \
-- import --connect jdbc:mysql://bigdata01:3306/sqoop \
--username root \
--password 123456 \
--table sales_order \
--driver com.mysql.cj.jdbc.Driver \
--target-dir /home/sales_order/dt=20240903 \
--split-by orderId \
-m 1 \
--check-column orderId \
--incremental append \
--last-value 0 \
--fields-terminated-by '\t'
2.2、 执行Job任务

一旦Job任务创建完成,我们可以通过以下命令执行它:

sqoop job --exec auto_import
2.3、增量导入效果

在数据库中新增数据后,再次执行Job任务,增量导入的效果将体现在HDFS上。

三、指定HDFS上的数据存储格式

3.1、导入数据为Parquet格式

使用Sqoop导入数据时,我们可以指定在HDFS上存储的格式。以下是将MySQL数据导入为Parquet格式的示例:

sqoop import --connect jdbc:mysql://bigdata01:3306/sqoop \
--username root \
--password 123456 \
--table user \
--delete-target-dir \
--target-dir '/sqoopdata/user2' \
-m 1 \
--fields-terminated-by '\t' \
--null-string '\\N' \
--null-non-string '0' \
--as-parquetfile

3.2、处理MySQL中的null值

对于string类型的null值,导出时使用\N表示;对于数值类型的null值,则导入为0。

--null-string '\\N' \
--null-non-string '0' \

 -as-parquetfile    将mysql数据导出到hdfs的时候,是parquet类型的

假如在hdfs上有一个文件,创建一个hive表,指定这个表的数据的位置就是这个文件所在的位置。hive中有数据

 现在创建一个表,字段跟数据的文件字段数量和类型都一样,最重要的是数据类型和存储位置一定要要分析的文件一样。

create external table users(
id int,
age int
)
row format delimited
fields terminated by '\t'
stored as parquet
location '/sqoopdata/user2'

补充一个UUID:

package com.bigdata;

import java.util.UUID;

public class UUIDDemo {
    /**
     *  UUID 经常用于给图片或者文件起别名的时候
     * @param args
     */
    public static void main(String[] args) {
        for (int i = 0; i < 100; i++) {
            // d8bfa531-80d9-441e-a9bc-6b18d962570b  36位的随机字符串,其中有4个-  UUID,全球唯一
            UUID uuid = UUID.randomUUID();
            String str = uuid.toString();
            System.out.println(str.replaceAll("-",""));
        }

    }
}

四、Lombok使用指南

4.1、 安装Lombok插件

首先,需要在IDE中安装Lombok插件。

4.2、导入Lombok包

在项目中导入Lombok包:

<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <version>1.18.24</version>
</dependency>

4.3、使用Lombok简化实体类

Lombok可以帮助我们快速实现实体类的set、get方法、toString方法、无参构造方法等。以下是使用Lombok的示例:

package com.bigdata;

import lombok.*;

@Data // 一个顶 @Setter @Getter @ToString @EqualsAndHashCode
public class Student {
    private String name;
    private int age;
}

五、实战:使用Lombok创建Student类

以下是使用Lombok创建Student类的完整代码:

package com.bigdata;

import lombok.*;

@NoArgsConstructor
@AllArgsConstructor
@Data
public class Student {
    private String name;
    private int age;
}

package com.bigdata;

public class TestStudent {

    public static void main(String[] args) {
        Student student = new Student();
        student.setName("zhangsan");
        student.setAge(20);

        System.out.println(student.getName());

        Student student2 = new Student("lisi",20);
        System.out.println(student2.toString());
    }
}

六、结论

        掌握Apache Sqoop能够使数据工程师和分析师有效地管理关系型数据库和大数据平台之间的数据传输。它支持增量导入、数据导出和作业管理,使其成为ETL流程中的全面工具。本文详细介绍了Sqoop增量导入、数据格式转换、Lombok的使用。这些技术在大数据处理和Java开发中都非常实用。

 视频链接

18-sqoop介绍_哔哩哔哩_bilibili

19-sqoop的安装_哔哩哔哩_bilibili

20-sqoop的前两个命令_哔哩哔哩_bilibili

21-sqoop导出emp表_哔哩哔哩_bilibili

22-mysql导入hdfs的一些常见参数的使用_哔哩哔哩_bilibili

23-mysql数据导入hive_哔哩哔哩_bilibili

24-分享一个不常见的错误_哔哩哔哩_bilibili

25-sqoop实现增量导入_哔哩哔哩_bilibili

26-sqoop的export操作_哔哩哔哩_bilibili

27-sqoop中的job_哔哩哔哩_bilibili

28-sqoop中的其他补充内容_哔哩哔哩_bilibili

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值