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/
转载文章受原作者版权保护。转载请注明原作者出处!