前提条件:
安装好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数据互导
- 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数据互导
- 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数据互导
- 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'
- HBase—导出到–> MySQL
目前没有命令可以直接将 hbase 中的数据导出到 mysql。解决思路hbase–>HDFS–>mysql或hbase–>hive–>mysql。