sqoop常用功能的使用

3 篇文章 0 订阅

前提条件:

安装好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创建一个名为ua1的数据库

mysql> create database ua1;

使用ua1数据库

mysql> 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');

查看EMP表和DEPT表

 

mysql> select * from EMP;

mysql> 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;

执行导出语句 

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中查看数据是否导入成功

mysql> select * from EMP_HDFS_zhangsan;

 

二.MySQL与Hive数据互导

1. MySQL---导入到-->Hive

执行导入到Hive命令

$ 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

注意:

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

hive> use default;

查看hive的表 

hive> show tables;

找到导入的表名:HIVE_zhangsan

 

查看hive_zhangsan表内容:

select * from hive_zhangsan;

 

2. Hive---导出到--> MySQL

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

mysql> create table EMP_from_hive001 like EMP;

查看hive表存储路径

hive> show create table hive_zhangsan;

hive_zhangsan为hibe表名,注意修改。 

复制出hive表存储路径:

/apps/hive/warehouse/hive_zhangsan

执行导出语句:

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表内容:

 

三.MySQL与HBase数据互导

1. MySQL ---导入到--> HBase

进入hbase shell环境

$ hbase shell

在hbase中创建一个空表

查看表

执行导入语句

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'

 

2. HBase---导出到--> MySQL

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

 

完成!enjoy it!

  • 6
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值