sqoop常用功能的使用

这篇博客介绍了如何在Linux环境下使用Sqoop进行数据迁移,包括MySQL到HDFS、HDFS到MySQL、MySQL到Hive、Hive到MySQL的数据互导操作。详细阐述了每个步骤的命令执行和注意事项,如IP地址和目录的修改,以及解决可能出现的问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前提条件:
安装好hadoop2.7.3(Linux系统下)

安装好sqoop(Linux系统下),参考:Sqoop安装配置

安装好MySQL(Windows系统下或者Linux系统下)

安装好Hive(Linux系统下)参考:Hive安装配置

安装好HBase(Linux系统下)参考:HBase1.3.1安装配置 HBase常用shell命令

题目:

一.MySQL与HDFS数据互导(相互导入导出)

二.MySQL与Hive数据互导

三.MySQL与HBase数据互导

实验步骤:

数据准备

进入mysql

mysql -uroot -p123456

在这里插入图片描述

创建一个名为ua1的数据库

create database ua1;

使用ua1数据库

 use ua1;

在这里插入图片描述

准备mysql数据:EMP表和DEPT表

-- 创建EMP表
CREATE TABLE IF NOT EXISTS `EMP`(
   `empno` INT,
   `ename` VARCHAR(10),
   `job` VARCHAR(9),
   `mgr` int,
   `hiredate` date,
   `sal` int,
   `comm` int,
   `deptno` int,
   PRIMARY KEY ( `empno` )
)ENGINE=InnoDB DEFAULT CHARSET=utf8;

-- 插入数据到EMP表
INSERT INTO `EMP` (`empno`, `ename`, `job`, `mgr`, `hiredate`, `sal`, `comm`, `deptno`) VALUES (7369, 'SMITH', 'CLERK', 7902, '1980-12-17', 800, NULL, 20);
INSERT INTO `EMP` (`empno`, `ename`, `job`, `mgr`, `hiredate`, `sal`, `comm`, `deptno`) VALUES (7499, 'ALLEN', 'SALESMAN', 7698, '1981-2-20', 1600, 300, 30);
INSERT INTO `EMP` (`empno`, `ename`, `job`, `mgr`, `hiredate`, `sal`, `comm`, `deptno`) VALUES (7521, 'WARD', 'SALESMAN', 7698, '1981-2-22', 1250, 500, 30);
INSERT INTO `EMP` (`empno`, `ename`, `job`, `mgr`, `hiredate`, `sal`, `comm`, `deptno`) VALUES (7566, 'JONES', 'MANAGER', 7839, '1981-4-2', 2975, NULL, 20);
INSERT INTO `EMP` (`empno`, `ename`, `job`, `mgr`, `hiredate`, `sal`, `comm`, `deptno`) VALUES (7654, 'MARTIN', 'SALESMAN', 7698, '1981-9-28', 1250, 1400, 30);
INSERT INTO `EMP` (`empno`, `ename`, `job`, `mgr`, `hiredate`, `sal`, `comm`, `deptno`) VALUES (7698, 'BLAKE', 'MANAGER', 7839, '1981-5-1', 2850, NULL, 30);
INSERT INTO `EMP` (`empno`, `ename`, `job`, `mgr`, `hiredate`, `sal`, `comm`, `deptno`) VALUES (7782, 'CLARK', 'MANAGER', 7839, '1981-6-9', 2450, NULL, 10);
INSERT INTO `EMP` (`empno`, `ename`, `job`, `mgr`, `hiredate`, `sal`, `comm`, `deptno`) VALUES (7788, 'SCOTT', 'ANALYST', 7566, '1987-4-19', 3000, NULL, 20);
INSERT INTO `EMP` (`empno`, `ename`, `job`, `mgr`, `hiredate`, `sal`, `comm`, `deptno`) VALUES (7839, 'KING', 'PRESIDENT', NULL, '1981-11-17', 5000, NULL, 10);
INSERT INTO `EMP` (`empno`, `ename`, `job`, `mgr`, `hiredate`, `sal`, `comm`, `deptno`) VALUES (7844, 'TURNER', 'SALESMAN', 7698, '1981-9-8', 1500, NULL, 30);
INSERT INTO `EMP` (`empno`, `ename`, `job`, `mgr`, `hiredate`, `sal`, `comm`, `deptno`) VALUES (7876, 'ADAMS', 'CLERK', 7788, '1987-5-23', 1100, NULL, 20);
INSERT INTO `EMP` (`empno`, `ename`, `job`, `mgr`, `hiredate`, `sal`, `comm`, `deptno`) VALUES (7900, 'JAMES', 'CLERK', 7698, '1981-12-3', 950, NULL, 30);
INSERT INTO `EMP` (`empno`, `ename`, `job`, `mgr`, `hiredate`, `sal`, `comm`, `deptno`) VALUES (7902, 'FORD', 'ANALYST', 7566, '1981-12-3', 3000, NULL, 20);
INSERT INTO `EMP` (`empno`, `ename`, `job`, `mgr`, `hiredate`, `sal`, `comm`, `deptno`) VALUES (7934, 'MILLER', 'CLERK', 7782, '1982-1-23', 1300, NULL, 10);

-- 创建DEPT表
CREATE TABLE IF NOT EXISTS `DEPT`(
   `deptno` INT,
   `dname` VARCHAR(14),
   `loc` VARCHAR(13)
)ENGINE=InnoDB DEFAULT CHARSET=utf8;
-- 插入数据到DEPT表
INSERT INTO `DEPT` (`deptno`, `dname`, `loc`) VALUES (10, 'ACCOUNTING', 'NEW YORK');
INSERT INTO `DEPT` (`deptno`, `dname`, `loc`) VALUES (20, 'RESEARCH', 'DALLAS');
INSERT INTO `DEPT` (`deptno`, `dname`, `loc`) VALUES (30, 'SALES', 'CHICAGO');
INSERT INTO `DEPT` (`deptno`, `dname`, `loc`) VALUES (40, 'OPERATIONS', 'BOSTON');

可依次执行以上命令,也可以复制到Navicat直接执行
在这里插入图片描述
Navicat查看EMP表和DEPT表
在这里插入图片描述

在这里插入图片描述
或者命令查询

 select * from EMP;

在这里插入图片描述

select * from DEPT;

在这里插入图片描述

一.MySQL与HDFS数据互导

  1. MySQL —导入到–> HDFS
sqoop import --connect jdbc:mysql://10.90.26.101:3306/ua1 --username root -P --table EMP  -target-dir  /user/ua02/zhangsan -m 1

注意:

10.90.26.101为登录的IP, 注意修改!

/user/ua02/zhangsan 其中ua02为用户名,注意修改,zhangsan为目录名,可自定义。

回车执行后需要输入mysql数据库密码
在这里插入图片描述

在这里插入图片描述

打开新的终端,查看HDFS数据

 hdfs dfs -ls /user/ua02/zhangsan

ua02为用户名,注意按实际修改
在这里插入图片描述

hdfs dfs -cat /user/ua02/zhangsan/part-m-00000

在这里插入图片描述

2. HDFS—导出到–> MySQL

在MySQL新建一张表:EMP_HDFS_zhangsan

create table EMP_HDFS_zhangsan like EMP;

like EMP解释:代表创建一个和ENP一样格式的表,不含数据,
在这里插入图片描述

执行导出语句

sqoop export --connect jdbc:mysql://10.90.26.101:3306/ua1 --table EMP_HDFS_zhangsan --export-dir /user/ua02/zhangsan/part-m-00000  --username ua1  -P  -m 1

注意:

10.90.26.101为登录的IP, 注意修改!

/user/ua02/zhangsan 其中ua02为用户名,zhangsan为原来导入到HDFS的目录,注意修改。

回车执行后需要输入mysql数据库密码
在这里插入图片描述
mysql中查看数据是否导入成功

 select * from EMP_HDFS_zhangsan;

在这里插入图片描述

二.MySQL与Hive数据互导

  1. MySQL—导入到–>Hive

执行导入到Hive命令

在此之前先执行

cp $HIVE_HOME/lib/derby-10.10.2.0.jar $SQOOP_HOME/lib

cp $HIVE_HOME/lib/hive-common-2.3.6.jar $SQOOP_HOME/lib

在导入,不然会出现下面错误

 sqoop import --connect jdbc:mysql://10.90.26.101:3306/ua1  --username root --password 123456 --table EMP --fields-terminated-by '\t' --num-mappers 1  --hive-database default --hive-import --hive-table hive_zhangsan
sqoop import --connect jdbc:mysql://47.108.191.195:3306/ua1 --username root -password wangge --table EMP --fields-terminated-by '\t' --num-mappers 1 --hive-database default --hive-import --hive-table hive_crazywang
sqoop import --connect jdbc:mysql://47.108.191.195:3306/ua1 --username root -password wangge --table EMP_HDFS_crazywang --fields-terminated-by '\t' --num-mappers 1 --hive-database default --hive-import --hive-table hive_crazywang

注意:

ua1为mysql的数据库名

hive_zhangsan为导入到Hive的表名,为了不冲突,建议取带有学号的表名,例如:hive_zhangsan001 ,Hive的表名对大小写不敏感。

若出现如下报错:

ERROR hive.HiveConfig: Could not load org.apache.hadoop.hive.conf.HiveConf. Make sure HIVE_CONF_DIR is set correctly.

在这里插入图片描述

解决办法:点这里解决sqoop报错问题

成功截图
在这里插入图片描述

进入hive环境

 hive
 use default;

在这里插入图片描述

查看hive的表

show tables;

找到导入的表名:
在这里插入图片描述

查看表内容:

select * from hive_zhangsan;

在这里插入图片描述

2. Hive—导出到–> MySQL

在mysql新建一张EMP_from_hive001表,用于接收数据

 create table EMP_from_hive001 like EMP;

在这里插入图片描述

查看hive表存储路径

 show create table hive_zhangsan;

在这里插入图片描述
hive_zhangsan为hive表名,注意修改。

复制出hive表存储路径:

/apps/hive/warehouse/hive_zhangsan

每个人的都不一样

/user/hive/warehouse/hive_crazywang

执行导出语句:

sqoop export --connect jdbc:mysql://10.90.26.101:3306/ua1 --username ua1 -P --table  EMP_from_hive001 --export-dir /apps/hive/warehouse/hive_zhangsan/part-m-00000 --input-fields-terminated-by '\t'

这是我的
在这里插入图片描述

执行完成
在这里插入图片描述

查看MySQL表内容:

select * from EMP_WANG;

在这里插入图片描述

三.MySQL与HBase数据互导

  1. MySQL —导入到–> HBase

进入hbase shell环境

 hbase shell

在这里插入图片描述

在hbase中创建一个空表

create 'EMP_HBASE_WANG',{NAME => 'EMPINFO',VERSIONS => 5}

在这里插入图片描述
查看表

list

在这里插入图片描述

执行导入语句

sqoop import --connect jdbc:mysql://10.90.26.101:3306/ua1 --username ua1 --password ua1 --table EMP --hbase-table EMP_HBASE --column-family EMPINFO  --hbase-row-key empno

我的语句
在这里插入图片描述
查看EMP_HBASE表内容:

scan 'EMP_HBASE_WANG'

在这里插入图片描述

  1. HBase—导出到–> MySQL

目前没有命令可以直接将 hbase 中的数据导出到 mysql。解决思路hbase–>HDFS–>mysql或hbase–>hive–>mysql。

参考链接

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值