当前位置: 首页 > article >正文

从零构建基于Hadoop的网站流量日志分析平台:以搜狗搜索日志为例

1. 为什么需要网站流量日志分析平台每天都有数以亿计的用户在互联网上浏览网页、搜索信息。这些行为产生的日志数据就像一座金矿蕴含着用户偏好、市场趋势等宝贵信息。但处理这些数据可不容易——想象一下你要从500万条杂乱无章的日志记录中找出最有价值的信息就像在沙滩上找特定的几粒沙子。传统单机处理方式面对这种量级的数据时往往会卡死或需要数小时才能完成计算。这就是为什么我们需要Hadoop这样的分布式计算框架。去年我接手一个电商项目最初用Python脚本分析日志处理100万条数据就花了3小时。后来迁移到Hadoop集群同样的计算量只需2分钟。2. Hadoop集群搭建实战2.1 硬件规划与系统准备搭建Hadoop集群就像组建一支施工队。你需要考虑几个关键因素工人数量3-5台普通配置的服务器就足够处理千万级日志工具配置每台机器建议16GB内存4核CPU500GB硬盘操作系统我习惯用CentOS 7稳定性经过多年验证实际操作时先确保所有节点# 关闭防火墙 systemctl stop firewalld systemctl disable firewalld # 设置主机名 hostnamectl set-hostname node012.2 Hadoop安装与配置安装Hadoop就像给团队配备统一的工作装备。以下是关键步骤下载Hadoop 3.3.4当前稳定版wget https://archive.apache.org/dist/hadoop/common/hadoop-3.3.4/hadoop-3.3.4.tar.gz tar -zxvf hadoop-3.3.4.tar.gz -C /opt/配置环境变量所有节点都需要# 在~/.bashrc末尾添加 export HADOOP_HOME/opt/hadoop-3.3.4 export PATH$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin修改核心配置文件以3节点集群为例core-site.xmlconfiguration property namefs.defaultFS/name valuehdfs://node01:8020/value /property /configurationhdfs-site.xmlconfiguration property namedfs.replication/name value2/value /property /configuration2.3 集群启动与验证启动集群就像开工前的动员大会# 格式化HDFS仅在首次执行 hdfs namenode -format # 启动HDFS start-dfs.sh # 启动YARN start-yarn.sh验证是否成功访问NameNode Web界面http://node01:9870检查各节点进程jps应显示NameNode、DataNode等关键进程3. 日志分析核心实现3.1 理解搜狗日志格式搜狗搜索日志通常包含6个关键字段20111230000005 57375476989eea12893c0c3811607bcf 奇艺高清 1 1 http://www.qiyi.com/分别对应时间戳、用户ID、搜索词、推荐排行、点击顺序、URL3.2 MapReduce编程实战编写MapReduce程序就像设计流水线作业Mapper阶段- 负责数据清洗public static class Map extends MapperLongWritable, Text, Text, IntWritable { private final static IntWritable one new IntWritable(1); private Text word new Text(); Override protected void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException { String line value.toString(); if(line.split(\t).length 6) { String keyword line.split(\t)[2]; // 过滤空值和特殊字符 if(!keyword.isEmpty() !keyword.matches(.*[\\x00-\\x1F].*)) { word.set(keyword); context.write(word, one); } } } }Reducer阶段- 进行统计排序public static class Reduce extends ReducerText, IntWritable, Text, IntWritable { private TreeMapInteger, String top10Map new TreeMap(Collections.reverseOrder()); Override protected void reduce(Text key, IterableIntWritable values, Context context) { int sum 0; for (IntWritable val : values) { sum val.get(); } // 使用TreeMap自动排序 top10Map.put(sum, key.toString()); // 只保留Top10 if(top10Map.size() 10) { top10Map.pollLastEntry(); } } Override protected void cleanup(Context context) throws IOException, InterruptedException { for(Map.EntryInteger, String entry : top10Map.entrySet()) { context.write(new Text(entry.getValue()), new IntWritable(entry.getKey())); } } }3.3 运行与优化技巧提交作业时有几个实用参数hadoop jar analysis.jar com.example.SogouAnalyzer \ -D mapreduce.job.queuenameproduction \ -D mapreduce.map.memory.mb2048 \ /input/sogou /output/result常见性能优化点设置合理的map和reduce任务数量启用Combiner减少网络传输合理设置Block Size默认为128MB4. 数据可视化全链路4.1 结果存储到MySQL将HDFS结果导入MySQL就像把成品存入仓库首先创建结果表CREATE TABLE sogou_top_keywords ( keyword VARCHAR(255) NOT NULL, search_count INT NOT NULL, update_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (keyword) ) ENGINEInnoDB DEFAULT CHARSETutf8mb4;使用Python桥接数据import pymysql from hdfs import InsecureClient # 从HDFS下载结果 hdfs_client InsecureClient(http://node01:9870) with hdfs_client.read(/output/result/part-r-00000) as reader: results [line.decode(utf-8).strip().split(\t) for line in reader] # 写入MySQL conn pymysql.connect(hostmysql_host, userhadoop, passwordsecure_pwd) with conn.cursor() as cursor: for keyword, count in results: sql INSERT INTO sogou_top_keywords (keyword, search_count) VALUES (%s, %s) ON DUPLICATE KEY UPDATE search_countVALUES(search_count) cursor.execute(sql, (keyword, int(count))) conn.commit()4.2 Spring Boot可视化服务后端接口开发RestController RequestMapping(/api) public class AnalysisController { Autowired private JdbcTemplate jdbcTemplate; GetMapping(/top-keywords) public ListMapString, Object getTopKeywords() { return jdbcTemplate.queryForList( SELECT keyword, search_count FROM sogou_top_keywords ORDER BY search_count DESC LIMIT 10); } }前端使用ECharts展示fetch(/api/top-keywords) .then(res res.json()) .then(data { const chart echarts.init(document.getElementById(chart)); chart.setOption({ xAxis: { type: category, data: data.map(item item.keyword) }, yAxis: { type: value }, series: [{ data: data.map(item item.search_count), type: bar }] }); });5. 实战中的经验与坑点5.1 数据清洗的注意事项处理真实日志时会遇到各种脏数据编码问题遇到过GBK/UTF-8混合编码的日志异常分隔符有些字段内包含制表符特殊字符emoji、控制字符等建议的清洗策略先抽样检查数据质量在Mapper中添加多层过滤记录被过滤的数据量用于质量评估5.2 性能调优实战在千万级数据场景下这些优化很有效启用LZO压缩减少磁盘IOproperty namemapreduce.map.output.compress/name valuetrue/value /property property namemapreduce.map.output.compress.codec/name valuecom.hadoop.compression.lzo.LzoCodec/value /property合理设置Reduce数量建议为节点数的0.95-1.75倍// 在Driver中设置 job.setNumReduceTasks(10);5.3 安全与维护建议生产环境必须考虑定期清理HDFS临时文件设置HDFS配额防止磁盘写满启用NameNode HA避免单点故障监控集群资源使用情况6. 扩展应用场景这个架构可以轻松扩展到其他分析场景用户行为分析统计UV/PV、访问路径异常检测识别异常爬虫流量实时分析结合KafkaSpark Streaming多维分析使用Hive构建数据仓库比如分析用户停留时间-- 使用HiveQL SELECT page_url, AVG(stay_time) FROM user_behavior_logs GROUP BY page_url ORDER BY AVG(stay_time) DESC LIMIT 10;

相关文章:

从零构建基于Hadoop的网站流量日志分析平台:以搜狗搜索日志为例

1. 为什么需要网站流量日志分析平台 每天都有数以亿计的用户在互联网上浏览网页、搜索信息。这些行为产生的日志数据就像一座金矿,蕴含着用户偏好、市场趋势等宝贵信息。但处理这些数据可不容易——想象一下,你要从500万条杂乱无章的日志记录中找出最有…...

DeerFlow进阶技巧:自定义研究流程,打造专属智能助理

DeerFlow进阶技巧:自定义研究流程,打造专属智能助理 如果你已经体验过DeerFlow的基础功能,知道它能帮你搜索信息、分析数据、生成报告,那么今天我们来聊聊更有意思的部分——如何让它真正成为你的专属智能助理。 很多朋友用Deer…...

大模型显存占用对比:Qwen2.5-7B推理vs微调,你的显卡够用吗?

Qwen2.5-7B模型显存实战指南:从消费级显卡到专业硬件的适配策略 当你在本地部署一个7B参数的大语言模型时,第一道门槛往往不是算法理解,而是冰冷的硬件现实——显存不足的报错提示。去年团队第一次尝试在RTX 3090上跑Qwen2.5-7B推理时&#…...

Qwen3互联网应用架构:构建可扩展的字幕处理微服务

Qwen3互联网应用架构:构建可扩展的字幕处理微服务 想象一下,你负责一个在线教育平台,每天有成千上万的用户上传课程视频。用户希望视频能立刻配上字幕,方便学习和搜索。高峰期时,每分钟可能有上百个视频同时涌入。如果…...

避坑指南:为什么conda安装ipywidgets后tqdm进度条还是不显示?完整排查流程

深度排查:为什么conda安装ipywidgets后tqdm进度条依然消失? 当你满怀期待地在JupyterLab中运行数据分析脚本,却发现tqdm进度条只输出冷冰冰的HBox提示而非动态可视化效果时,这种挫败感就像等待下载进度条卡在99%。本文将从底层原理…...

在浏览器中快速编辑代码:VSCode Web 集成实践

在浏览器中快速编辑代码:VSCode Web 集成实践 AI 分析完代码后,如何立即在浏览器中打开编辑器进行修改?本文分享 HagiCode 项目中集成 code-server 的实践经验,实现 AI 助手与代码编辑体验的无缝连接。 背景 在 AI 辅助编程的时代…...

HunyuanVideo-Foley私有部署教程:Ubuntu20.04安装与一键GPU环境配置

HunyuanVideo-Foley私有部署教程:Ubuntu20.04安装与一键GPU环境配置 1. 引言 最近在音视频生成领域,HunyuanVideo-Foley模型凭借其出色的音画同步能力和高质量的音频生成效果,受到了开发者社区的广泛关注。但对于很多刚接触这个领域的朋友来…...

终极工业管理革命:如何用DoubleQoL模组让《工业队长》效率提升300%

终极工业管理革命:如何用DoubleQoL模组让《工业队长》效率提升300% 【免费下载链接】DoubleQoLMod-zh 项目地址: https://gitcode.com/gh_mirrors/do/DoubleQoLMod-zh 你是否曾在《工业队长》中花费数小时等待生产线运转,或者因视角限制而无法全…...

软件变更管理化的影响评估与实施控制

软件变更管理的影响评估与实施控制 在快速迭代的软件开发过程中,变更管理是确保系统稳定性和项目成功的关键环节。无论是需求调整、缺陷修复还是性能优化,每一次变更都可能对系统功能、性能或安全性产生深远影响。科学的影响评估与严格的实施控制成为变…...

【chrony】从原理到实战:构建高精度企业级时间同步服务

1. 为什么企业需要高精度时间同步 想象一下这样的场景:证券交易所里,一笔价值上亿的交易因为两台服务器的时间差0.1秒而被系统判定为无效;医院的手术室里,来自不同设备的生命体征监测数据因为时间不同步而无法准确关联&#xff1…...

馈线自动化(FA)如何重塑现代配电网?核心价值与技术路径解析

1. 馈线自动化:配电网的"智能医生" 想象一下凌晨三点你家突然停电的场景。传统配电网下,抢修人员需要逐段排查故障点,可能几小时后才能恢复供电。而配备了馈线自动化(FA)的智能配电网,能在90秒内…...

3步永久保存:喜马拉雅音频下载工具让付费内容真正属于你

3步永久保存:喜马拉雅音频下载工具让付费内容真正属于你 【免费下载链接】xmly-downloader-qt5 喜马拉雅FM专辑下载器. 支持VIP与付费专辑. 使用GoQt5编写(Not Qt Binding). 项目地址: https://gitcode.com/gh_mirrors/xm/xmly-downloader-qt5 你是否曾为喜马…...

OKNet实战:用63x63超大卷积核搞定图像去雾/去雪/去模糊(附PyTorch配置指南)

OKNet实战:用63x63超大卷积核搞定图像去雾/去雪/去模糊(附PyTorch配置指南) 当你在处理一张被雾气笼罩的风景照,或是被雪花覆盖的街景,亦或是因手抖而模糊的人物特写时,是否曾想过AI如何让这些图像重获新生…...

ABB机器人重定位移动的欧拉角与Rapid指令实战解析

1. ABB机器人重定位移动的核心原理 第一次接触ABB机器人重定位功能时,我也被那些绕来绕去的旋转搞得头晕。直到有次在调试焊接路径时,发现示教器上的摇杆操作其实就是在玩转欧拉角,这才恍然大悟。重定位移动说白了就是让机器人末端工具在保持…...

前视声呐图像处理避坑指南:从像素坐标到真实距离/角度的转换原理与YOLO集成

前视声呐图像处理避坑指南:从像素坐标到真实距离/角度的转换原理与YOLO集成 水下机器人视觉系统的核心挑战之一,是如何准确解读前视声呐生成的二维图像。与光学相机不同,声呐图像中的每个像素点背后都隐藏着复杂的物理测量原理。许多工程师在…...

解锁数字记忆:WeChatExporter如何成为你的微信时光胶囊

解锁数字记忆:WeChatExporter如何成为你的微信时光胶囊 【免费下载链接】WeChatExporter 一个可以快速导出、查看你的微信聊天记录的工具 项目地址: https://gitcode.com/gh_mirrors/wec/WeChatExporter 在数字时代的洪流中,我们的记忆正悄然从大…...

免费快速解锁网易云音乐加密文件:ncmdump终极使用指南

免费快速解锁网易云音乐加密文件:ncmdump终极使用指南 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM加密文件无法在其他设备播放而烦恼吗?ncmdump是一款专业的网易云音乐NCM解密工…...

Enhancing Encrypted Traffic Classification with RNN and ResNet: A Spatiotemporal Feature Fusion Appr

1. 当加密流量遇上时空特征提取 第一次看到加密流量分类这个课题时,我正对着满屏的十六进制数据发愁。传统方法需要手动提取上百个特征,就像要求交警记住每辆车的发动机编号来管理交通。直到尝试用原始流量数据直接训练模型,才发现深度学习的…...

华为OD机试 - 黑白棋 - 广度优先搜索BFS(Java 新系统 200分)

华为OD机试 新系统 题库疯狂收录中,刷题点这里 专栏导读 本专栏收录于《华为OD机试(JAVA)真题》。 刷的越多,抽中的概率越大,私信哪吒,备注华为OD,加入华为OD刷题交流群,每一题都有详细的答题思路、详细的代码注释、3个测试用例、为什么这道题采用XX算法、XX算法的适…...

Battery Toolkit:Apple Silicon Mac 电池健康管理的终极解决方案

Battery Toolkit:Apple Silicon Mac 电池健康管理的终极解决方案 【免费下载链接】Battery-Toolkit Control the platform power state of your Apple Silicon Mac. 项目地址: https://gitcode.com/gh_mirrors/ba/Battery-Toolkit 你是否经常担心 MacBook 电…...

鸿蒙NEXT星河版开发全攻略

鸿蒙 HarmonyOS NEXT 星河版零基础入门到实战详细步骤针对黑马程序员鸿蒙 HarmonyOS NEXT 星河版零基础入门到实战教程,以下从环境搭建、核心架构理解、开发模式选择及学习路径规划四个维度进行详细解构与步骤推演。一、 开发环境搭建详细步骤工欲善其事&#xff0c…...

靠谱的法兰研发公司

在工业领域,法兰是连接管道系统的关键部件,其性能直接影响到整个系统的安全性和稳定性。因此,选择一家靠谱的法兰研发公司至关重要。本文将从多个维度对河北汇能管道制造有限公司(以下简称“河北汇能”)进行评测&#…...

改进的Yolo11算法 有效张点创新点 引入FocalModulation特征金字塔实现精度的提高

Yolo11 引入【FocalModulation】特征金字塔的实现步骤一、【FocalModulation】特征金字塔概述1.1 【FocalModulation】特征金字塔介绍 【FocalModulation】结构简介 以下为【FocalModulation】特征金字塔的核心处理过程和优势: 处理过程:分层上下文化处理…...

GDB调试实战:参数传递与断点设置的进阶技巧(--args、set args、break)

1. GDB调试入门:为什么参数传递和断点设置如此重要 刚开始接触GDB调试时,我经常遇到一个尴尬的情况:明明程序在命令行下运行得好好的,一用GDB调试就各种崩溃。后来才发现,原来是忘记给调试的程序传递参数了。这就像你给…...

Tiny11Builder终极指南:让你的老旧电脑重获新生!

Tiny11Builder终极指南:让你的老旧电脑重获新生! 【免费下载链接】tiny11builder Scripts to build a trimmed-down Windows 11 image. 项目地址: https://gitcode.com/GitHub_Trending/ti/tiny11builder 想象一下,你的老旧电脑开机需…...

3步快速搭建缠论可视化分析平台:基于TradingView的终极解决方案

3步快速搭建缠论可视化分析平台:基于TradingView的终极解决方案 【免费下载链接】chanvis 基于TradingView本地SDK的可视化前后端代码,适用于缠论量化研究,和其他的基于几何交易的量化研究。 缠论量化 摩尔缠论 缠论可视化 TradingView TV-SD…...

3分钟快速上手:免费在线3D模型查看器完整指南

3分钟快速上手:免费在线3D模型查看器完整指南 【免费下载链接】Online3DViewer A solution to visualize and explore 3D models in your browser. 项目地址: https://gitcode.com/gh_mirrors/on/Online3DViewer 想要在浏览器中直接查看3D模型而无需安装任何…...

html-docx-js:浏览器端HTML到DOCX转换的架构实现与深度集成方案

html-docx-js:浏览器端HTML到DOCX转换的架构实现与深度集成方案 【免费下载链接】html-docx-js Converts HTML documents to DOCX in the browser 项目地址: https://gitcode.com/gh_mirrors/ht/html-docx-js html-docx-js是一个基于JavaScript的轻量级库&am…...

告别模糊图像:html-to-image 像素比率(Pixel Ratio)完全控制指南

告别模糊图像:html-to-image 像素比率(Pixel Ratio)完全控制指南 【免费下载链接】html-to-image ✂️ Generates an image from a DOM node using HTML5 canvas and SVG. 项目地址: https://gitcode.com/gh_mirrors/ht/html-to-image …...

告别臃肿控制中心:AlienFX Tools如何用500KB实现Alienware设备的完全掌控

告别臃肿控制中心:AlienFX Tools如何用500KB实现Alienware设备的完全掌控 【免费下载链接】alienfx-tools Alienware systems lights, fans, and power control tools and apps 项目地址: https://gitcode.com/gh_mirrors/al/alienfx-tools 你是否曾经因为Al…...