基于大数据技术Hadoop的气象分析可视化大屏设计和实现

博主介绍:硕士研究生,专注于信息化技术领域开发与管理,会使用java、标准c/c++等开发语言,以及毕业项目实战✌

       从事基于java BS架构、CS架构、c/c++ 编程工作近16年,拥有近12年的管理工作经验,拥有较丰富的技术架构思想、较扎实的技术功底和资深的项目管理经验。

       先后担任过技术总监、部门经理、项目经理、开发组长、java高级工程师及c++工程师等职位,在工业互联网、国家标识解析体系、物联网、分布式集群架构、大数据通道处理、接口开发、远程教育、办公OA、财务软件(工资、记账、决策、分析、报表统计等方面)、企业内部管理软件(ERP、CRM等)、arggis地图等信息化建设领域有较丰富的实战工作经验;拥有BS分布式架构集群、数据库负载集群架构、大数据存储集群架构,以及高并发分布式集群架构的设计、开发和部署实战经验;拥有大并发访问、大数据存储、即时消息等瓶颈解决方案和实战经验。

       拥有产品研发和发明专利申请相关工作经验,完成发明专利构思、设计、编写、申请等工作,并获得发明专利1枚。

-----------------------------------------------------------------------------------

      大家在毕设选题、项目升级、论文写作,就业毕业等相关问题都可以给我留言咨询,非常乐意帮助更多的人或加w 908925859。

相关博客地址:

csdn专业技术博客:https://blog.csdn.net/mr_lili_1986?type=blog

Iteye博客:        https://www.iteye.com/blog/user/mr-lili-1986-163-com

获取论文及源代码:请加微908925859

注:每个学校每个老师对论文的格式要求不一样,故本论文只供参考,本论文页数达到60页以上,字数在6000及以上。

目录

一、前言介绍:

二、功能设计:

三、功能实现:

四、库表设计:

五、关键代码:

六、论文参考:

七、其他案例: 

一、前言介绍:

信息化社会内需要与之针对性的信息获取途径,但是途径的扩展基本上为人们所努力的方向,由于站在的角度存在偏差,人们经常能够获得不同类型信息,这也是技术最为难以攻克的课题。针对气象分析大屏可视化等问题,对气象进行研究分析,然后开发设计出气象分析大屏可视化系统以解决问题。

气象分析大屏可视化系统主要功能模块包括后台首页,系统用户(管理员),模块管理(日照时数,平均相对湿度,年降水量,平均气温,贵阳气象分析,气温对比),采取面对对象的开发模式进行软件的开发和硬体的架设,能很好的满足实际使用的需求,完善了对应的软体架设以及程序编码的工作,采取MySQL作为后台数据的主要存储单元,采用Hadoop框架、python技术、Ajax技术进行业务系统的编码及其开发,实现了本系统的全部功能。本次报告,首先分析了研究的背景、作用、意义,为研究工作的合理性打下了基础。针对气象分析大屏可视化系统的各项需求以及技术问题进行分析,证明了系统的必要性和技术可行性,然后对设计系统需要使用的技术软件以及设计思想做了基本的介绍,最后来实现气象分析大屏可视化系统和部署运行使用它。

关键词:气象分析大屏可视化;Hadoop框架;MySQL数据库 ;分布式;大数据;流数据;

二、功能设计:

气象分析大屏可视化系统只要由管理员模块构成。

模块的功能都是根据先前完成的需求分析,并查阅相关资料后整理制作的。

综上所述,系统功能结构图如下图所示。

三、功能实现:

要由两部分组成,登录前的登录界面以及登录后的用户功能界面。登录界面,要求用户输入用户名和密码,当用户名和密码其中一个输入为空时,给出提示“用户名,密码不能为空”。获取用户名和密码后到数据库中查找,如果用户名存在,以及对应的密码正确,则登录成功,否则登录失败。登录失败后给出提示,并把焦点停在文本框中。登录成功后将该次会话的全局变量username设置为用户名。登录成功后进入会员的功能模块,主要有会员基本信息修改,已经发布商品信息管理,发布信息,和退出功能。退出功能是清除全局变量username的值,并跳回到首页。

登录流程图如下图所示。

登录界面:

系统用户模块的实现

用户登录/注册成功之后可以修改自己的基本信息。修改页面的表单中每一个input的name值都要与实体类中的参数相匹配,在用户点击修改页面的时候,如果改后用户名与数据库里面重复了,页面会提示该用户名已经存在了,否则通过Id来查询用户,并将用户的信息修改为表单提交的数据。

模块管理的实现

管理员登录系统后,可对模块管理中的日照时数,平均相对湿度,年降水量,平均气温,贵阳气象分析,气温对比等信息进行查询,重置,删除,添加等维护操作,可以导入数据或者下载导入的文档。如下图所示。

展示大屏的实现

展示大屏模块调用echarts.min.js初始化图表的样式和框架,首先要初始化类目参数和数量参数,本系统在日照时数,年降水量,平均气温等模块上使用了可视化图表,其的类目参数为日照时数,年降水量,平均气温等参数,从参数表里读取,遍历参数表中的数据,分别加入到类目数组和数量数组中,做好数据初始化准备,其次是用pythonScript开始画图,设置图的类型,设置图的标题,设置类目数,设置数量和可视化图表的尺寸,设置背景颜色,设置画图样式,调用画图函数,可视化图表就自动生成了。

展示大屏界面如下图所示。

四、库表设计:

五、关键代码:

package com.qixia.hadoop;import lombok.extern.slf4j.Slf4j;
import org.apache.hadoop.fs.FileSystem;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;import java.io.IOException;
import java.net.URI;
import java.net.URISyntaxException;/*** @author:li* @date:2023/7/28* @descripion:*/
@Slf4j
@Configuration
public class HadoopConfig {@Value("${hdfs.hdfsPath}")private  String hdfsPath;@Value("${hdfs.hdfsName}")private  String hdfsName;@Beanpublic org.apache.hadoop.conf.Configuration getConfiguration(){org.apache.hadoop.conf.Configuration config = new org.apache.hadoop.conf.Configuration();config.set("fs.defaultFS",hdfsPath);return  config;}@Beanpublic FileSystem getFileSystem(){FileSystem fileSystem=null;try {fileSystem= FileSystem.get(new URI(hdfsPath), getConfiguration(), hdfsName);} catch (IOException e) {e.printStackTrace();} catch (InterruptedException e) {e.printStackTrace();} catch (URISyntaxException e) {e.printStackTrace();}return fileSystem;}
}
package com.qixia.hadoop.hdfs;import lombok.extern.slf4j.Slf4j;
import org.apache.hadoop.fs.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;
import org.springframework.web.multipart.MultipartFile;import java.io.IOException;
import java.util.*;/*** @author:li* @date:2023/7/31* @descripion:*/
@Service
@Slf4j
public class HDFSServiceImpl  implements  HDFSService{@Autowiredprivate FileSystem fileSystem;@Overridepublic boolean existFile(String path) {if (StringUtils.isEmpty(path)){return false;}Path src = new Path(path);try {return fileSystem.exists(src);} catch (IOException e) {log.error(e.getMessage());}return false;}@Overridepublic List<Map<String, Object>> readCatalog(String path) {if (StringUtils.isEmpty(path)){return Collections.emptyList();}if (!existFile(path)){log.error("catalog is not exist!!");return Collections.emptyList();}Path src = new Path(path);FileStatus[] fileStatuses = null;try {fileStatuses = fileSystem.listStatus(src);} catch (IOException e) {log.error(e.getMessage());}List<Map<String, Object>> result = new ArrayList<>(fileStatuses.length);if (null != fileStatuses && 0 < fileStatuses.length) {for (FileStatus fileStatus : fileStatuses) {Map<String, Object> cataLogMap = new HashMap<>();cataLogMap.put("filePath", fileStatus.getPath());cataLogMap.put("fileStatus", fileStatus);result.add(cataLogMap);}}return result;}@Overridepublic boolean createFile(String path, MultipartFile file) {boolean target = false;if (StringUtils.isEmpty(path)) {return false;}String fileName = file.getOriginalFilename();
//        String fileName = file.getName();Path newPath = new Path(path + "/" + fileName);FSDataOutputStream outputStream = null;try {outputStream = fileSystem.create(newPath);outputStream.write(file.getBytes());target = true;} catch (IOException e) {log.error(e.getMessage());} finally {if (null != outputStream) {try {outputStream.close();} catch (IOException e) {log.error(e.getMessage());}}}return target;}@Overridepublic boolean uploadFile(String path, String uploadPath) {if (StringUtils.isEmpty(path) || StringUtils.isEmpty(uploadPath)) {return false;}Path clientPath = new Path(path);Path serverPath = new Path(uploadPath);try {fileSystem.copyFromLocalFile(false,clientPath,serverPath);return true;} catch (IOException e) {log.error(e.getMessage(), e);}return false;}@Overridepublic boolean downloadFile(String path, String downloadPath) {if (StringUtils.isEmpty(path) || StringUtils.isEmpty(downloadPath)) {return false;}Path clienPath = new Path(path);Path targetPath = new Path(downloadPath);try {fileSystem.copyToLocalFile(false,clienPath, targetPath);return true;} catch (IOException e) {log.error(e.getMessage());}return false;}@Overridepublic boolean deleteFile(String path) {boolean target = false;if (StringUtils.isEmpty(path)) {return false;}if (!existFile(path)) {return false;}Path src = new Path(path);try {target = fileSystem.deleteOnExit(src);} catch (IOException e) {log.error(e.getMessage());}return target;}@Overridepublic BlockLocation[] getFileBlockLocations(String path) {if (StringUtils.isEmpty(path)) {return null;}if (!existFile(path)) {return null;}BlockLocation[] blocks = null;Path src = new Path(path);try{FileStatus fileStatus = fileSystem.getFileStatus(src);blocks = fileSystem.getFileBlockLocations(fileStatus, 0, fileStatus.getLen());}catch(Exception e){log.error(e.getMessage());}return blocks;}@Overridepublic String readFileContent(String path) {if (StringUtils.isEmpty(path)){return null;}if (!existFile(path)) {return null;}Path src = new Path(path);FSDataInputStream inputStream = null;StringBuilder sb = new StringBuilder();try {inputStream = fileSystem.open(src);String lineText = "";while ((lineText = inputStream.readLine()) != null) {sb.append(lineText);}} catch (IOException e) {log.error(e.getMessage());} finally {if (null != inputStream) {try {inputStream.close();} catch (IOException e) {log.error(e.getMessage());}}}return sb.toString();}
}
# -*- coding: utf-8 -*-
import os
import importlibservices_abspath_arr = []
services_arr = []
services_dir_ = os.getcwd() + "\\hadoop"# 遍历模块文件(绝对路径)加到services_abspath_arr数组# 选择服务函数
def service_hadoop_select(str):for service_item in services_arr:if str.capitalize() == service_item.__class__.__name__:return service_itemdef foreach_file(path_name):for root, dirs, files in os.walk(path_name):for f in files:services_abspath_arr.append(os.path.join(root, f))# 读取模块
# f:文件路径
def loadModule(f):# 将f变成相对路径f = f.replace(services_dir_ + "\\", "").replace(".py", "").replace("\\", "/")# print(f)mod = importlib.import_module("jobs."+f.replace("/", "."))arr_1 = f.split("/")cs_service = getattr(mod, arr_1[len(arr_1) - 1].capitalize())# service的class形式service = cs_service()services_arr.append(service)foreach_file(services_dir_)for f in services_abspath_arr:if f.find(".pyc") == -1 and f.find("__init__") == -1:# print(f)loadModule(f)

 六、论文参考:

七、其他案例: 

 

  

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/1474949.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

网络资源模板--Android Studio 外卖点餐App

目录 一、项目演示 二、项目测试环境 三、项目详情 四、完整的项目源码 原创外卖点餐&#xff1a;基于Android studio 实现外卖(点)订餐系统 非原创奶茶点餐&#xff1a;网络资源模板--基于 Android Studio 实现的奶茶点餐App报告 一、项目演示 网络资源模板--基于Android …

vb.netcad二开自学笔记6:第一个绘制线段命令

.net编写绘制直线已完全不同于ActiveX的&#xff08;VBA&#xff09;的方式&#xff0c;过程更类似于arx程序&#xff0c;需要通过操作AutoCAD 数据库添加对象&#xff01;下面的代码是在以前代码基础上添加了一个新myline命令。 AutoCAD 数据库结构 myline命令代码 Imports A…

Unity AssetsBundle 详解

文章目录 1.AssetBundle 概念2.AssetBundle 优势3.AssetBundle 特性4.AssetBundle 使用流程4.1 分组4.2 打包4.3 加载包4.4 加载资源4.5 卸载资源 5.AssetBundleManifest6.AssetBundle的内存占用7.AB包资源加密 1.AssetBundle 概念 AssetBundle又称AB包&#xff0c;是Unity提供…

hadoop分布式中某个 节点报错的解决案例

前言 在分布式节点中&#xff0c;发现有个节点显示不可用状态&#xff0c;因此需要紧急修复。 hadoop版本 目前这套集群hadoop的版本如下&#xff1a; 集群报错详细日志&#xff1a; 1/1 local-dirs are bad: /kkb/install/hadoop-2.6.0-cdh5.14.2/hadoopDatas/tempDatas/n…

服务器本地部署文件服务器minio

minio类似于阿里云的OSS&#xff0c;为不方便把图、文、日志等形式的文件保存在公有云上的&#xff0c;可以在自己的服务器上部署文件服务器 看过本人前几个文章的&#xff0c;使用docker就会很快上手部署&#xff0c;直接上所有代码 #添加镜像 docker search minio docker p…

python - 文件 / 永久存储:pickle / 异常处理

一.文件 利用help(open)可以看到open()函数的定义&#xff1a; >>> help(open) Help on built-in function open in module _io:open(file, moder, buffering-1, encodingNone, errorsNone, newlineNone, closefdTrue, openerNone) 默认打开模式是’rt’&#xff0…

【网络安全】实验三(基于Windows部署CA)

一、配置环境 打开两台虚拟机&#xff0c;并参照下图&#xff0c;搭建网络拓扑环境&#xff0c;要求两台虚拟的IP地址要按照图中的标识进行设置&#xff0c;并根据搭建完成情况&#xff0c;勾选对应选项。注&#xff1a;此处的学号本人学号的最后两位数字&#xff0c;1学号100…

逆袭707计划

暑假沉淀计划707 上午&#xff1a; 早起习惯&#xff1a;先打开idea将昨日所学代码敲一遍&#xff08;预估半小时&#xff09; 早饭时间可并发查看是否有自媒体商单 学习一节JavaEE课程&#xff08;预估一个半小时&#xff09; 完成对应的作业&#xff08;预估一个小时&am…

Python28-9 XGBoost算法

XGBoost&#xff08;eXtreme Gradient Boosting&#xff0c;其正确拼写应该是 "Extreme Gradient Boosting"&#xff0c;而XGBoost 的作者在命名时故意使用了不规范的拼写&#xff0c;将“eXtreme”中的“X”大写&#xff0c;以突出其极限性能和效率&#xff09;是一…

【python学习】快速了解python基本数据类型

&#x1f3ac; 鸽芷咕&#xff1a;个人主页 &#x1f525; 个人专栏: 《C干货基地》《粉丝福利》 ⛺️生活的理想&#xff0c;就是为了理想的生活! 文章目录 前言1. 整数&#xff08;int&#xff09;2. 浮点数&#xff08;float&#xff09;3. 布尔值&#xff08;bool&#xf…

WPS+Python爬取百度之星排名

运行效果 手动拉取 https://www.matiji.net/exam/contest/contestdetail/146 如果手动查找&#xff0c;那么只能通过翻页的方式&#xff0c;每页10行&#xff08;外加一行自己&#xff09;。 爬取效果预览 本脚本爬取了个人排名和高校排名&#xff0c;可以借助WPS或MS Offi…

前端web在线PPT编辑器-PPTLIST

哈喽&#xff0c;大家好&#xff0c;今天给大家介绍一款的在线的PPT编辑器开源框架-PPTLIST&#xff1b;他是一个基于 Vue3.x TypeScript 的在线演示文稿&#xff08;幻灯片&#xff09;应用&#xff0c;还原了大部分 Office PowerPoint 常用功能&#xff0c;支持 文字、图片、…

【ffmpeg系列一】源码构建,ubuntu22与win10下的过程对比。

文章目录 背景ubuntu22结论 win10过程 对比结论 背景 顺手编译个ffmpeg试试&#xff0c;看看不同平台下谁的配置比较繁琐。 先让gpt给出个教程&#xff1a; ubuntu22 使用elementary-os7.1构建&#xff0c;看看有几个坑要踩。 错误1&#xff1a; 依赖libavresample-dev未…

明日周刊-第15期

赶在周末结束前输出一把&#xff0c;周日的晚上大家要睡个好觉哦。 文章目录 一周热点资源分享言论歌曲推荐 一周热点 科技创新与基础设施建设 深中通道正式通车试运营 时间&#xff1a;6月30日 内容&#xff1a;国家重大工程深中通道正式通车试运营&#xff0c;标志着珠江口东…

数据列表组件-报表

当数据在后端接口查询到&#xff0c;需要在页面展示出来&#xff0c;如果项目有很多report &#xff0c;可以把列表做一个组件 效果如下&#xff1a; js代码&#xff1a; <!DOCTYPE html> <html> <head><meta charset"utf-8" /><title&g…

用Goaccess对Web及雷池WAF日志实现可视化分析

君衍. 一、项目环境介绍二、Goaccess1、Goaccess介绍2、存储方式3、配置选项4、自定义日志/日期格式5、特殊格式说明符 三、雷池访问日志1、配置文件改变2、docker配置3、示例测试 四、Goaccess安装1、安装依赖2、编译安装 五、Goaccess对Nginx日志分析1、常用命令参数2、终端模…

第10章:网络与信息安全

目录 第10章&#xff1a;网络与信息安全 网络概述 计算机网络概念 计算机网络的分类 网络的拓扑结构 ISO/OSI网络体系结构 网络互联硬件 物理层互联设备 数据链路层互联设备 网络层互联设备 应用层互联设备 网络的协议与标准 网络标准 TCP/IP协议族 网络接口层协…

【Threejs进阶教程-优化篇】4.Vue/React与threejs如何解决冲突和卡顿(续)

Vue/React与threejs如何解决冲突和卡顿-续 使用说明核心思路环境搭建(vuethree)vue运行机制分析业务分离使用threejs做背景 3D模块封装使用ES6的Class来让逻辑性更强Threejs尽量按需引入创建一个类扩展写法本次代码执行顺序 扩展内容添加orbitControls和辅助线解决事件覆盖 与V…

《python程序语言设计》2018版第5章第53题利用turtle绘制sin和cos函数 sin蓝色,cos红色和52题类似

直接上题和代码 5.53 &#xff08;Turtle&#xff1a;绘制sin和cos函数&#xff09;编写程序绘制蓝色的sin函数和红色的cos函数。 代码和结果 turtle.speed(10) turtle.penup() # sin 用蓝色 turtle.color("blue") #这道题和上道题一样&#xff0c;先把turtle放到起始…