大数据学习之sqoop

sqoop概述

简介
Sqoop是一款开源的工具,主要用于在Hadoop(Hive)与传统的数据库(mysql、postgresql…)间进行数据的传递,可以将一个关系型数据库(例如 : MySQL ,Oracle ,Postgres等)中的数据导进到Hadoop的HDFS中,也可以将HDFS的数据导进到关系型数据库中。
在这里插入图片描述

数据导入
导入工具从RDBMS向HDFS导入单独的表。表中的每一行都被视为HDFS中的记录。所有记录都以文本文件的形式存储在文本文件中或作为Avro和Sequence文件中的二进制数据存储。

数据导出
导出工具将一组文件从HDFS导出回RDBMS。给Sqoop输入的文件包含记录,这些记录在表中被称为行。这些被读取并解析成一组记录并用用户指定的分隔符分隔。

sqoop安装

Sqoop是Hadoop的子项目,因此需要先安装Java以及hadoop
1.sqoop下载:http://archive.apache.org/dist/sqoop/
2.安装包解压到指定目录。
3.修改配置文件:

$ cd $SQOOP_HOME/conf
$ mv sqoop-env-template.sh sqoop-env.sh

打开sqoop-env.sh并编辑下面几行:

export HADOOP_COMMON_HOME=/usr/local/apps/hadoop-2.7.7
export HADOOP_MAPRED_HOME=/usr/local/apps/hadoop-2.7.7
export HIVE_HOME=/home/hadoop/apps/hive-2.3.7

4.加入mysql的jdbc驱动包
驱动包下载参考:https://blog.csdn.net/weixin_41804049/article/details/87719574
然后把安装包复制到**$SQOOP_HOME/lib/**目录下。
5.添加环境变量

vi /etc/profile

添加以下内容:

export SQOOP_HOME=/usr/local/apps/sqoop-1.4.4
export PATH = $SQOOP_HOME/bin

6.验证启动

sqoop-version

到此,整个sqoop安装完成。

sqoop数据导入

导入单个表从关系数据库到HDFS。表中的每一行被视为HDFS的记录。所有记录都存储为文本文件的文本数据。
1.语法
下面的语法用于将数据导入HDFS:

$ sqoop-import (generic-args) (import-args) 

2.实例
在mysql中有一个库userdb中三个表:emp, emp_add和emp_conn

2.1导入数据到hdfs:

sqoop-import   \
--connect jdbc:mysql://slave1:3306/test   \
--username root  \
--password root   \
--table emp   \
--m 1  

为了验证在HDFS导入的数据,请使用以下命令查看导入的数据:

hadoop fs -cat /user/hadoop/emp/part-m-00000

2.2导入到HDFS指定目录
在导入表数据到HDFS使用Sqoop导入工具,我们可以指定目标目录。

以下是指定目标目录选项的Sqoop导入命令的语法:

--target-dir <new or exist directory in HDFS>

下面的命令是用来导入emp_add表数据到’/queryresult’目录:

sqoop-import \
--connect jdbc:mysql://slave1:3306/test \
--username root \
--password root \
--target-dir /queryresult \指定目录
--fields-terminated-by ‘\001’ \指定分隔符
--table emp 
--split-by id
--m 1

如果设置了 --m 1,则意味着只会启动一个maptask执行数据导入;
如果不设置 --m 1,则默认为启动4个map task执行数据导入,则需要指定一个列来作为划分map task任务的依据。

3.导入关系表到HIVE

sqoop-import 
--connect jdbc:mysql://slave1:3306/test 
--username root 
--password root 
--table emp 
--hive-import  \增加导入hive声明
--split-by id  
--m 1

4.导入表数据子集
我们可以使用Sqoop导入工具导入表的"where"子句的一个子集。它执行在各自的数据库服务器相应的SQL查询,并将结果存储在HDFS的目标目录。

下面的命令用来导入emp_add表数据的子集。子集查询检索员工ID和地址,居住城市为(sec-bad):

sqoop-import \
--connect jdbc:mysql://slave1:3306/test \
--username root \
--password root \
--where "city ='sec-bad'" \子集条件声明
--target-dir /wherequery \
--table emp_add \
 --m 1

Sqoop数据导出

将数据从HDFS文件导出到关系型数据库

语法:

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

示例:
数据是在HDFS 中“EMP/”目录的emp_data文件中。
1.首先需要手动创建mysql中的目标表

$ mysql
mysql> USE db;
mysql> CREATE TABLE employee (
   id INT NOT NULL PRIMARY KEY,
   name VARCHAR(20),
   deg VARCHAR(20),
   salary INT,
   dept VARCHAR(10));

2.然后执行导出命令

sqoop-export \
--connect jdbc:mysql://slave1:3306/test \
--username root \
--password root \
--table employee \
--export-dir /user/hadoop/emp/

3.验证表mysql命令行

mysql>select * from employee;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值