MapReduce读取Mysql统计分析再将结果写入mysql中供动态可视化
1.前言
最近做一个小项目,其中一个功能是,使用hadoop的MapReduce程序来读取Mysql数据库的某表数据,然后MR进行类别统计,然后再将统计结果写入mysql的另一张表中,最后使用jsp页面调用Echarts读取数据库来动态可视化结果。
先上一张效果图:
本篇先介绍MapReduce读取Mysql统计分析再将结果写入mysql中。
另一篇则是web项目中使用jsp调用Echarts读取数据库来动态可视化结果。
2.MapReduce读取Mysql
搜编百度,都没有一篇完整的mapreduce读取mysql数据,统计分析,最后写入mysql的文章。(so,是不是要点个关注?)
本机环境:
- centos6.9 64x
- mysql5.5
- hadoop2.7
- eclipse4.5
- echarts
2.1、建立数据库表:
在mysql中新建了一个数据库test,然后在test中新建了两张表,分别叫mptest,xieru表。
建表语句:
-- MySQL dump 10.13 Distrib 5.5.55, for Linux (x86_64)
--
-- Host: localhost Database: test
-- -----------------------zoutao-------------------------------
-- Server version 5.5.55-log
DROP TABLE IF EXISTS `mptest`;
CREATE TABLE `mptest` (
`id` varchar(30) NOT NULL DEFAULT '',
`name` varchar(255) DEFAULT NULL,
`txt` varchar(255) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
LOCK TABLES `mptest` WRITE;
INSERT INTO `mptest` VALUES ('1','zhangsan','javascript'),('2','lisi','C'),('3','wangwu','C++'),('4','chenliu','java'),('5','zoutao5','java'),('6','zoutao','python');
UNLOCK TABLES;
DROP TABLE IF EXISTS `xieru`;
CREATE TABLE `xieru` (
`word` varchar(255) DEFAULT NULL COMMENT 'leibie',
`count` int(11) DEFAULT NULL COMMENT 'shul'
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='xie';
如图:
xieru表:
最后我们的数据库里面:
为了防止有数据,我们先清空一下的xieru表:
truncate table xieru;
select * from xieru;
如图:
2.2、创建mapreduce程序
打开位于liunx系统上的eclipse,创建一个mapreduce项目:
随便取名字吧,能看懂这个文章的也不可能不会这些操作,我就不写了。
项目创建完成以后:大概是这样的
2.3、导入mysql的驱动jar包
安装了mysql的,里面有个驱动包。没有的你就百度自行下载一个就是了。
mysql-connector-java-x.x.xxx.jar,把这个jar包导入到刚才新建的mp程序里面去。
开始写代码,太墨迹了。
2.4、创建实体类
新建包,新建MyDBWritable.java。
MyDBWritable :
package com.xfbshop;
import org.apache.hadoop.io.Writable;
import org.apache.hadoop.mapred.lib.db.DBWritable;
import java.io.DataInput;
import java.io.DataOutput;
import java.io.IOException;
import java<