【Hadoop学习笔记】(三)——Sqoop

Sqoop是一个用来将Hadoop和关系型数据库中的数据相互转移的工具,可以将一个关系型数据库(例如 :MySQL ,Oracle ,Postgres等)中的数据导进到Hadoop的HDFS中,也可以将HDFS的数据导进到关系型数据库中。

其原理和 Hive 类似,本质就是通过命令 生成 MapReduce 任务,进而去执行数据迁移任务。

将 mysql 的 hadooptest 数据库中的 employees 表导入 HDFS

sqoop import

检查输出目录(默认情况输出文件目录名与数据表的名称相同):

hadoop fs -ls employee

可以在 HDFS 目录下看到输出的数据,里面存放的就是数据库表中的数据

/user/hadoop/employees/part-m-00000
/user/hadoop/employees/part-m-00001
/user/hadoop/employees/part-m-00002
/user/hadoop/employees/part-m-00003

可以看到这里输出了4个文件,因为 Sqoop 默认使用 4个 mapper 执行 MapReduce 作业(可以通过 -m 选项指定 mapper 的数量), Sqoop 会根据主键列的内容决定如何把数据源分段

将 mysql 的 hadooptest 数据库中的 employees 表导入 Hive 中的 employees 表

sqoop import

导入指定列,并规定范围:

sqoop import

通过 SQL 查询导入

sqoop import

from employees where $CONDITIONS'

–query 指定了查询语句,Sqoop 要求必须在 SQL 语句中加入 where 子句
–map 指定了数据映射类型,指定 start_date 列的数据类型为 timestamp、

将 HDFS edata目录下的所有文件导入 mysql 的 employees 表

sqoop export

input-fields-terminated 指定了文件分隔符

上述将数据插入数据库中,可能在主键重复时会插入失败,可以使用 –update-key 指定主键,生成 UPDATE语句

还可以使用 –update-mode allowinsert,在更新现有数据的同时在数据表中插入并不存在的新纪录

Sqoop 目前无法直接将 Hive 数据表导入关系型数据库,但是在一些情况下可以解决这个问题。可以将 Sqoop 指向 Hive 在 HDFS 上存储的数据文件,从而导入这些数据。

但是 Sqoop 目前无法导出 Hive 表中存储的二进制 SequenceFile

Original: https://blog.csdn.net/wanger61/article/details/127551330
Author: wanger61
Title: 【Hadoop学习笔记】(三)——Sqoop

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/817989/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球