第13章 可视化实战

13-1 -课程目录

课程目录

为什么需要可视化

SpringBoot构建web项目

使用Echarts构建静态数据可视化

使用Echarts构建动态数据可视化

阿里云DataV数据可视化

13-2 -为什么需要可视化

13-3 -构建Spring Boot项目

springBoot构建web项目

查看官网:https://spring.io/projects/spring-boot

案例地址:

https://gitee.com/sag888/big_data/blob/master/Spark%20Streaming%E5%AE%9E%E6%97%B6%E6%B5%81%E5%A4%84%E7%90%86%E9%A1%B9%E7%9B%AE%E5%AE%9E%E6%88%98/project/l2118i/imooc_web/src/main/java/com/imooc/spark/HelloBoot.java

案例源码:

package com.imooc.spark;

import org.springframework.web.bind.annotation.RequestMapping;

import org.springframework.web.bind.annotation.RequestMethod;

import org.springframework.web.bind.annotation.RestController;

import org.springframework.web.servlet.ModelAndView;

/**

* 这是我们的第一个Boot应用

*/

@RestController

public class HelloBoot {

@RequestMapping(value = "/hello", method = RequestMethod.GET)

public String sayHello() {

return "Hello World Spring Boot...";

}

@RequestMapping(value = "/first", method = RequestMethod.GET)

public ModelAndView firstDemo() {

return new ModelAndView("test");

}

@RequestMapping(value = "/course_clickcount", method = RequestMethod.GET)

public ModelAndView courseClickCountStat() {

return new ModelAndView("demo");

}

}

启动类的创建

https://gitee.com/sag888/big_data/blob/master/Spark%20Streaming%E5%AE%9E%E6%97%B6%E6%B5%81%E5%A4%84%E7%90%86%E9%A1%B9%E7%9B%AE%E5%AE%9E%E6%88%98/project/l2118i/imooc_web/src/main/java/com/imooc/WebApplication.java

源码:

package com.imooc;

import org.springframework.boot.SpringApplication;

import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication

public class WebApplication {

public static void main(String[] args) {

SpringApplication.run(WebApplication.class, args);

}

}

13-4 -Echarts概述

官网:http://echarts.baidu.com/examples/

13-5 -Spring Boot整合Echarts绘制静态数据柱状图

案例:https://gitee.com/sag888/big_data/blob/master/Spark%20Streaming%E5%AE%9E%E6%97%B6%E6%B5%81%E5%A4%84%E7%90%86%E9%A1%B9%E7%9B%AE%E5%AE%9E%E6%88%98/project/l2118i/imooc_web/src/main/resources/templates/test.html

跳转到对应的HTML

@RequestMapping(value = "/first", method = RequestMethod.GET)

public ModelAndView firstDemo() {

return new ModelAndView("test");

}

13-6 -Spring Boot整合Echarts绘制静态数据饼图

案例地址:

https://gitee.com/sag888/big_data/blob/master/Spark%20Streaming%E5%AE%9E%E6%97%B6%E6%B5%81%E5%A4%84%E7%90%86%E9%A1%B9%E7%9B%AE%E5%AE%9E%E6%88%98/project/l2118i/imooc_web/src/main/resources/templates/demo.html

跳转到对应的html

@RequestMapping(value = "/course_clickcount", method = RequestMethod.GET)

public ModelAndView courseClickCountStat() {

return new ModelAndView("demo");

}

13-7 -项目目录调整

目录结构查看:

https://gitee.com/sag888/big_data/tree/master/Spark%20Streaming%E5%AE%9E%E6%97%B6%E6%B5%81%E5%A4%84%E7%90%86%E9%A1%B9%E7%9B%AE%E5%AE%9E%E6%88%98/project/l2118i/imooc_web/src/main/java/com/imooc

13-8 -根据天来获取HBase表中的实战课程访问次数

第一步:导入HBase文件

<dependency>

<groupId>org.apache.hbase</groupId>

<artifactId>hbase-client</artifactId>

<version>1.2.0-cdh5.7.0</version>

</dependency>

第二步:开发HBASE工具类

源码地址:

https://gitee.com/sag888/big_data/blob/master/Spark%20Streaming%E5%AE%9E%E6%97%B6%E6%B5%81%E5%A4%84%E7%90%86%E9%A1%B9%E7%9B%AE%E5%AE%9E%E6%88%98/project/l2118i/imooc_web/src/main/java/com/imooc/utils/HBaseUtils.java

源码:

package com.imooc.utils;

import org.apache.hadoop.conf.Configuration;

import org.apache.hadoop.hbase.client.*;

import org.apache.hadoop.hbase.filter.Filter;

import org.apache.hadoop.hbase.filter.PrefixFilter;

import org.apache.hadoop.hbase.util.Bytes;

import java.io.IOException;

import java.util.HashMap;

import java.util.Map;

/**

* HBase操作工具类

*/

public class HBaseUtils {

HBaseAdmin admin = null;

Configuration conf = null;

/**

* 私有构造方法:加载一些必要的参数

*/

private HBaseUtils() {

conf = new Configuration();

conf.set("hbase.zookeeper.quorum", "hadoop000:2181");

conf.set("hbase.rootdir", "hdfs://hadoop000:8020/hbase");

try {

admin = new HBaseAdmin(conf);

} catch (IOException e) {

e.printStackTrace();

}

}

private static HBaseUtils instance = null;

public static synchronized HBaseUtils getInstance() {

if (null == instance) {

instance = new HBaseUtils();

}

return instance;

}

/**

* 根据表名获取到HTable实例

*/

public HTable getTable(String tableName) {

HTable table = null;

try {

table = new HTable(conf, tableName);

} catch (IOException e) {

e.printStackTrace();

}

return table;

}

/**

* 根据表名和输入条件获取HBase的记录数

*/

public Map<String, Long> query(String tableName, String condition) throws Exception {

Map<String, Long> map = new HashMap<>();

HTable table = getTable(tableName);

String cf = "info";

String qualifier = "click_count";

Scan scan = new Scan();

Filter filter = new PrefixFilter(Bytes.toBytes(condition));

scan.setFilter(filter);

ResultScanner rs = table.getScanner(scan);

for(Result result : rs) {

String row = Bytes.toString(result.getRow());

long clickCount = Bytes.toLong(result.getValue(cf.getBytes(), qualifier.getBytes()));

map.put(row, clickCount);

}

return map;

}

public static void main(String[] args) throws Exception {

Map<String, Long> map = HBaseUtils.getInstance().query("imooc_course_clickcount" , "20171022");

for(Map.Entry<String, Long> entry: map.entrySet()) {

System.out.println(entry.getKey() + " : " + entry.getValue());

}

}

}

13-9 -实战课程访问量domain以及dao开发

第一步:创建model

源码地址:

https://gitee.com/sag888/big_data/blob/master/Spark%20Streaming%E5%AE%9E%E6%97%B6%E6%B5%81%E5%A4%84%E7%90%86%E9%A1%B9%E7%9B%AE%E5%AE%9E%E6%88%98/project/l2118i/imooc_web/src/main/java/com/imooc/domain/CourseClickCount.java

源码:

package com.imooc.domain;

import org.springframework.stereotype.Component;

/**

* 实战课程访问数量实体类

*/

@Component

public class CourseClickCount {

private String name;

private long value;

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public long getValue() {

return value;

}

public void setValue(long value) {

this.value = value;

}

}

第二步:创建dao

源码地址:https://gitee.com/sag888/big_data/blob/master/Spark%20Streaming%E5%AE%9E%E6%97%B6%E6%B5%81%E5%A4%84%E7%90%86%E9%A1%B9%E7%9B%AE%E5%AE%9E%E6%88%98/project/l2118i/imooc_web/src/main/java/com/imooc/dao/CourseClickCountDAO.java

源码:

package com.imooc.dao;

import com.imooc.domain.CourseClickCount;

import com.imooc.utils.HBaseUtils;

import org.springframework.stereotype.Component;

import java.util.ArrayList;

import java.util.List;

import java.util.Map;

/**

* 实战课程访问数量数据访问层

*/

@Component

public class CourseClickCountDAO {

/**

* 根据天查询

*/

public List<CourseClickCount> query(String day) throws Exception {

List<CourseClickCount> list = new ArrayList<>();

// 去HBase表中根据day获取实战课程对应的访问量

Map<String, Long> map = HBaseUtils.getInstance().query("imooc_course_clickcount","20171022");

for(Map.Entry<String, Long> entry: map.entrySet()) {

CourseClickCount model = new CourseClickCount();

model.setName(entry.getKey());

model.setValue(entry.getValue());

list.add(model);

}

return list;

}

public static void main(String[] args) throws Exception{

CourseClickCountDAO dao = new CourseClickCountDAO();

List<CourseClickCount> list = dao.query("20171022");

for(CourseClickCount model : list) {

System.out.println(model.getName() + " : " + model.getValue());

}

}

}

13-10 -实战课程访问量Web层开发

源码地址:https://gitee.com/sag888/big_data/blob/master/Spark%20Streaming%E5%AE%9E%E6%97%B6%E6%B5%81%E5%A4%84%E7%90%86%E9%A1%B9%E7%9B%AE%E5%AE%9E%E6%88%98/project/l2118i/imooc_web/src/main/java/com/imooc/spark/ImoocStatApp.java

源码:

package com.imooc.spark;

import com.imooc.dao.CourseClickCountDAO;

import com.imooc.domain.CourseClickCount;

import net.sf.json.JSONArray;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.web.bind.annotation.RequestMapping;

import org.springframework.web.bind.annotation.RequestMethod;

import org.springframework.web.bind.annotation.ResponseBody;

import org.springframework.web.bind.annotation.RestController;

import org.springframework.web.servlet.ModelAndView;

import java.util.HashMap;

import java.util.List;

import java.util.Map;

/**

* web层

*/

@RestController

public class ImoocStatApp {

private static Map<String, String> courses = new HashMap<>();

static {

courses.put("112","Spark SQL慕课网日志分析");

courses.put("128","10小时入门大数据");

courses.put("145","深度学习之神经网络核心原理与算法");

courses.put("146","强大的Node.js在Web开发的应用");

courses.put("131","Vue+Django实战");

courses.put("130","Web前端性能优化");

}

@Autowired

CourseClickCountDAO courseClickCountDAO;

// @RequestMapping(value = "/course_clickcount_dynamic", method = RequestMethod.GET)

// public ModelAndView courseClickCount() throws Exception {

//

// ModelAndView view = new ModelAndView("index");

//

// List<CourseClickCount> list = courseClickCountDAO.query("20171022");

// for(CourseClickCount model : list) {

// model.setName(courses.get(model.getName().substring(9)));

// }

// JSONArray json = JSONArray.fromObject(list);

//

// view.addObject("data_json", json);

//

// return view;

// }

@RequestMapping(value = "/course_clickcount_dynamic", method = RequestMethod.POST)

@ResponseBody

public List<CourseClickCount> courseClickCount() throws Exception {

List<CourseClickCount> list = courseClickCountDAO.query("20171022");

for(CourseClickCount model : list) {

model.setName(courses.get(model.getName().substring(9)));

}

return list;

}

@RequestMapping(value = "/echarts", method = RequestMethod.GET)

public ModelAndView echarts(){

return new ModelAndView("echarts");

}

}

13-11 -实战课程访问量实时查询展示功能实现及扩展

源码地址:

https://gitee.com/sag888/big_data/blob/master/Spark%20Streaming%E5%AE%9E%E6%97%B6%E6%B5%81%E5%A4%84%E7%90%86%E9%A1%B9%E7%9B%AE%E5%AE%9E%E6%88%98/project/l2118i/imooc_web/src/main/resources/templates/echarts.html

源码:

<!DOCTYPE html>

<html lang="en">

<head>

<meta charset="UTF-8"/>

<title>imooc_stat</title>

<!-- 引入 ECharts 文件 -->

<script src="js/echarts.min.js"></script>

<!-- 引入 jQuery 文件 -->

<script src="js/jquery.js"></script>

</head>

<body>

<!-- 为 ECharts 准备一个具备大小(宽高)的 DOM -->

<div id="main" style="width: 600px;height:400px;position: absolute; top:50%; left: 50%; margin-top: -200px;margin-left: -300px"></div>

<script type="text/javascript">

// 基于准备好的dom,初始化echarts实例

var myChart = echarts.init(document.getElementById('main'));

// 指定图表的配置项和数据

var option = {

title : {

text: '慕课网实战课程实时访问量统计',

subtext: '实战课程访问次数',

x:'center'

},

tooltip : {

trigger: 'item',

formatter: "{a} <br/>{b} : {c} ({d}%)"

},

legend: {

orient: 'vertical',

left: 'left'

},

series : [

{

name: '访问次数',

type: 'pie',

radius : '55%',

center: ['50%', '60%'],

data: (function(){ //<![CDATA[

var datas = [];

$.ajax({

type: "POST",

url: "/imooc/course_clickcount_dynamic",

dataType: 'json',

async: false,

success: function(result) {

for(var i=0; i<result.length; i++) {

datas.push({"value":result[i].value, "name":result[i].name})

}

}

})

return datas;

//]]>

})(),

itemStyle: {

emphasis: {

shadowBlur: 10,

shadowOffsetX: 0,

shadowColor: 'rgba(0, 0, 0, 0.5)'

}

}

}

]

};

// 使用刚指定的配置项和数据显示图表。

myChart.setOption(option);

</script>

</body>

</html>

spring Boot 整合Echars动态获取HBASE的数据

1)动态的传递进去当天时间

a)在代码中写死

b)让你查询昨天的前天的咋办?

在页面中放一个时间插件(JQuery插件),默认只取当天的数据

2)自动刷新展示图

每隔多久发送一个请求去刷新当天的数据供展示

统计慕课网当天实时课程从搜索引擎过来的点击量

数据已经在HBASE中有的

自己通过Echarts整合springboot方式来实现

13-12 -Spring Boot项目部署到服务器上运行

第一步:打包 mvn clean package -DskipTests

第二步:将jar包拷贝到服务器上

scp web-0.0.0.1-SNAPSHOT.jar [email protected]: ~/lib/

第三步:启动jar

jar spaktrain-1.0.jar web-0.0.1-SNAPSHOT.jar

13-13 -阿里云DataV数据可视化介绍

官网:https://data.aliyun.com/visual/datav

DataV功能说明

1)点击量分省排名/运营商占比

Spark SQl项目实战课程:通过IP能解析到省份,城市,运营商

2)浏览器访问占比

hadoop项目:userAgent

13-14 -DataV展示统计结果功能实现

猜你喜欢

转载自blog.csdn.net/weixin_38492276/article/details/81561550