本发明涉及一种日志数据处理方法,尤其是涉及一种海量日志数据的高效低成本处理方法。
背景技术:
在海量日志数据的处理方面通常会通过数据库表分区,索引,查询语句优化,数据库参数调优等方法来提高日志处理性能,但这种处理方式的缺点是不能充分利用现有的数据库服务器多CPU多核的特点,服务器性能得不到充分利用,日志处理不能按时完成。而通过Hadoop、Hive等大数据处理的方式,对技术要求较高,增加了开发和维护成本。
技术实现要素:
本发明的目的就是为了克服上述现有技术存在的缺陷而提供一种海量日志数据的高效低成本处理方法。
本发明的目的可以通过以下技术方案来实现:
一种海量日志数据的高效低成本处理方法,包括:
并行处理临时表初始化,删除临时数据;
并行导入日志文件数据到临时表;
并行计算临时表数据,执行数据清洗,合并各路数据,生成最终的日志表数据;
根据最终的日志表数据并行计算,获得日志统计分析报表。
优选地,所述的方法具体包括以下步骤:
步骤1中,并行删除日志记录数汇总临时表LOG_INTERFACE_BUFF数据、删除各路日志对应的临时表数据、删除日志结果表当天分区表数据、删除404日志临时表数据、删除404日志结果表数据当天的日志数据;
步骤2中,等待最后一个删除完成;
步骤3中,记录待处理的访问日志目录;
步骤4中,判断当前日志目录是否JSP目录,不是JSP目录执行步骤5,是JSP目录执行步骤6;
步骤5中,定义静态日志文件名;
步骤6中,定义动态JSP日志文件名;
步骤7中,合并前天最后10000条日志,昨天日志和当天的前10000条日志;
步骤8中,导入合并后的当前目录日志到各路日志对应的临时表;
步骤9中,删除合并后的文件及临时文件;
步骤10中,等待最后一路数据导入完成;
步骤11中,执行SP_HIS_APACHE_ACCESS_LOG存储过程;
步骤12中,执行SP_HIS_APACHE_ACCESS_LOG21存储过程;
步骤13中,执行SP_HIS_APACHE_ACCESS_LOG22存储过程;
步骤14中,执行SP_HIS_APACHE_ACCESS_LOG3存储过程;
步骤15中,执行SP_HIS_APACHE_ACCESS_LOG41存储过程;
步骤16中,执行SP_HIS_APACHE_ACCESS_LOG42存储过程;
步骤17中,等待各路存储过程执行完成;
步骤18中,执行SP_HIS_APACHE_ACCESS_LOG51存储过程;
步骤19中,执行SP_HIS_APACHE_ACCESS_LOG52存储过程;
步骤20中,等待最慢一个存储过程执行完成;
步骤21中,执行SP_FACT_APACHE_ACCESS_D,SP_UPDATE_APACHE_PV和SP_WAP_PV_CORRECT存储过程计算PV和UV。
优选地,所述的步骤11中,执行SP_HIS_APACHE_ACCESS_LOG存储过程具体为:
删除第n路日志临时表3_n数据和索引(HIS_APACHE_ACCESS_LOG_BUFF3_n),
删除日志临时表4_n(HIS_APACHE_ACCESS_LOG_BUFF4_n),
日志临时表5_n(HIS_APACHE_ACCESS_LOG_BUFF5_n),
日志临时表6_n数据(HIS_APACHE_ACCESS_LOG_BUFF6_n),
插入日志临时表_n入库的记录数(his_apache_access_log_buff_n)到日志记录数汇总临时表(log_INTERFACE_buff),
转储日志临时表_n当天的数据(his_apache_access_log_buff_n)到日志临时表5_n(HIS_APACHE_ACCESS_LOG_BUFF5_n)。
优选地,所述的步骤12中,执行SP_HIS_APACHE_ACCESS_LOG21存储过程具体为:
删除日志临时表1_n数据(HIS_APACHE_ACCESS_LOG_BUFF1_n),
转储日志临时表5_n手机号不为空的记录到日志临时表1_n(HIS_APACHE_ACCESS_LOG_BUFF1_n),
根据日志临时表1_n手机号段匹配省份转储到日志临时表3_n,
删除HIS_APACHE_ACCESS_LOG_BUFF1_n数据,
转储手机号不为空的记录到HIS_APACHE_ACCESS_LOG_BUFF1_n表,
根据手机号段匹配省份转储到HIS_APACHE_ACCESS_LOG_BUFF3_n表。
优选地,所述的步骤13中,执行SP_HIS_APACHE_ACCESS_LOG22存储过程具体为:
删除HIS_APACHE_ACCESS_LOG_BUFF2_n数据,
转储手机号为空的记录到HIS_APACHE_ACCESS_LOG_BUFF2_n表,
根据IP地址匹配省份转储到HIS_APACHE_ACCESS_LOG_BUFF3_n表。
优选地,所述的步骤14中,执行SP_HIS_APACHE_ACCESS_LOG3存储过程具体为:
后3位不为数值的数据,将该数据移到HIS_APACHE_ACCESS_LOG_BUFF3_n表000分区,
执行SUB_SP_HIS_APACHE_ACCESS_LOG存储过程,转储数据到HIS_APACHE_ACCESS_LOG_BUFF6_n表。
优选地,所述的步骤15中,执行SP_HIS_APACHE_ACCESS_LOG41存储过程具体为:
转储404数据到HIS_APACHE_ACCESS_404_LOG_BUFF表。
优选地,所述的步骤16中,执行SP_HIS_APACHE_ACCESS_LOG42存储过程具体为:
转储不包含404的数据到HIS_APACHE_ACCESS_LOG表。
优选地,所述的步骤18中,执行SP_HIS_APACHE_ACCESS_LOG51存储过程具体为:log_interface_buff表中数据合并到LOG_INTERFACE表
优选地,所述的步骤19中,执行SP_HIS_APACHE_ACCESS_LOG52存储过程具体为:
HIS_APACHE_ACCESS_404_LOG_BUFF表中数据合并到HIS_APACHE_ACCESS_404_LOG表。
与现有技术相比,本发明通过并行处理方式,有效的解决了海量日志数据的处理时间问题,同时避免了采用Hadoop、Hive对技术要求,开发维护成本高的问题,为中小型公司降低开发成本提供了解决方案。
附图说明
图1为本发明的简易流程图;
图2为本发明的详细流程图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明的一部分实施例,而不是全部实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都应属于本发明保护的范围。
如图1所示,一种海量日志数据的高效低成本的处理方法,包括以下步骤:并行处理临时表初始化,删除临时数据,并行导入日志文件数据到临时表,并行计算临时表数据,执行数据清洗,合并各路数据,生成最终的日志表数据。
本发明改变原来的单线程顺序导入访问日志到同一张表,改为多线程同步导入n路访问日志到n/2张临时表,并根据n/2张临时表数据分别同步计算各自的Apache访问日志和404日志,然后汇总各路数据到Apache访问日志和404日志表,最后根据汇总后的数据并行技术生成PV,UV等统计表报。
如图2所示,本发明的详细流程图是假设处理16路服务器访问日志,包括16路静态访问日志和16路jsp动态访问日志,实际路数可根据需要调整,只要不超过服务器最大并发处理线程数即可。
a)步骤1部分为清除历史数据,便于重复计算。各表的数据删除多线程同步执行,提高性能。
b)步骤4-9部分为32路访问日志数据(其中16路静态数据,16路动态jsp数据)多线程同步导入的各自的数据库表以提高数据导入的性能。
c)步骤11-16部分为16路访问日志数据(每路数据包含该路的静态数据和动态数据)多线程同步计算,并生成不包含404数据到HIS_APACHE_ACCESS_LOG表,生成log_interface_buff表数据,HIS_APACHE_ACCESS_404_LOG_BUFF表数据。
d)步骤18-19部分多线程同步运行存储过程,生成LOG_INTERFACE表数据和HIS_APACHE_ACCESS_404_LOG表数据。
d)步骤21部分根据前面生成的数据统计PV,UV。
假设处理16路服务器访问日志:
1.新建his_apache_access_404_log_buff表用于存放各路访问日志生成的404数据
2.新建his_apache_access_log_buff_01到his_apache_access_log_buff_16,共16张表用于存放16路静态和动态访问日志。
3.新建his_apache_access_log_buff1_01到his_apache_access_log_buff1_16,共16张表用于存放16路日志处理中间结果
4.新建his_apache_access_log_buff2_02到his_apache_access_log_buff2_16,共16张表用于存放16路日志处理中间结果
5.新建his_apache_access_log_buff3_03到his_apache_access_log_buff3_16,共16张表用于存放16路日志处理中间结果
6.新建his_apache_access_log_buff4_04到his_apache_access_log_buff4_16,共16张表用于存放16路日志处理中间结果
7.新建his_apache_access_log_buff5_05到his_apache_access_log_buff5_16,共16张表用于存放16路日志处理中间结果
8.新建his_apache_access_log_buff6_06到his_apache_access_log_buff6_16,共16张表用于存放16路日志处理中间结果
关键流程图步骤1中,并行删除日志记录数汇总临时表LOG_INTERFACE_BUFF数据、删除各路日志对应的临时表数据、删除日志结果表当天分区表数据、删除404日志临时表数据、删除404日志结果表数据当天的日志数据。
步骤2中,等待最后一个删除完成
步骤3中,记录待处理的访问日志目录
各路日志数据并行处理步骤4-9。
步骤4中,判断当前日志目录是否JSP目录,不是JSP目录执行步骤5,是JSP目录执行步骤6
步骤5中,定义静态日志文件名
步骤6中,定义动态JSP日志文件名
步骤7中,合并前天最后10000条日志,昨天日志和当天的前10000条日志
步骤8中,导入合并后的当前目录日志到各路日志对应的临时表
步骤9中,删除合并后的文件及临时文件
步骤10中,等待最后一路数据导入完成
各路日志数据并行处理步骤11-16
步骤11中,执行SP_HIS_APACHE_ACCESS_LOG存储过程:
删除第n路日志临时表3_n数据和索引(HIS_APACHE_ACCESS_LOG_BUFF3_n),
删除日志临时表4_n(HIS_APACHE_ACCESS_LOG_BUFF4_n),
日志临时表5_n(HIS_APACHE_ACCESS_LOG_BUFF5_n),
日志临时表6_n数据(HIS_APACHE_ACCESS_LOG_BUFF6_n),
插入日志临时表_n入库的记录数(his_apache_access_log_buff_n)到日志记录数汇总临时表(log_INTERFACE_buff),转储日志临时表_n当天的数据(his_apache_access_log_buff_n)到日志临时表5_n(HIS_APACHE_ACCESS_LOG_BUFF5_n);
步骤12中,执行SP_HIS_APACHE_ACCESS_LOG21存储过程:
删除日志临时表1_n数据(HIS_APACHE_ACCESS_LOG_BUFF1_n),
转储日志临时表5_n手机号不为空的记录到日志临时表1_n(HIS_APACHE_ACCESS_LOG_BUFF1_n),
根据日志临时表1_n手机号段匹配省份转储到日志临时表3_n
删除HIS_APACHE_ACCESS_LOG_BUFF1_n数据,
转储手机号不为空的记录到HIS_APACHE_ACCESS_LOG_BUFF1_n表,
根据手机号段匹配省份转储到HIS_APACHE_ACCESS_LOG_BUFF3_n表
步骤13中,执行SP_HIS_APACHE_ACCESS_LOG22存储过程:
删除HIS_APACHE_ACCESS_LOG_BUFF2_n数据,
转储手机号为空的记录到HIS_APACHE_ACCESS_LOG_BUFF2_n表,
根据IP地址匹配省份转储到HIS_APACHE_ACCESS_LOG_BUFF3_n表
步骤14中,执行SP_HIS_APACHE_ACCESS_LOG3存储过程:
后3位不为数值的数据,将该数据移到HIS_APACHE_ACCESS_LOG_BUFF3_n表000分区
执行SUB_SP_HIS_APACHE_ACCESS_LOG存储过程,转储数据到HIS_APACHE_ACCESS_LOG_BUFF6_n表
步骤15中,执行SP_HIS_APACHE_ACCESS_LOG41存储过程:
转储404数据到HIS_APACHE_ACCESS_404_LOG_BUFF表
步骤16中,执行SP_HIS_APACHE_ACCESS_LOG42存储过程:
转储不包含404的数据到HIS_APACHE_ACCESS_LOG表
步骤17中,等待各路存储过程执行完成
并行执行步骤18和19
步骤18中,执行SP_HIS_APACHE_ACCESS_LOG51存储过程:log_interface_buff表中数据合并到LOG_INTERFACE表
步骤19中,执行SP_HIS_APACHE_ACCESS_LOG52存储过程:HIS_APACHE_ACCESS_404_LOG_BUFF表中数据合并到HIS_APACHE_ACCESS_404_LOG表
步骤20中,等待最慢一个存储过程执行完成
步骤21中,执行SP_FACT_APACHE_ACCESS_D,SP_UPDATE_APACHE_PV和SP_WAP_PV_CORRECT存储过程计算PV,UV。
以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到各种等效的修改或替换,这些修改或替换都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以权利要求的保护范围为准。