Sqoop的简单使用案例之数据导出

Sqoop的简单使用案例之数据导出


文章目录

  • Sqoop的简单使用案例之数据导出
    • 写在前面
    • 导出数据的演示说明
      • 导出的前置说明
      • export的基本语法
      • HIVE/HDFS数据导出到RDBMS
      • 脚本打包
    • 数据导出失败的原因分析


写在前面

  • Hadoop版本:Hadoop-3.1.3
  • Linux版本:CentOS7.5
  • Sqoop版本:Sqoop-1.4.6
  • MySQL版本:MySQL5.7
  • Hive版本:Hive-3.1.2

导出数据的演示说明

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

以下有关sqoop的数据导出命令都需要先进入到sqoop的安装目录下

导出的前置说明

  • 该导出工具export是将一组文件从HDFS导出到RDBMS。目标表必须已经存在于数据库中。输入文件被读取并根据用户指定的分隔符解析成一组记录。

  • 默认的操作是将这些转化为一组 INSERT 语句,将记录注入到数据库中。在 更新模式 中,Sqoop将生成UPDATE语句,替换数据库中的现有记录;在 调用模式 中,Sqoop将为每条记录进行存储过程调用。

export的基本语法

$ sqoop export (generic-args) (export-args)
$ sqoop-export (generic-args) (export-args)

注意:尽管Hadoop通用参数必须在任何出口参数之前,但出口参数可以以任何顺序输入。

HIVE/HDFS数据导出到RDBMS

  • 确定MySQL服务开启正常

通过sqoop将Hive存储的数据导出到MySQL关系型数据库的shell命令如下所示:

[whybigdata@node01 sqoop-1.4.6]# bin/sqoop export \
--connect jdbc:mysql://hadoop102:3306/company \
--username root \
--password 000000 \
--table staff \
--num-mappers 1 \
--export-dir /user/hive/warehouse/staff_hive \
--input-fields-terminated-by "\t"

注意:MySQL中如果表不存在,不会自动创建,所以需要提前确保数据导出到MySQL的数据表已经存在

当然,我们除了通过上述的方式将Hive或者hdfs上的数据导出到关系型数据库MySQL之外,我们还可以通过编写脚本的方式来将数据导出到关系型数据库MySQL,下面我们将来演示这一个实验操作。

脚本打包

使用opt格式的文件打包sqoop命令,然后执行

  • 创建一个 .opt 文件
[whybigdata@node01 sqoop-1.4.6]# mkdir opt

[whybigdata@node01 sqoop-1.4.6]# touch opt/job_HDFS2RDBMS.opt
  • 编写sqoop脚本
[whybigdata@node01 sqoop-1.4.6]# vim opt/job_HDFS2RDBMS.opt
## 添加如下内容
export
--connect jdbc:mysql://hadoop102:3306/company
--username root
--password 000000
--table staff
--num-mappers 1
--export-dir /user/hive/warehouse/staff_hive
--input-fields-terminated-by "\t"
  • 执行该脚本
[whybigdata@node01 sqoop-1.4.6]# bin/sqoop --options-file opt/job_HDFS2RDBMS.opt

数据导出失败的原因分析

数据导出往往可能因为某些原因而导致失败,可能的原因列举如下:

  • 由于硬件的故障,或者服务器软件崩溃导致hadoop集群和关系型数据库之间的连接不成功
  • 导出的数据原本是不完整或者是畸形的
  • 导出的shell命令书写有误(例如:分隔符、端口、数据路径等等)
  • 容量问题:比如是内存或虚拟机的磁盘空间不足。

全文结束!

你可能感兴趣的:(大数据常见同步工具,大数据技术栈文档,sqoop,hadoop,hive,大数据)