(一)Java日志大数据(单机环境)学习笔记——开篇
开篇
大家好,我是认真🇨🇳。从今天起,在此栏目下,我开始更新大数据(单机环境)的学习笔记。此前公司的客户有日志大数据方便的需求,但是绝大多数的客户只能提供一台服务器做为大数据使用。在中小型公司的业务量下,单机版大数据部署及开发是有必要的,并且单机版大数据也可以作为个人学习入手。
说明一下,单机大数据只是解决一些中小型客户需求,如果真的想学习专业大数据业务的研发,还是要系统的学习多服务的大数据部署和开发。如果此篇文章有帮助到你,请点赞收藏;如果您不屑于此篇文章的分享,请手下留情;如果您是资深大牛,请多对文章斧正。共同学习,共同进步。
一、业务介绍
A学校现在有12台业务服务器(以下简称:业务服务器),这12台服务器运用在各个平台上,有学校门户网站、教务系统、网安系统、财务系统等,每台服务器每天都会产生大量的日志,根据《网络安全法》第二十一条要求:采取监测、记录网络运行状态、网络安全事件的技术措施,并按照规定留存相关的网络日志不少于六个月。
现在A学校要求:把12台服务器的日志统一存储到统一的日志服务器(以下简称:日志服务器)中,并且日志服务器提供清洗、存储、分析、查询和展示等功能,日志可以追溯到六个月前,一台服务器每天产生的日志量大约在1G,12台服务器每天产生的日志量在12G左右。学校方面只提供一台日志服务器,配置为8核32G,1T硬盘。
二、技术分析
硬件分析
首先分析服务器配置,这边属于基础的硬性要求,假设每天日志量为12G,日志保存六个月,也就是最少要保证有2160G的存储,按照学校提供的1T,是完全不够的,在此基础上,是需要对存储的数据进行压缩的,充分利用磁盘空间,并且在该配置下,充分存储更多的日志量。服务器为8核32G,按照目前的日志量,这些是完全够用的,我们只需要合理的分配各个大数据组件的内存分配即可。
日志接收分析
日志在由其他服务器发送到当前日志服务器,我们采用以下集中方式收集。
- udp协议——flume流处理——kafka: 业务服务器的日志通过udp协议向日志服务器的514端口发送,因为udp协议是一种无需建立连接就可以发送封装的 IP 数据包的方法,在日志的发送过程,我们不需要太多的考虑日志服务器是否真正接收到日志,业务服务器只管发送,日志服务器只管接收,通过flume的配置,将udp的514端口的消息存入kafka中,等待清洗。
- scp脚本监听发送——flume流处理——kafka 业务服务器本地生成的日志文件会通过监听脚本的scp命令传输到指定的日志服务器,日志服务器添加接收脚本,即可按照一定时间周期将业务服务器的日志文件拉取到日志服务器,flume监听日志的到来后,将日志以流的方式传输到kafka中。
- 其他
日志清洗分析
上面介绍到,日志会通过flume传输到kafka中,有朋友会问:为什么不直接在flume中写拦截器进行数据分析处理?在实际的业务开发中,团队发现flume的拦截器在处理每秒1000次以上的数据后,会出现丢失数据的情况,接入一些线程去处理后依然会出现该情况,因为核心逻辑涉及到每条日志都要归类,要去redis去查询一次该日志属于哪个数据源,导致在其中的流程变慢。
清洗数据这块,团队使用Java代码消费kafka的消息,启用线程池处理每条消息,这样不仅可以保证数据处理过程中不会丢失,并且统一代码在业务框架中,易于维护,易于开发。
日志存储分析(Hadoop)
在日志存储方面,我采用了Hadoop存储,Hadoop是一个由Apache基金会所开发的分布式系统基础架构。用户可以在不了解分布式底层细节的情况下,开发分布式程序。充分利用集群的威力进行高速运算和存储。
日志查询分析(Hive、Elasticsearch)
日志查询部分,我采用的若依(springboot+vue)做管理系统,这个框架可以提供很强的便捷开发,对hadoop的数据进行hive建表,处理每个字段,对每个hive做es索引,达到快速查询的效果。
在这里说明下,最近我和一个大数据公司架构师沟通的过程中,他友情的提示我,在查询的框架中,可以不适用hive,直接用es-hadoop的方式进行查询,我恍然大悟,在学习笔记的记录中,我将尝试es-hadoop的方式进行查询,摒弃掉hive作为中间件,希望这种可以实现,就可以少用一个中间件。
首先说明下,hive是基于Hadoop的一个数据仓库工具,用来进行数据提取、转化、加载,这是一种可以存储、查询和分析存储在Hadoop中的大规模数据的机制,其实hadoop的MR,或者hive完全可以提供查询功能,但是这种查询非常慢,百万数据的查询可以慢到几分钟甚至几个小时,所以在这里,需要接入es进行索引处理,加快查询,提升用户使用体验。
日志展示分析(Echarts、DataV)
echarts是一款基于JavaScript的数据可视化图表库,提供直观,生动,可交互,可个性化定制的数据可视化图表。在处理软件部分数据报表使用这块插件,极其强大,可定制化很强,与vue的结合也很友好,dataV vue是一个大数据可视化搭建的vue框架,可以速度的搭建一个大数据展示屏的框架,也很好用。
三、技术路线
以上是技术分析后,整理的技术路线,在这里进行总结一下:
各个平台的日志数据通过flume或者scp脚本发送到日志服务器的kafka或者本地,日志服务器通过Java代码消费kafka消息,达到每条日志的针对性分析,分析完成后,存储到hadoop中,通过hive建立数据与表的连接,为了加速查询接入elasticsearch,最终的数据通过大屏展示、BI工具使用或者报警功能。
四、学习环境
服务器环境
| 环境 | 版本 |
| ---- | ---- | ---- |
| 服务器 | 8核 32G 500G硬盘(其他配置自测) |
| centos | 7.4 |
基础环境
注意: 可以试用任意适合自己的版本
| 环境 | 版本 |
| ---- | ---- | ---- |
| jdk | 1.8 |
| mysql | 5.7.24 |
| redis | 6.2.2 |
大数据环境
注意: 版本尽量对应,不然容易出冲突和不兼容,也可以自己尝试其他版本的搭配
| 环境 | 版本 |
| ---- | ---- | ---- |
| flume | 1.9.0 |
| kafka | 2.8.0 |
| zookeeper | 3.7.0 |
| hadoop | 3.2.2 |
| hive | 3.1.2 |
| elasticsearch | 7.0.1 |
以上软件提供网盘下载地址,提取码:net0
五、学习路线
(一)Java日志大数据(单机环境)学习笔记——开篇
(二)Java日志大数据(单机环境)学习笔记——基础环境搭建
(三)Java日志大数据(单机环境)学习笔记——Hadoop安装与配置
持续更新…
版权归原作者 认真的学习笔记 所有, 如有侵权,请联系我们删除。