基于Spark的大数据日志分析系统设计与实现

博主介绍:
✌我是阿龙
,一名专注于Java技术领域的程序员,全网拥有10W+粉丝。作为CSDN特邀作者、博客专家、新星计划导师,我在计算机毕业设计开发方面积累了丰富的经验。同时,我也是掘金、华为云、阿里云、InfoQ等平台的优质作者。通过长期分享和实战指导,我致力于帮助更多学生完成毕业项目和技术提升。

技术范围:
我熟悉的技术领域涵盖SpringBoot、Vue、SSM、HLMT、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、小程序、安卓app、大数据、物联网、机器学习等方面的设计与开发。如果你有任何技术难题,我都乐意与你分享解决方案。

🍅获取源码请在文末联系我🍅

温馨提示:文末有 CSDN 平台官方提供的阿龙联系方式的名片!

温馨提示:文末有 CSDN 平台官方提供的阿龙联系方式的名片!

目录:

2 相关工具及介绍

2.1 Python语言

2.2 hive简介

2.5 Spark

2.4 数据采集

2.5 环境部署

2.6 环境部署

本项目hadoop核心代码:

本项目Spark核心代码:

本项目Hive核心代码:

​编辑

本次案例系统实现界面展示:

2.9测试用例

​编辑​编辑​编辑

源码获取文章下方名片联系我即可~大家点赞、收藏、关注、评论啦 、查看👇🏻获取联系方式👇🏻精彩专栏推荐订阅:在下方专栏

2 相关工具及介绍

2.1 Python语言

Python是由荷兰数学和计算机研究学会的吉多·范罗苏姆于20世纪90年代设计的一款高级语言。Python优雅的语法和动态类型,以及解释型语言的本质,使它成为许多领域脚本编写和快速开发应用的首选语言。Python相比与其他高级语言,开发代码量较小,代码风格简洁优雅,拥有丰富的第三方库。Python的代码风格导致其可读性好,便于维护人员阅读维护,程序更加健壮。Python能够轻松地调用其他语言编写的模块,因此也被成为“胶水语言”。

2.2 hive简介

Hive是一个数据仓库工具,当把特定结构地数据文件存入Hive对应的HDFS目录时,Hive能将其映射成表,并提供类 SQL 查询功能。底层会将sql语句转成MapReduce程序,大大方便程序开发,其中执行引擎可以更换,执行效率大大提高,Hive主要用于解决海量结构化日志的数据统计。

在本课题中,配置Hive为主要数据仓库,有以下几点原因

(1) Hive的操作接口采用类SQL语法,提供快速开发能力。

(2)相对于传统的关系型数据库,Hive更擅长于数据分析。

(3) Hive支持用户自定义函数,用户可根据自己的需求来实现自己的函数。

(4) Hive基于HDFS进行存储,扩展性高,可靠性高。

(5) Hive底层计算引擎可更换。

由于Hive默认底层引擎位MapReduce,MapReduce在遇到迭代式任务时,会将任务落盘至HDFS再进行运算,对于大批量数据处理来说,这很影响效率,所以我们会将引擎改成Tez。

2.3 hadoop技术

Hadoop 是 Apache 软件基金会下的一个开源分布式计算平台,它以分布式文件系统HDFS和MapReduce算法为核心。Hadoop提供了一个可靠的共享存储与分析系统[2]。用户可以在不了解分布式底层细节的情况下,开发分布式程序,充分利用集群的威力进行高速运算和存储。

Hadoop拥有以下4大优势:

(1) 高容错性:Hadoop底层维护多个数据副本,所以即使Hadoop某个计算元素或存储出现故障,也不会导致数据的丢失。

(2) 高扩展性:在集群间分配任务数据,可方便扩展数以千计的节点。

(3) 高效性:在MapReduce的思想下,Hadoop是并行工作的,大大加快了任务的处理速度。

Hadoop实现了一个分布式文件系统( Distributed File System),其中一个组件是HDFS(Hadoop Distributed File System)。HDFS有高容错性的特点,并且设计用来部署在低廉的(low-cost)硬件上;而且它提供高吞吐量(high throughput)来访问应用程序的数据,适合那些有着超大数据集(large data set)的应用程序。HDFS放宽了(relax)POSIX的要求,可以以流的形式访问(streaming access)文件系统中的数据。

在本课题中,由于其中的Mapreduce框架其设计初衷并不是为了满足循环迭代式数据流处理,因此在多并行运行的数据可复用场景中存在诸多计算效率等问题,Hadoop框架主要用于数据存储。

2.5 Spark

是一种DAG(有向无环图)的,基于内存的快速、通用、可扩展的大数据分析计算引擎。Spark 是分布式数据快速分析项目。它的核心技术是弹性分布式数据集(Resilient Distributed Datasets),简称RDD,提供了比 MapReduce 丰富的模型,可以快速在内存中对数据集进行多次迭代,不像MapReduce需要落盘数据才能进行迭代式运算,可支持复杂的数据挖掘算法和图形计算算法[4]。Spark的运行模式包括Local、Standalone、Yarn及Mesos几种。其中Local模式仅用于本地开发,Mesos模式国内几乎不用。在公司中因为大数据服务基本搭载Yarn集群调度,因此Spark On Yarn模式会用的比较多。

Spark是一个基于内存的,用于大规模数据处理的统一分析引擎,其运算速度可以达到Mapreduce的10-100倍。具有如下特点:内存计算。Spark优先将数据加载到内存中,数据可以被快速处理,并可启用缓存。shuffle过程优化。和Mapreduce的shuffle过程中间文件频繁落盘不同,Spark对Shuffle机制进行了优化,降低中间文件的数量并保证内存优先。RDD计算模型。Spark具有高效的DAG调度算法,同时将RDD计算结果存储在内存中,避免重复计算。

2.4 数据采集

考虑到更方便后续对数据的处理和分析,在采集视频数据后,选择了将爬取到的数据存入CSV文件中。CSV提供了一种轻量级、便捷的方式来批量写入数据且CSV文件较小,便于在网络间传输和分享,这对于分布式计算框架如Hadoop非常有利。而且CSV以纯文本形式存储表格数据,每行代表一条记录,各字段由逗号(或其他分隔符)分隔。这种结构化数据格式可以被各种编程语言和工具解析,包括Hadoop生态中的MapReduce程序。

2.5 环境部署

本文的软件开发环境及运行环境如下。操作系统:Linux;JDK:1.8.0_241 版本;Hadoop:hadoop-3.3.5版本;虚拟机:VMware-16.0;数据库工具:mysql-5.7.29版本、SQLyog-13.2.0版本;框架:Flask;可视化工具:Echarts。

为了实现基于大数据技术的视频数据分析与研究,需要搭建Hadoop集群,它可提供海量数据的分布式存储、分布式计算和分布式管理功能[9]。首先创建三台Linux系统的虚拟机,修改三台虚拟机的IP(192.168.144.131、192.168.144.132、192.168.144.133)并添加免密登录和安装JDK与Hadoop,修改Hadoop配置文件(hadoop-env.sh、core-site.xml、hdfs-site.xml、mapred-site.xml、yarn-site.xml),在终端运行hadoop namenode -format命令进行格式化格式化HDFS,最后启动Hadoop(start-all.sh)

2.6 环境部署

本文的软件开发环境及运行环境如下。操作系统:Linux;JDK:1.8.0_241 版本;Hadoop:hadoop-3.3.5版本;虚拟机:VMware-16.0;数据库工具:mysql-5.7.29版本、SQLyog-13.2.0版本;框架:Flask;可视化工具:Echarts。

为了实现基于大数据技术的视频数据分析与研究,需要搭建Hadoop集群,它可提供海量数据的分布式存储、分布式计算和分布式管理功能[9]。首先创建三台Linux系统的虚拟机,修改三台虚拟机的IP(192.168.144.131、192.168.144.132、192.168.144.133)并添加免密登录和安装JDK与Hadoop,修改Hadoop配置文件(hadoop-env.sh、core-site.xml、hdfs-site.xml、mapred-site.xml、yarn-site.xml),在终端运行hadoop namenode -format命令进行格式化格式化HDFS,最后启动Hadoop(start-all.sh)

本项目hadoop核心代码:

package com.example.demo.hadoop; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.FileSystem; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration as SpringConfig; import java.net.URI; @SpringConfig public class HadoopConfig { @Bean public FileSystem fileSystem() throws Exception { Configuration conf = new Configuration(); conf.set("fs.defaultFS", "hdfs://namenode:8020"); // 改成你的 NameNode 地址 conf.set("dfs.client.use.datanode.hostname", "true"); // 如果用主机名访问 return FileSystem.get(new URI("hdfs://namenode:8020"), conf, "hadoop"); // 第三个参数是Hadoop用户 } } package com.example.demo.hadoop; import org.apache.hadoop.fs.*; import org.springframework.stereotype.Service; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; @Service public class HdfsService { private final FileSystem fileSystem; public HdfsService(FileSystem fileSystem) { this.fileSystem = fileSystem; } public void upload(String localPath, String hdfsPath) throws IOException { fileSystem.copyFromLocalFile(false, true, new Path(localPath), new Path(hdfsPath)); } public void download(String hdfsPath, String localPath) throws IOException { fileSystem.copyToLocalFile(false, new Path(hdfsPath), new Path(localPath)); } public String readFile(String hdfsPath) throws IOException { try (FSDataInputStream in = fileSystem.open(new Path(hdfsPath))) { return new String(in.readAllBytes()); } } public void writeFile(String hdfsPath, String content) throws IOException { try (FSDataOutputStream out = fileSystem.create(new Path(hdfsPath), true)) { out.writeBytes(content); } } public FileStatus[] listFiles(String dirPath) throws IOException { return fileSystem.listStatus(new Path(dirPath)); } }

本项目Spark核心代码:

<dependency> <groupId>org.apache.spark</groupId> <artifactId>spark-core_2.12</artifactId> <version>3.5.1</version> <scope>provided</scope> </dependency> <dependency> <groupId>org.apache.spark</groupId> <artifactId>spark-sql_2.12</artifactId> <version>3.5.1</version> <scope>provided</scope> </dependency> package com.example.demo.spark; import org.apache.spark.sql.SparkSession; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @Configuration public class SparkConfig { @Bean(destroyMethod = "stop") public SparkSession sparkSession() { return SparkSession.builder() .appName("SpringBootSparkApp") .master("local[*]") // 测试用本地模式,部署到集群时去掉或改成 yarn/k8s .getOrCreate(); } } package com.example.demo.spark; import org.springframework.web.bind.annotation.*; @RestController @RequestMapping("/spark") public class SparkController { private final SparkService sparkService; public SparkController(SparkService sparkService) { this.sparkService = sparkService; } @GetMapping("/wordcount") public String wordCount(@RequestParam String path) { return sparkService.runWordCount(path); } @GetMapping("/sql") public String sqlExample() { return sparkService.runSimpleSqlExample(); } } package com.example.demo.spark; import org.apache.spark.sql.Dataset; import org.apache.spark.sql.Row; import org.apache.spark.sql.SparkSession; import org.springframework.stereotype.Service; @Service public class SparkService { private final SparkSession spark; public SparkService(SparkSession spark) { this.spark = spark; } public String runWordCount(String filePath) { Dataset<Row> df = spark.read().text(filePath); Dataset<Row> wordCounts = df .selectExpr("explode(split(value, ' ')) as word") .groupBy("word") .count() .orderBy(org.apache.spark.sql.functions.desc("count")); wordCounts.show(); // 控制台输出 return wordCounts.limit(10).collectAsList().toString(); } public String runSimpleSqlExample() { Dataset<Row> df = spark.read().json("examples/src/main/resources/people.json"); df.createOrReplaceTempView("people"); Dataset<Row> sqlDF = spark.sql("SELECT name, age FROM people WHERE age > 21"); sqlDF.show(); return sqlDF.collectAsList().toString(); } }

本项目Hive核心代码:

package com.example.demo.hive; import org.springframework.stereotype.Service; import java.sql.*; @Service public class HiveService { private final Connection connection; public HiveService(Connection connection) { this.connection = connection; } public String runQuery(String sql) throws SQLException { try (Statement stmt = connection.createStatement(); ResultSet rs = stmt.executeQuery(sql)) { StringBuilder sb = new StringBuilder(); ResultSetMetaData meta = rs.getMetaData(); int colCount = meta.getColumnCount(); // 表头 for (int i = 1; i <= colCount; i++) { sb.append(meta.getColumnName(i)).append("\t"); } sb.append("\n"); // 数据 while (rs.next()) { for (int i = 1; i <= colCount; i++) { sb.append(rs.getString(i)).append("\t"); } sb.append("\n"); } return sb.toString(); } } public void runUpdate(String sql) throws SQLException { try (Statement stmt = connection.createStatement()) { stmt.execute(sql); } } }

本次案例系统实现界面展示:

2.9测试用例

(1)用户登陆测试用例

表 6-1 用户登录用例表

项目/软件

编制时间

20xx/xx/xx

功能模块名

用户登陆模块

用例编号

xxxx

功能特性

用户身份验证

测试目的

验证是否输入合法的信息,允许合法登陆,阻止非法登陆

测试数据

用户名=1密码=a1身份= 非认证用户

操作步骤

操作描述

数 据

期望结果

实际结果

状态

1

输入用户名和密码

用户名= 1密码=1

显示进入后的页面。

同期望结果。

正常

2

输入用户名和密码

用户名= 1密码=aaa

显示警告信息“不存在该用户名或密码错误!”

同期望结果。

正常

3

输入用户名和密码

用户名= aaa密码=1

显示警告信息“不存在该用户名或密码错误”

同期望结果。

正常

4

输入用户名和密码

用户名=“” 密码=“”

显示警告信息“用户名密码不能为空!”

同期望结果。

正常

(2)用户注册测试用例

表 6-2 用户注册用例表

项目/软件

编制时间

20xx/xx/xx

功能模块名

用户注册模块

用例编号

xxxx

功能特性

用户注册

测试目的

验证私注册是否成功,注册数据是否合法

测试数据

用户名=aaa 密码=aaa电子邮件=dwa@qq.com

操作步骤

操作描述

数 据

期望结果

实际结果

测试状态

1

输入注册数据

用户名= aaa密码=aaa 电子邮件=dwa@qq.com

提示:注册成功!转入用户主页

同期望结果。

正常

2

输入注册数据

用户名= aaa密码=aaa 电子邮件=dwa@qq.com

提示:用户名已注册

同期望结果。

正常

3

输入注册数据

用户名= aaa密码=”” 电子邮件=dwa@qq.com

提示:密码不能为空

同期望结果。

正常

4

输入注册数据

密码=aaa 电子邮件=dwa@qq.com

提示:用户名为空

同期望结果。

正常

源码获取
文章下方名片联系我即可~
大家点赞、收藏、关注、评论啦 、查看👇🏻获取联系方式👇🏻
精彩专栏推荐订阅:在下方专栏

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Hunyuan模型能商用吗?Apache许可商业落地指南

Hunyuan模型能商用吗&#xff1f;Apache许可商业落地指南 1. 引言&#xff1a;企业级翻译需求与Hunyuan的定位 在跨国业务拓展、内容本地化和多语言客户服务等场景中&#xff0c;高质量的机器翻译能力已成为企业数字化基础设施的重要组成部分。传统云服务API虽便捷&#xff0…

Hunyuan-MT-7B-WEBUI文化保护:助力少数民族语言数字化传承

Hunyuan-MT-7B-WEBUI文化保护&#xff1a;助力少数民族语言数字化传承 1. 引言 随着全球化进程的加速&#xff0c;语言多样性正面临前所未有的挑战。据联合国教科文组织统计&#xff0c;全球约有40%的语言处于濒危状态&#xff0c;其中少数民族语言尤为脆弱。语言不仅是交流工…

实战OpenCode:用Qwen3-4B快速实现智能代码补全

实战OpenCode&#xff1a;用Qwen3-4B快速实现智能代码补全 在AI编程助手日益普及的今天&#xff0c;开发者对响应速度、模型灵活性和隐私安全的要求越来越高。OpenCode 作为一款终端优先、支持多模型、可完全离线运行的开源 AI 编程框架&#xff0c;凭借其轻量架构与强大扩展能…

手把手教你完成USB转485驱动程序Windows平台下载

从零搞定USB转485通信&#xff1a;驱动安装、硬件识别与实战调试全解析 你有没有遇到过这样的场景&#xff1f;手握一块USB转485模块&#xff0c;连上电脑后设备管理器里却只显示“未知设备”&#xff1b;或者明明识别了COM口&#xff0c;但用串口助手发数据就是没反应。更头疼…

bge-large-zh-v1.5性能优化:提升embedding服务效率的7个技巧

bge-large-zh-v1.5性能优化&#xff1a;提升embedding服务效率的7个技巧 随着大模型应用在语义理解、检索增强生成&#xff08;RAG&#xff09;和向量数据库构建等场景中的广泛落地&#xff0c;高效稳定的Embedding服务成为系统性能的关键瓶颈之一。bge-large-zh-v1.5作为一款…

AI智能文档扫描仪环境部署:Python+OpenCV免配置快速启动

AI智能文档扫描仪环境部署&#xff1a;PythonOpenCV免配置快速启动 1. 引言 1.1 业务场景描述 在日常办公、学习或财务报销中&#xff0c;我们经常需要将纸质文档、发票、合同或白板笔记转换为电子版。传统方式依赖专业扫描仪或手动裁剪照片&#xff0c;效率低且效果差。而市…

自动驾驶感知模块搭建:用YOLOv13镜像快速验证

自动驾驶感知模块搭建&#xff1a;用YOLOv13镜像快速验证 1. 引言 1.1 业务场景描述 在自动驾驶系统中&#xff0c;感知模块是实现环境理解的核心组件。其主要任务是从摄像头、激光雷达等传感器数据中识别和定位行人、车辆、交通标志等关键目标&#xff0c;为后续的决策与控…

Qwen3-VL-2B-Instruct缓存机制优化:减少重复计算教程

Qwen3-VL-2B-Instruct缓存机制优化&#xff1a;减少重复计算教程 1. 引言 1.1 业务场景描述 在多轮对话、视觉代理任务和长上下文推理等实际应用中&#xff0c;Qwen3-VL-2B-Instruct 模型需要频繁处理相似或重复的输入内容。例如&#xff0c;在 GUI 操作代理场景中&#xff…

verl版本管理:模型与代码同步更新的最佳实践

verl版本管理&#xff1a;模型与代码同步更新的最佳实践 1. verl 介绍 verl 是一个灵活、高效且可用于生产环境的强化学习&#xff08;RL&#xff09;训练框架&#xff0c;专为大型语言模型&#xff08;LLMs&#xff09;的后训练设计。它由字节跳动火山引擎团队开源&#xff…

TurboDiffusion最佳实践:高效提示词编写模板与技巧

TurboDiffusion最佳实践&#xff1a;高效提示词编写模板与技巧 1. 引言 1.1 视频生成的技术演进与挑战 近年来&#xff0c;文生视频&#xff08;Text-to-Video, T2V&#xff09;和图生视频&#xff08;Image-to-Video, I2V&#xff09;技术迅速发展&#xff0c;成为AI内容创…

Qwen3-VL-WEB调度系统:任务队列与优先级管理实战

Qwen3-VL-WEB调度系统&#xff1a;任务队列与优先级管理实战 1. 引言&#xff1a;Qwen3-VL-WEB 的核心定位与业务挑战 随着多模态大模型在视觉理解、图文生成和交互式推理等场景的广泛应用&#xff0c;如何高效调度高并发的网页端推理请求成为工程落地的关键瓶颈。Qwen3-VL-W…

ES客户端在多租户架构中的集成策略解析

如何让 ES 客户端在多租户系统中既安全又高效&#xff1f;一线架构师的实战拆解 你有没有遇到过这样的场景&#xff1a; 一个 SaaS 平台上线不到半年&#xff0c;租户数量从几十涨到上千&#xff0c;日志查询接口突然频繁超时。排查发现&#xff0c;某个“大客户”一口气查了三…

混元翻译模型部署:HY-MT1.5-1.8B容器化方案

混元翻译模型部署&#xff1a;HY-MT1.5-1.8B容器化方案 1. 引言 随着多语言交流需求的不断增长&#xff0c;高质量、低延迟的翻译服务已成为智能应用的核心能力之一。混元翻译模型&#xff08;Hunyuan Machine Translation, HY-MT&#xff09;系列在多个国际评测中表现出色&a…

GLM-4.6V-Flash-WEB媒体行业:新闻图片自动生成标题系统

GLM-4.6V-Flash-WEB媒体行业&#xff1a;新闻图片自动生成标题系统 1. 技术背景与应用场景 随着数字媒体内容的爆炸式增长&#xff0c;新闻机构每天需要处理海量的图像素材。传统的人工撰写图片标题方式效率低、成本高&#xff0c;难以满足实时性要求。自动化图像描述生成&am…

视觉AI商业化落地:Qwen3-VL-2B实战案例解析

视觉AI商业化落地&#xff1a;Qwen3-VL-2B实战案例解析 1. 引言&#xff1a;视觉AI的商业价值与技术演进 随着人工智能从纯文本交互向多模态理解演进&#xff0c;视觉语言模型&#xff08;Vision-Language Model, VLM&#xff09;正成为企业智能化升级的关键技术。传统客服、…

usb_burning_tool刷机工具界面功能通俗解释

深入拆解usb_burning_tool刷机工具&#xff1a;从界面小白到实战高手 你有没有遇到过这样的场景&#xff1f;手里的电视盒子突然开不了机&#xff0c;ADB连不上&#xff0c;Recovery也进不去&#xff0c;只能干瞪眼看着它变“砖”&#xff1f;或者你在做固件升级时反复失败&…

PDF-Extract-Kit在金融报表分析中的应用场景全解析

PDF-Extract-Kit在金融报表分析中的应用场景全解析 1. 引言&#xff1a;金融报表处理的挑战与技术演进 在金融行业&#xff0c;年报、季报、财务附注等文档通常以PDF格式发布。这些文件包含大量结构化信息&#xff0c;如财务报表、指标数据、公式推导和文本说明。然而&#x…

从0开始学图像修复:lama模型使用全攻略

从0开始学图像修复&#xff1a;lama模型使用全攻略 1. 学习目标与前置知识 本文旨在为初学者提供一套完整的 lama 图像修复模型使用指南&#xff0c;帮助您从零开始掌握如何通过 WebUI 界面完成图像修复任务。无论您是 AI 新手还是有一定基础的开发者&#xff0c;都能快速上手…

AI智能证件照制作工坊能否集成人脸识别?未来升级方向

AI智能证件照制作工坊能否集成人脸识别&#xff1f;未来升级方向 1. 引言&#xff1a;AI 智能证件照制作工坊的技术背景与业务需求 随着数字化办公、在线身份认证和远程服务的普及&#xff0c;对高质量、标准化证件照的需求日益增长。传统照相馆流程繁琐、成本高&#xff0c;…

SGLang DSL编程入门:写复杂逻辑像搭积木一样简单

SGLang DSL编程入门&#xff1a;写复杂逻辑像搭积木一样简单 1. 引言&#xff1a;大模型推理的复杂性与SGLang的诞生 随着大语言模型&#xff08;LLM&#xff09;在多轮对话、任务规划、API调用和结构化输出等场景中的广泛应用&#xff0c;传统的简单问答式推理已无法满足生产…