美文网首页大数据大数据开发
大数据开发:如何使用Sqoop进行数据导入

大数据开发:如何使用Sqoop进行数据导入

作者: 成都加米谷大数据 | 来源:发表于2021-06-30 17:57 被阅读0次

    在大数据处理的诸多环节当中,数据的引入是前期的重要一环,尤其是很多传统的数据存储,多以关系型数据库为主,而这些数据要导入到分布式存储体系当中,往往需要用到Sqoop。今天的大数据开发学习分享,我们主要来讲讲如何使用Sqoop进行数据导入。

    Sqoop 是连接传统关系型数据库(支持JDBC的Connector)和 Hadoop 生态系统的桥梁。采用批处理的方式,利用MR 来加快数据传输速度,完成数据传输。

    Sqoop 是一个客户端工具,它的架构非常简单的,主要由三个部分组成:Sqoop client、HDFS/HBase/Hive、Database 。

    如何使用Sqoop将数据导入HDFS

    将数据从传统数据库导入HDFS分为两步:

    步骤1: Gather Metadata

    Sqoop与数据库server通信 ,获取数据库表元数据信息;完成并发数设定,字段类型如何映射,如何转化等任务。

    步骤2: Submit Map-Only Job

    Sqoop启动Map-Only 的MR作业,并行导入元数据。

    全量数据导入

    全量导入适合一次性导入做离线分析。

    sqoop import \

    --connect jdbc:mysql://ip:port/db \

    --username root \

    --password pass \

    --table users \

    --target-dir /user/root/ users_all \

    --null-string "\\N" \

    --null-non-string "\\N" \

    重要参数说明:

    --query <statement>

    导入的查询语句,不能和--table 同时使用。

    select * from table where \$CONDITIONS” \

    --table <table-name>

    导入的源表表名

    --target-dir <dir>

    导入HDFS的目标路径

    --null-string <null-string>

    string类型空值的替换符

    --null-non-string<null-string> 

    非string类型空值的替换符

    -m <n>

    map 任务数量,默认为4。

    --split-by <column-name>

    若map任务数>1, 需要指定根据哪一列来实现哈希分片,从而将不同分片的数据分发到不同map 任务上去跑,避免数据倾斜。

    增量数据导入

    在实际生产环境中,系统可能会定期从与业务相关的关系型数据库向Hadoop导入数据,导入数仓后进行后续离线分析。故我们此时不可能再将所有数据重新导一遍,此时就需要增量数据导入这一模式了。

    增量数据导入分两种:1.基于递增列的增量数据导入。2.基于时间列的增量数据导入。

    基于递增列的增量数据导入

    将递增列值大于阈值的所有数据增量导入Hadoop。采用append 方式,每次运行增量导入到表之前,都要修改--last-value的值,否则出现重复记录。同时也要求源表中ID为递增且不重复。

    重要参数说明:

    --incremental append  

    基于递增列的增量导入

    --check-column <col> 

    指定递增列,int类型

    --last-value <value> 

    起始导入的阈值,int类型

    用户表中有一个自增列ID,之前已将ID号为0~999的用户数据导入到HDFS,后续只需要只从ID大于999后开始导入即可。

    基于时间列的增量数据导入

    将时间列值大于阈值的数据增量导入Hadoop。该方式要求原来表中存在time 字段。

    重要参数说明:

    --incemental lastmodified 

    给予时间列的增量导入

    --check-column <col>   

    时间列,int 类型

    --last-value <value>   

    起始导入的阈值,如'2020-01-01 10:00:00' 

    --merge-key  <col> 

    合并列,合并键值相同记录,一般指主键

    用户的常住地发生变化,修改用户信息表,update_time 字段也随之改变,Sqoop依然会将相同状态更改后的用户信息导入HDFS。此时HDFS将出现两条同一用户的数据,我们可以指定merge-key参数为user_id,将新的记录与原有记录合并。

    关于大数据开发学习,如何使用Sqoop进行数据导入,以上就为大家做了简单的介绍了。Sqoop作为一个数据导入工具来说,需要结合到具体的场景选择使用。

    相关文章

      网友评论

        本文标题:大数据开发:如何使用Sqoop进行数据导入

        本文链接:https://www.haomeiwen.com/subject/tggrultx.html