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

一、Sqoop 概述

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

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

二、Sqoop 使用

1. 关系型数据库数据导入 HDFS

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

sqoop import --connect jdbc:mysql://10.0.0.100/hadooptest
--username hadoopuser \> --password password --table employees

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

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 会根据主键列的内容决定如何把数据源分段

2. 关系型数据库数据导入Hive

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

sqoop import --connect jdbc:mysql://10.0.0.100/hadooptest
--username hadoopuser -P
--table employees
--hive-import --hive-table employees

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

sqoop import --connect jdbc:mysql://10.0.0.100/hadooptest
--username hadoopuser -P
--table employees --cloumns first_name,salary
--where "salary > 45000"
--hive-import --hive-table employees

通过 SQL 查询导入

sqoop import --connect jdbc:mysql://10.0.0.100/hadooptest
--username hadoopuser -P
--table employees 
--query 'select first_name, salary, timestamp(start_date) as start_date
from employees where $CONDITIONS'
--hive-import --hive-table employees
--map-colunm-hive start_date=timestamp

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

3. 把 Hadoop数据导入关系型数据库

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

sqoop export --connect jdbc:mysql://10.0.0.100/hadooptest
--username hadoopuser -P
--table employees 
--export-dir edata 
--input-fields-terminated-by '\t'

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

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

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

4. 把 Hive 数据导入关系型数据库

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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值