Hadoop生态圈中的数据同步工具SQOOP

这篇具有很好参考价值的文章主要介绍了Hadoop生态圈中的数据同步工具SQOOP。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


)

一、sqoop的概念

在大部分常见的软件中,比如淘宝、拼多多…,网站都会产生大量的数据
电商网站:订单数据、商品数据、分类数据、用户信息数据、用户行为数据等等
课程网站:订单数据、视频数据、课程数据、用户信息数据等等

虽然说不同领域的数据格式和数据含义不一样,但是他们都有一个公共点:数据大部分都是在RDBMS关系型数据库进行存放的。如果我们要对某一个领域的数据进行大数据的统计分析,首先我们必须先把数据从非大数据环境同步到大数据环境中。
大部分数据都是在RDBMS存放的,大数据环境大部分都是HDFS、Hive、HBase。我们需要把RDBMS的数据同步到大数据环境中。

SQOOP软件是Apache开源的顶尖项目,sqoop.apache.org 被设计用来在RDBMS和Hadoop(Hive、HDFS、HBase)之间进行数据传输的工具
因此sqoop的适用场景限制就非常大,因此这个技术基本很少更新了。软件基本已经从apache退役

二、sqoop的核心功能

1、数据导入import

指的是将数据从RDBMS(MySQL\ORACLE\SQL SERVER)导入到Hadoop环境(HDFS、HBASE、Hive)中

导入的作用就是将数据从非大数据环境导入到大数据环境通过大数据技术做统计分析的

2、数据导出export

指的是将数据从Hadoop环境(HDFS、Hive、HBase)导出到RDBMS中

将数据统计分析完成得到结果指标,指标在大数据环境存放的,如果对指标做可视化展示,数据在大数据环境下很难进行可视化展示的,因此我们需要把数据从大数据环境导出到非大数据环境RDBMS中进行可视化展示等后续操作

三、sqoop的底层实现

sqoop技术也是Hadoop生态的一部分,因为Sqoop进行导入和导出数据时,需要编写针对的导入和导出命令,但是这个命令底层也会转换成为MapReduce程序进行运行。

SQOOP运行基于MapReduce和YARN进行运行

四、sqoop的安装和部署

因此sqoop底层是基于Hadoop的,因此sqoop也是安装一个单节点的即可,sqoop也是提供了一个可以导入和导出数据的命令行客户端。

sqoop软件安装三部曲:

  • 1、上传解压
  • 2、配置环境变量 —— vim /etc/profile
  • 3、修改软件的配置文件
    • sqoop-env.sh文件
    • hadoop数据同步,Hadoop,hadoop,sqoop,大数据
  • 4、sqoop的特殊配置
    • sqoop可以数据把数据在大数据和非大数据环境之间进行迁移的,非大数据环境主要是RDBMS关系型数据库
    • sqoop连接RDBMS 底层也是基于JDBC进行连接的,因此如果要使用sqoop连接rdbms,我们需要把对应数据库的jdbc驱动程序jar包放到sqoop的lib目录下
    • 需要把mysql-connector-java.jar 放到sqoop的lib目录下即可

五、sqoop的基本操作

需要跟数据库的连接参数
--connect   jdbcurl
--username  用户名
--password  密码

1、sqoop查看RDBMS中有哪些数据库

sqoop list-databases

hadoop数据同步,Hadoop,hadoop,sqoop,大数据

2、sqoop查看某一个数据库下有哪些数据表

sqoop list-tables

hadoop数据同步,Hadoop,hadoop,sqoop,大数据

3、通过sqoop执行sql语句

sqoop eval --query | -e “sql”

hadoop数据同步,Hadoop,hadoop,sqoop,大数据

六、sqoop的核心功能操作

1、数据导入import

  • 指的是将数据从RDBMS关系型数据库导入到Hadoop环境中(HDFS、Hive、HBase)

  • 将RDBMS的数据导入到HDFS中
    不常用

    • HDFS导入时连接的RDBMS的参数
      --driver
      --connect  
      --username
      --password
      [--table]   导入哪张数据表的数据
      [--columns]  导入指定数据表的指定列的数据
      [--query]   根据查询语句的结果导入数据
      [--where]   筛选条件,根据指定的条件导入数据
      
      HDFS导入的参数
      --target-dir   导入到HDFS上的路径
      --delete-target-dir  如果HDFS的路径存在 提前删除
      [--as-textfile|sequencefile..]   导入到HDFS上的文件的格式
      --num-mappers    指定导入的时候底层MapReduce启动多少个Map Task运行
      --fields-terminated-by  指定导入的文件列和列的分隔符,默认是一种特殊字符,同时自动创建Hive数据表时,表的列的分隔符
      --lines-terminated-by   指定导入的文件的行和行的分割符,默认就说换行符 一般是不使用这个参数的,就算我们设置了也不生效,除非我们加上一些特殊参数
      --null-string:如果导入的MySQL数据表的某一个字符串类型的列的值为null,那么我们在HDFS的文件中使用什么字符替换null值
      --null-non-string:如果导入的MySQL数据表的某一个非字符串类型的列的值为null,那么我们在HDFS的文件中使用什么字符替换null值
      
    • 导入数据表的所有数据到HDFS:
      sqoop import --driver com.mysql.cj.jdbc.Driver --connect 'jdbc:mysql://single:3306/demo?serverTimezone=UTC&useUnicode=true&characterEncoding=UTF-8' --username root --password Root123456.. --table student --target-dir /import --delete-target-dir --fields-terminated-by '=' --num-mappers 1 --as-sequencefile
      
    • 导入数据表的指定列的数据到HDFS:
      sqoop import --driver com.mysql.cj.jdbc.Driver --connect 'jdbc:mysql://single:3306/demo?serverTimezone=UTC&useUnicode=true&characterEncoding=UTF-8' --username root --password Root123456.. --table student --columns student_name,student_age --target-dir /import --delete-target-dir  --fields-terminated-by ',' --num-mappers 1 --as-textfile
      
    • 根据查询语句导入指定的数据到HDFS:

      • --table table_name  --where "条件"  只能导入一张表的数据
        sqoop import --driver com.mysql.cj.jdbc.Driver --connect 'jdbc:mysql://single:3306/demo?serverTimezone=UTC&useUnicode=true&characterEncoding=UTF-8' --username root --password Root123456.. --table student --columns student_name,student_age --where "student_age<40"  --target-dir /import --delete-target-dir  --fields-terminated-by ',' --num-mappers 1 --as-textfile
        
      • --query ""   可以通过连接查询同时导入多张表的数据
        sqoop import --driver com.mysql.cj.jdbc.Driver --connect 'jdbc:mysql://single:3306/demo?serverTimezone=UTC&useUnicode=true&characterEncoding=UTF-8' --username root --password Root123456.. --query 'select * from student where student_age<40 and $CONDITIONS'  --target-dir /import --delete-target-dir  --fields-terminated-by ',' --num-mappers | -n 1 --as-textfile
        
  • 将RDBMS的数据导入到Hive数据表中 常用

    • 导入参数

      • HDFS导入时连接的RDBMS的参数
        --driver
        --connect  
        --username
        --password
        [--table]   导入哪张数据表的数据
        [--columns] 导入指定数据表的指定列的数据
        [--query]   根据查询语句的结果导入数据
        [--where]   筛选条件,根据指定的条件导入数据
        
      • 导入到Hive中的参数
        --hive-import    指定将数据导入到Hive的数据表,而非HDFS或者HBase
        --hive-database   指定将数据导入到Hive的哪个数据库中
        --hive-table         指定将数据导入到Hive的哪个数据表中
        --create-hive-table   如果Hive表没有提前存在,那么这个选项必须添加,会根据导入的数据自动推断创建Hive数据表,但是如果Hive中的数据表已经存在,那么这个参数一定不能添加
        
      • 如果我们将RDBMS中的数据导入到Hive中,有两种导入模式

        • 全量导入
          第一次导入RDBMS的数据到Hive中

          • 将RDBMS对应的数据表中的数据全部导入Hive中
          • –hive-overwrite参数 将RDBMS表中的所有数据(–table 如果加了–query --columns,就不是全量的问题)添加到Hive对应的数据表,而且覆盖添加。
          • 一般使用在第一次将RDBMS的数据导入到Hive中,如果第一次导入不需要–hive-overwrite选项
            如果不是第一次导入,还想全量导入,那么必须加–hive-overwrite选项
        • 增量导入
          非第一次导入RDBMS数据到Hive

          • 将RDBMS数据表对应增加的新的数据导入到Hive中

          • 增量导入又分为两种方式:一种根据自增id导入,第二种根据一个时间戳增量导入

          • sqoop的增量导入有两种方式:append lastmodified,其中Hive的增量导入只支持append方式,HDFS增量导入支持lastmodified方式

          • --check-column   RDBMS对应的列
            --incremental  append
            --last-value   num上一次导入的自增的值的最后一个
            
          • 根据RDBMS数据表的自增id导入:
            –check-column rdbms数据表的自增列名 --incremental append --last-value num append增量导入需要指定RDBMS中一个可以自增或者是数字依次变大的一个列,同时还需要指定上一次导入的时候值的大小

          • 根据RDBMS数据表的一个时间字段导入:
            –check-column rdbms数据表的时间列 --incremental lastmodified --last-value “上一次导入的最后一条数据的时间戳”

    • 全量导入:
      如果要做全量导入,Hive的数据表可以不用提前存在,使用create-hive-table自动创建即可

      • sqoop import --driver com.mysql.cj.jdbc.Driver --connect 'jdbc:mysql://single:3306/demo?serverTimezone=CST&useUnicode=true&characterEncoding=UTF-8' --username root --password Root123456.. --table student --hive-import --hive-database test --hive-table student --create-hive-table
        
    • 增量导入:
      如果要做增量导入,Hive数据表必须提前存在,而且还具备RDBMS对应数据表的历史数据

      • 按照自增id增量导入

        • sqoop import --driver com.mysql.cj.jdbc.Driver --connect 'jdbc:mysql://single:3306/demo?serverTimezone=CST&useUnicode=true&characterEncoding=UTF-8' --username root --password Root123456.. --table student --hive-import --hive-database test --hive-table student --check-column student_id  --incremental append --last-value 5
          
      • 按照创建时间增量导入

        • hive-import目前还不支持时间戳增量的方式
    • 注意:如果将数据导入到Hive中,sqoop一共做了两步操作:1、先通过MR程序把数据上传到HDFS上,2、使用hive的load装载命令将上传到HDFS上的数据文件加载到数据表中。3、如果Hive数据表不存在,那么在导入的时候可以指定–create-hive-table创建数据表,创建的数据表的列的分隔符和–fields-terminated-by设置的HDFS上文件的列的分隔符保持一致的。
      sqoop操作Hive的时候,需要Hive的依赖,但是sqoop默认是没有hive的编程依赖的,因此sqoop迁移数据到hive会报错,如果不想报错,那么我们需要把hive-common.jar包复制到sqoop的lib目录下。

    • 【导入数据时间字段的问题】

      • 数据导入之后,RDBMS中的时间和Hive中时间不一致,主要由于时区的问题导致的,RDBMS使用的时区和导入数据时指定的时区参数不是同一个时区导致的问题。
      • 只需要保证RDBMS的时区和导入参数设置的时区serverTimezone保持一致即可。
      • RDBMS的时区:select @@global.time_zone
      • 默认情况下,只要我们在中国,没有改过数据库和系统的时区,数据库和系统时区默认是+0800,因此serverTimezone=Asia/Shanghai

2、数据导出export

将Hadoop平台的数据导出到RDBMS中,导出比导入简单。导出数据时,因为Hive、HBase存储的数据都在HDFS上,因此导出只需要学习如何将HDFS上的数据导出到RDBMS即可。

【导出的注意事项】:RDBMS中的数据表必须提前存在,如果不存在,会报错

导出参数

导出时和RDBMS相关的参数
--driver:JDBC的驱动类
--connect:JDBCUrl
--username:数据库的用户名
--password:数据库的密码
--table: 指定导入RDBMS中哪个数据表的数据
--columns <col,col,col...>:代表的rdbms的列名,列名必须和文件中列的顺序保持一致,防止数据串列
导出HDFS的参数
--export-dir : 导出的HDFS哪个目录下的文件数据
--num-mappers | -m  : 将导出命令翻译成为n个map task任务
--input-fields-terminated-by : 很重要,指定HDFS上文件中列和列的分隔符的
--input-lines-terminated-by : 指定HDFS上文件行和行的分割符  行的分隔符\n
--update-mode:取值allowinsert和updateonly,导出数据的两种模式
allowinsert  更新已经导出的数据,同时追加新的数据   对mysql数据库目前不支持的
updateonly  只更新以前导出的数据,新的数据不会导出
--update-key:--update-mode如果想实现它的功能,必须和--update-key结合使用,而且--update-key最好指定一个RDBMS的主键字段,否则--update-mode的效果会出现混乱

【注意】如果没有指定update-mode 那么默认是追加的形式导出(会出数据重复)

如果我们想要导出数据到MySQL,而且还不想让数据重复,可以先使用sqoop eval 操作执行清空目标表数据的命令,清空成功以后再导出数据。

sqoop eval --driver com.mysql.cj.jdbc.Driver --connect 'jdbc:mysql://single:3306/demo?serverTimezone=CST&useUnicode=true&characterEncoding=UTF-8' --username root --password Root123456.. --query 'delete from student'

sqoop import --driver com.mysql.cj.jdbc.Driver --connect 'jdbc:mysql://single:3306/demo?serverTimezone=CST&useUnicode=true&characterEncoding=UTF-8' --username root --password Root123456.. --table student --export-dir /user/hive/warehouse/test.db/student --input-fields-terminated-by '=' -m 1 --columns 'student_id,student_name,student_age,create_time'

导入一般是我们需要对RDBMS的数据进行大数据处理分析时,我们把RDBMS的数据通过import导入到HDFS或者Hive,导出之后我们处理完成,得到结果数据表,然后把结果数据表通过export导出到RDBMS中,用于后期的数据可视化展示。文章来源地址https://www.toymoban.com/news/detail-733088.html

到了这里,关于Hadoop生态圈中的数据同步工具SQOOP的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 大数据导论——Hadoop生态系统

    Hadoop是Apache软件基金会旗下一个开源分布式计算平台,为用户提供底层细节透明的基础框架。 经过多年的发展,Hadoop生态系统不断完善和成熟,目前已经包含了多个子项目,除了核心的HDFS和MapReduce以外,Hadoop生态系统还包括ZooKeeper,HBase,Hive,Pig,Mahout,Sqoop,Flume,Ambari等。 它实现

    2024年02月03日
    浏览(44)
  • 大数据系统架构-Hadoop生态系统

    Hadoop是较早用于处理大数据集合的分布式存储计算基础架构,通过Hadoop,用户可以在不了解分布式底层细节的情况下,开发分布式程序,充分利用集群的为例执行告诉运算和存储。简单来说,Hadoop是一个平台,在它之上,可以更容易地开发和运行大规模数据的软件。 Hadoop体系

    2023年04月27日
    浏览(41)
  • 【大数据】图解 Hadoop 生态系统及其组件

    在了解 Hadoop 生态系统及其组件之前,我们首先了解一下 Hadoop 的三大组件,即 HDFS、MapReduce、YARN,它们共同构成了 Hadoop 分布式计算框架的 核心 。 HDFS ( Hadoop Distributed File System ):HDFS 是 Hadoop 的 分布式文件系统 ,它是将大规模数据分散存储在多个节点上的基础。HDFS 主要

    2024年02月11日
    浏览(45)
  • 大数据Hadoop教程-学习笔记06【Hadoop生态综合案例:陌陌聊天数据分析】

    视频教程:哔哩哔哩网站:黑马大数据Hadoop入门视频教程,总时长:14:22:04 教程资源:https://pan.baidu.com/s/1WYgyI3KgbzKzFD639lA-_g,提取码:6666 【P001-P017】大数据Hadoop教程-学习笔记01【大数据导论与Linux基础】【17p】 【P018-P037】大数据Hadoop教程-学习笔记02【Apache Hadoop、HDFS】【20p】

    2024年02月02日
    浏览(48)
  • hadoop生态圈-- 个人笔记学习04 数据迁移

    数据迁移场景 冷热集群数据同步、分类存储 集群数据整体迁移 准实时同步 双备份 线上把集群切向B的同步集群 要素考量 bandwdith performance 1… 单机?分布式? data-increment 可以配合HDFS快照等技术实现增量数据同步。 syncable .数据指定周期内未完成同步,下一周期开始,无法做

    2024年02月12日
    浏览(48)
  • 「大数据集群的搭建和使用」背景知识:大数据Hadoop生态圈介绍

    目录 一、Hadoop简介 二、Hadoop的运行模式 1. 单机模式 2. 伪分布式模式 3. 完全分布式模式 三、Hadoop生态圈组件 1. HDFS 2. MapReduce 3. YARN 4. Hive 5. Pig 6. HBase 7. HCatalog 8. Avro 9. Thrift 10. Drill 11. Mahout 12. Sqoop 13. Flume 14. Ambari 15. Zookeeper 四、Hadoop优缺点 五、Hadoop学习路径 hadoop = MapReduce+

    2024年02月03日
    浏览(46)
  • 一文搞懂什么是Hadoop?Hadoop的前世今生,Hadoop的优点有哪些?Hadoop面试考查重点,大数据技术生态体系

    目录 1.1 Hadoop 是什么  1.2 Hadoop 发展历史 1.3 Hadoop 三大发行版本  1.4 Hadoop优势(4高)  1.5 Hadoop 组成(面试重点)  1.5.1 HDFS 架构概述   1.5.2 YARN 架构概述   1.5.3 MapReduce 架构概述   1.5.4 HDFS、YARN、MapReduce 三者关系   1.6 大数据技术生态体系  1.7 推荐系统框架图   (1 ) Had

    2024年02月01日
    浏览(49)
  • 解密Hadoop生态系统的工作原理 - 大规模数据处理与分析

    在当今的数字时代,大规模数据处理和分析已经成为了企业和组织中不可或缺的一部分。为了有效地处理和分析海量的数据,Hadoop生态系统应运而生。本文将深入探讨Hadoop生态系统的工作原理,介绍其关键组件以及如何使用它来处理和分析大规模数据。 Hadoop是一个开源的分布

    2024年02月12日
    浏览(46)
  • 【大数据技术Hadoop+Spark】Spark架构、原理、优势、生态系统等讲解(图文解释)

    Spark最初由美国加州伯克利大学(UCBerkeley)的AMP(Algorithms, Machines and People)实验室于2009年开发,是基于内存计算的大数据并行计算框架,可用于构建大型的、低延迟的数据分析应用程序。Spark在诞生之初属于研究性项目,其诸多核心理念均源自学术研究论文。2013年,Spark加

    2024年01月16日
    浏览(51)
  • HDFS 跨集群数据同步(hive,hadoop)

    两个不同的HDFS 集群数据迁移( A集群的数据 - B 集群) 采用的是 SHELL 脚本  按表进行; 日期分区进行; #!/bin/bash ##################### #创建人:DZH #创建日期: 2020-04 #内容: 数据迁移 ##################### ##################################### [ \\\"$#\\\" -ne 0 ] FILE=$1 path=$(cd `dirname $0`; pwd) ############## 获取执

    2024年04月27日
    浏览(58)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包