天天看点

大数据学习之sqoop

sqoop概述

简介

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

大数据学习之sqoop

数据导入

导入工具从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:

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导入的数据,请使用以下命令查看导入的数据:

2.2导入到HDFS指定目录

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

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

下面的命令是用来导入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文件导出到关系型数据库

语法:

示例:

数据是在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命令行

继续阅读