第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展示統計結果功能實現

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章