关于sqoop:数据搬运组件基于Sqoop管理数据导入和导出

109次阅读

共计 3344 个字符,预计需要花费 9 分钟才能阅读完成。

本文源码:GitHub || GitEE

一、Sqoop 概述

Sqoop 是一款开源的大数据组件,次要用来在 Hadoop(Hive、HBase 等)与传统的数据库 (mysql、postgresql、oracle 等) 间进行数据的传递。

通常数据搬运的组件基本功能:导入与导出。

鉴于 Sqoop 是大数据技术体系的组件,所以关系型数据库导入 Hadoop 存储系统称为导入,反过来称为导出。

Sqoop 是一个命令行的组件工具,将导入或导出命令转换成 mapreduce 程序来实现。mapreduce 中次要是对 inputformat 和 outputformat 进行定制。

二、环境部署

在测试 Sqoop 组件的时候,起码要具备 Hadoop 系列、关系型数据、JDK 等根底环境。

鉴于 Sqoop 是工具类组件,单节点装置即可。

1、上传安装包

安装包和版本:sqoop-1.4.6

[root@hop01 opt]# tar -zxf sqoop-1.4.6.bin__hadoop-2.0.4-alpha.tar.gz
[root@hop01 opt]# mv sqoop-1.4.6.bin__hadoop-2.0.4-alpha sqoop1.4.6

2、批改配置文件

文件地位:sqoop1.4.6/conf

[root@hop01 conf]# pwd
/opt/sqoop1.4.6/conf
[root@hop01 conf]# mv sqoop-env-template.sh sqoop-env.sh

配置内容:波及 hadoop 系列罕用组件和调度组件 zookeeper。

[root@hop01 conf]# vim sqoop-env.sh
# 配置内容
export HADOOP_COMMON_HOME=/opt/hadoop2.7
export HADOOP_MAPRED_HOME=/opt/hadoop2.7
export HIVE_HOME=/opt/hive1.2
export HBASE_HOME=/opt/hbase-1.3.1
export ZOOKEEPER_HOME=/opt/zookeeper3.4
export ZOOCFGDIR=/opt/zookeeper3.4

3、配置环境变量

[root@hop01 opt]# vim /etc/profile

export SQOOP_HOME=/opt/sqoop1.4.6
export PATH=$PATH:$SQOOP_HOME/bin

[root@hop01 opt]# source /etc/profile

4、引入 MySQL 驱动

[root@hop01 opt]# cp mysql-connector-java-5.1.27-bin.jar sqoop1.4.6/lib/

5、环境查看

关键点:import 与 export

查看帮忙命令,并通过 version 查看版本号。sqoop 是一个基于命令行操作的工具,所以这里的命令上面还要应用。

6、相干环境

此时看下 sqoop 部署节点中的相干环境,根本都是集群模式:

7、测试 MySQL 连贯

sqoop list-databases --connect jdbc:mysql://hop01:3306/ --username root --password 123456

这里是查看 MySQL 数据库的命令,如图后果打印正确:

三、数据导入案例

1、MySQL 数据脚本

CREATE TABLE `tb_user` (`id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键 id',
  `user_name` varchar(100) DEFAULT NULL COMMENT '用户名',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='用户表';
INSERT INTO `sq_import`.`tb_user`(`id`, `user_name`) VALUES (1, 'spring');
INSERT INTO `sq_import`.`tb_user`(`id`, `user_name`) VALUES (2, 'c++');
INSERT INTO `sq_import`.`tb_user`(`id`, `user_name`) VALUES (3, 'java');

2、Sqoop 导入脚本

指定数据库的表,全量导入 Hadoop 零碎,留神这里要启动 Hadoop 服务;

sqoop import 
--connect jdbc:mysql://hop01:3306/sq_import \
--username root \
--password 123456 \ 
--table tb_user \
--target-dir /hopdir/user/tbuser0 \
-m 1

3、Hadoop 查问

[root@hop01 ~]# hadoop fs -cat /hopdir/user/tbuser0/part-m-00000

4、指定列和条件

查问的 SQL 语句中必须带有 WHERE$CONDITIONS:

sqoop import 
--connect jdbc:mysql://hop01:3306/sq_import \
--username root \
--password 123456 \
--target-dir /hopdir/user/tbname0 \
--num-mappers 1 \
--query 'select user_name from tb_user where 1=1 and $CONDITIONS;'

查看导出后果:

[root@hop01 ~]# hadoop fs -cat /hopdir/user/tbname0/part-m-00000

5、导入 Hive 组件

在不指定 hive 应用的数据库状况下,默认导入 default 库,并且主动创立表名称:

sqoop import 
--connect jdbc:mysql://hop01:3306/sq_import \
--username root \
--password 123456 \
--table tb_user \
--hive-import \
-m 1

执行过程,这里留神察看 sqoop 的执行日志即可:

第一步:MySQL 的数据导入到 HDFS 的默认门路下;

第二步:把长期目录中的数据迁徙到 hive 表中;

6、导入 HBase 组件

以后 hbase 的集群版本是 1.3,须要先创立好表,能力失常执行数据导入:

sqoop import 
--connect jdbc:mysql://hop01:3306/sq_import \
--username root \
--password 123456 \
--table tb_user \
--columns "id,user_name" \
--column-family "info" \
--hbase-table tb_user \
--hbase-row-key id \
--split-by id

查看 HBase 中表数据:

四、数据导出案例

新建一个 MySQL 数据库和表,而后把 HDFS 中的数据导出到 MySQL 中,这里就应用第一个导入脚本生成的数据即可:

sqoop export 
--connect jdbc:mysql://hop01:3306/sq_export \
--username root \
--password 123456 \
--table tb_user \
--num-mappers 1 \
--export-dir /hopdir/user/tbuser0/part-m-00000 \
--num-mappers 1 \
--input-fields-terminated-by ","

再次查看 MySQL 中数据,记录齐全被导出来,这里 , 是每个数据字段间的分隔符号,语法规定对照脚本一 HDFS 数据查问后果即可。

五、源代码地址

GitHub·地址
https://github.com/cicadasmile/big-data-parent
GitEE·地址
https://gitee.com/cicadasmile/big-data-parent

浏览标签

【Java 根底】【设计模式】【构造与算法】【Linux 零碎】【数据库】

【分布式架构】【微服务】【大数据组件】【SpringBoot 进阶】【Spring&Boot 根底】

【数据分析】【技术导图】【职场】

正文完
 0