论文部分内容阅读
摘要: 随着大数据时代的来临,网络数据呈现爆炸式增长,IDC数据表明,全球企业数据正以62%的速度逐年增长,大量数据当中隐藏着巨大的商业价值,引起了企业的广泛关注。然而,大数据给数据的同步、存储、和数据统计分析带来了一定的问题和困难。本文旨在实现基于大数据技术的日志统计分析系统,解决了现有的工具逐渐无法有效的处理大量数据的问题。 本文在对此系统进行需求分析的基础上,设计了以多个分布式集群为基础,数据源层、存储层、计算层相互融合的体系结构,设计并实现了日志数据转码、日志传输、自动识别新文件的产生、日志存储、数据查询的功能。日志数据转码对于GBK格式编码的日志进行格式转换;日志传输提供数据从不同终端到储存系统的数据收集、聚合和移动,以便模拟生产环境中数据实时产生的过程;自动识别新文件的产生,不同模块之间完成通信加载数据功能。本文综合使用了大数据生态圈的各种开源技术,包括Hadoop、Flume NG、Kfaka、Sqoop、Hive、MySQL。从日志数据的收集同步,到日志的存储和计算分析,到最终分析结果的查询,涵盖了使用大数据技术进行日志统计分析的典型流程。本文使用开发语言Java和shell脚本语言,开发工具为IntelliJ IDEA,VIM。在多台CentOS6.5机器之上搭建集群,进行分布式存储和计算。用户通过统计分析系统进行日志同步、传输、任务提交和调度、结果查询等操作。
关键词:大数据;网络数据;日志统计分析;流程自动化
中图分类号:TP311 文献标志码:A 文章编号:1009-3044(2016)34-0009-03
1 概述
搜索引擎的日志文件是由使用者的搜索行为产生的,是对用户在终端行为的一种记录。通过对日志文件的分析可以获得很多有价值的数据,可以对不同用户的个性进行更加全面的分析,实现更加个性化的推荐方案。随着时间的推移,网站的用户访问量快速增长,搜索引擎产生的日志数据快速增长。传统的日志分析方式已经无法满足大数据量日志分析的需求,使用大数据技术可以为日志分析设计一整套自动化流程包括从数据采集,传输,存储,计算和查询,这种方式可以使得数据的处理过程更加高效。
2 集群概述
本系统为了模拟真实线上搜索日志产生的情况,使用脚本语言模拟连续生成的日志数据,通过Flume集群进行实时的采集。Flume采集到数据之后,使用Kafka集群对数据进行消费,将数据先存入到HDFS文件系统中。搭建Hive集群使用HQL语句对数据进行过滤分析。使用Sqoop工具把Hive中的数据导入到MySQL提供实时查询。
目标日志是由搜狗实验室提供的用户查询日志。下面是访问日志中一条典型记录:
00:00:01 0014362172758659586 [明星合成] 64 21 link.44box.com/
這行内容由6项构成:1)访问时间。2)用户ID。3)查询词。4)该URL在返回结果中的排名。5)用户点击的顺序号。6)用户点击的URL。其中,用户ID是根据用户使用浏览器访问搜索引擎时的Cookie信息自动赋值,即同一次使用浏览器输入的不同查询对应同一个用户ID。
3 系统的设计与实现
3.1 系统的基本目标
利用分布式的架构对模拟生产环境下实时产生的用户查询日志进行采集,传输和存储,按查询过滤条件对日志数据进行分析。
3.2 集群部署
3.2.1 Hadoop部署
图1介绍了Hadoop集群部署的架构,包含一个主控节点namenode和两个从节点datanode。namenode主要职责是跟踪文件如何被分割成文件块、文件块又被哪些节点存储、以及分布式文件系统的整体运行状态是否正常等工作。ResourceManager负责集群中所有资源的统一管理和分配,它接收来自各个节点(NodeManager)的资源汇报信息,并把这些信息按照一定的策略分配给各个应用程序。SecondaryNamenode定时查询namenode节点中集群启动时对文件系统的改动序列,并保持同步;然后将得到的信息更新到namenode节点文件系统快照文件中。Nodemanager管理Hadoop集群中单个计算节点,包括与ResourceManager保持通信,监督任务的生命周期管理,监控每个任务的资源使用,追踪节点健康状况,管理日志和不同应用程序用到的附属服务。
3.2.2 Flume部署
Flume本身不限制Agent中Source、Channel和Sink的数量。因此Flume Source可以接收事件,并可以通过配置将事件复制到多个目的地。如图2所示,可以将事件发送到多个Kafka终端,进行分布式的处理过程。
3.2.3 Kafka部署
图3介绍了Kafka集群部署的基本架构,Producer称为消息的发送者,而消息接收者称为Consumer。Kafka集群由多个实例组成,每个节点称为broker,对消息保存时根据Topic进行归类,为了加快读取速度,多个comsumer划分为一个组,并行消费一个topic。Kafka集群中通过Zookeeper管理集群配置,选举leader,以及在Consumer Group发生变化时进行rebalance。
3.3 日志数据的HDFS存储
图4展示了HDFS的工作原理。当用户查询日志进入集群时,HDFS Client负责切分文件,与NameNode交互,获取文件位置信息;与DataNode交互,读取和写入数据。NameNode是m主节点,管理HDFS的名称空间和数据块映射信息,配置副本策略,处理客户端请求。Datanode是从节点,存储实际的数据,汇报存储信息给NmaeNode。Secodary NameNode辅助NameNode分担其工作量;定期合并fsimage和fsedits,推送给NameNode;紧急情况下,可辅助恢复NameNode。 3.4 日志采集与传输
3.4.1 模拟产生日志
通过shell脚本模拟生产环境下日志产生过程,实现原理是把已经存在的搜狗用户查询日志内容重定向到另一个文件中,利用时间字符串定义初始文件的名字,将日志按照一定的时间间隔进行传输。
3.4.2 文件到Kafka
文件传输到Kafka的过程使用Flume实现。Flume的配置文件中使用SpoolDirectorySource实现,定义type为spooldir,指定数据输入路径spoolDir,实现文件输入。本文使用的搜狗用户查询日志采用GBK编码格式,通过修改SpoolDirectorySourceConfigurationConstants参数,定义InputCharset配置项为GBK,实现GBK编码格式的文件输入。Flume的source端输出使用OutputCharset配置项定义文件输出格式。从Flumed的Source传输到Channel时,为了使日志按时间格式显示文件名,本文通过将文件名信息传递到Kafka由其依据名称生成目标目录的方式实现;利用Flume的event中的header传递文件名信息时,定义键值目录结构为a/b/c;相关的配置项为fileHeader和fileHeaderKey;定义fileHeaderKey的值为Key。最终实现带着目录结构的数据文件缓存到Kafka。
3.4.3 Kafka到hdfs
Kafka到hdfs数据的持久化,本文通过自定义Kafka Consumer来实现。通过获取消息体中每条消息的Key,获取日期字符串;然后将数据存入相应位置。文件传输完毕之后重命名为.Done结尾,作为文件传输完毕的识别标志。定义输出流时开启独立的线程将内存中的数据刷写到hdfs,减少数据的丢失实现数据在hdfs的固化。
3.4.4 Hdfs到Hive
hdfs数据传入到Hive。实现方法是定义输入文件路径和指定hive table两个参数,取出输入目录下结尾是.Done的文件,解析出时间参数加载到Hive。
3.5 日志分析系统流程
图5展示了整个日志分析系统流程。日志采集以及传输使用Flume Kafka的方式。Flume设计思想是是数据的多样性、数据来源的多樣性、数据流向的多样性;Kafka设计目标是高吞吐量、高负载(topic下可以有多个partition);所以在日志分析系统使用Flume Kafka架构可以使系统更加高效,保证高性能。存储使用HDFS实现,实现分布式存储目的;查询使用Hive中的HQL语句,HQL语句查询过程是以mapreduce的方式实现。Sqoop具有数据传递的功能,利用Sqoop的特性将Hive中的数据导入MySQL实现SQL语句的实时查询。
4 结果分析
图6展示了数据在各个阶段的情况。下图分为六个部分,第一部分展示了模拟实时产生172万条搜索日志数据进入系统的情况;第二部分展示了日志数据通过Flume收集进入Kafka;第三部分展示了Kafka开始消费日志数据,并且将数据加载到hdfs;第四部分展示了数据从hdfs加载到Hive;第五部分展示了日志数据文件加载到hdfs之后存储的目录结构;第六部分展示了使用HQL语句完成查询的功能。整个系统启动之后172万条实时产生的日志数据的采集、传输、进入存储系统等过程自动开始运行,对于大量数据的采集、传输、与存储进行了分布式高效的处理,达到了本文研究的目的。
5 小结
大数据技术受到全世界开源社区的热烈支持,发展的越来越成熟,在未来的优势越来越明显。用大数据技术能很方便地在廉价机器上实现分布式数据处理架构,多个系统之间可以很好地协同工作,体现了系统协作与互联、经济性、性能和可伸缩性、容错性等很多方面的优点。以本文实例为基础可以进一步进行拓展,对大数据任务进行更深入和详细的分析和探索,为各个领域的大数据处理提供参考。
参考文献:
[1] 陈森博,陈张杰.基于Hadoop集群的日志分析系统的设计与实现[J].电脑知识与技术,2013,9(34): 7647-7650.
[2] Tom White.Hadoop权威指南[M].北京:清华大学出版社,2015.
[3] Hari Shreedharan.Flume构建高可用、可扩展的海量日志采集系统[M].北京:电子工业出版社,2015.
[4] Edward Capriolo,Dean Wampler,Jason Rutherglen .Hive编程指南[M].北京:人民邮电出版社,2013.
[5] Jonathan R Owens,Jon Lentz,Brian Femiano .Hadoop实战手册[M].北京:人民邮电出版社2014.
关键词:大数据;网络数据;日志统计分析;流程自动化
中图分类号:TP311 文献标志码:A 文章编号:1009-3044(2016)34-0009-03
1 概述
搜索引擎的日志文件是由使用者的搜索行为产生的,是对用户在终端行为的一种记录。通过对日志文件的分析可以获得很多有价值的数据,可以对不同用户的个性进行更加全面的分析,实现更加个性化的推荐方案。随着时间的推移,网站的用户访问量快速增长,搜索引擎产生的日志数据快速增长。传统的日志分析方式已经无法满足大数据量日志分析的需求,使用大数据技术可以为日志分析设计一整套自动化流程包括从数据采集,传输,存储,计算和查询,这种方式可以使得数据的处理过程更加高效。
2 集群概述
本系统为了模拟真实线上搜索日志产生的情况,使用脚本语言模拟连续生成的日志数据,通过Flume集群进行实时的采集。Flume采集到数据之后,使用Kafka集群对数据进行消费,将数据先存入到HDFS文件系统中。搭建Hive集群使用HQL语句对数据进行过滤分析。使用Sqoop工具把Hive中的数据导入到MySQL提供实时查询。
目标日志是由搜狗实验室提供的用户查询日志。下面是访问日志中一条典型记录:
00:00:01 0014362172758659586 [明星合成] 64 21 link.44box.com/
這行内容由6项构成:1)访问时间。2)用户ID。3)查询词。4)该URL在返回结果中的排名。5)用户点击的顺序号。6)用户点击的URL。其中,用户ID是根据用户使用浏览器访问搜索引擎时的Cookie信息自动赋值,即同一次使用浏览器输入的不同查询对应同一个用户ID。
3 系统的设计与实现
3.1 系统的基本目标
利用分布式的架构对模拟生产环境下实时产生的用户查询日志进行采集,传输和存储,按查询过滤条件对日志数据进行分析。
3.2 集群部署
3.2.1 Hadoop部署
图1介绍了Hadoop集群部署的架构,包含一个主控节点namenode和两个从节点datanode。namenode主要职责是跟踪文件如何被分割成文件块、文件块又被哪些节点存储、以及分布式文件系统的整体运行状态是否正常等工作。ResourceManager负责集群中所有资源的统一管理和分配,它接收来自各个节点(NodeManager)的资源汇报信息,并把这些信息按照一定的策略分配给各个应用程序。SecondaryNamenode定时查询namenode节点中集群启动时对文件系统的改动序列,并保持同步;然后将得到的信息更新到namenode节点文件系统快照文件中。Nodemanager管理Hadoop集群中单个计算节点,包括与ResourceManager保持通信,监督任务的生命周期管理,监控每个任务的资源使用,追踪节点健康状况,管理日志和不同应用程序用到的附属服务。
3.2.2 Flume部署
Flume本身不限制Agent中Source、Channel和Sink的数量。因此Flume Source可以接收事件,并可以通过配置将事件复制到多个目的地。如图2所示,可以将事件发送到多个Kafka终端,进行分布式的处理过程。
3.2.3 Kafka部署
图3介绍了Kafka集群部署的基本架构,Producer称为消息的发送者,而消息接收者称为Consumer。Kafka集群由多个实例组成,每个节点称为broker,对消息保存时根据Topic进行归类,为了加快读取速度,多个comsumer划分为一个组,并行消费一个topic。Kafka集群中通过Zookeeper管理集群配置,选举leader,以及在Consumer Group发生变化时进行rebalance。
3.3 日志数据的HDFS存储
图4展示了HDFS的工作原理。当用户查询日志进入集群时,HDFS Client负责切分文件,与NameNode交互,获取文件位置信息;与DataNode交互,读取和写入数据。NameNode是m主节点,管理HDFS的名称空间和数据块映射信息,配置副本策略,处理客户端请求。Datanode是从节点,存储实际的数据,汇报存储信息给NmaeNode。Secodary NameNode辅助NameNode分担其工作量;定期合并fsimage和fsedits,推送给NameNode;紧急情况下,可辅助恢复NameNode。 3.4 日志采集与传输
3.4.1 模拟产生日志
通过shell脚本模拟生产环境下日志产生过程,实现原理是把已经存在的搜狗用户查询日志内容重定向到另一个文件中,利用时间字符串定义初始文件的名字,将日志按照一定的时间间隔进行传输。
3.4.2 文件到Kafka
文件传输到Kafka的过程使用Flume实现。Flume的配置文件中使用SpoolDirectorySource实现,定义type为spooldir,指定数据输入路径spoolDir,实现文件输入。本文使用的搜狗用户查询日志采用GBK编码格式,通过修改SpoolDirectorySourceConfigurationConstants参数,定义InputCharset配置项为GBK,实现GBK编码格式的文件输入。Flume的source端输出使用OutputCharset配置项定义文件输出格式。从Flumed的Source传输到Channel时,为了使日志按时间格式显示文件名,本文通过将文件名信息传递到Kafka由其依据名称生成目标目录的方式实现;利用Flume的event中的header传递文件名信息时,定义键值目录结构为a/b/c;相关的配置项为fileHeader和fileHeaderKey;定义fileHeaderKey的值为Key。最终实现带着目录结构的数据文件缓存到Kafka。
3.4.3 Kafka到hdfs
Kafka到hdfs数据的持久化,本文通过自定义Kafka Consumer来实现。通过获取消息体中每条消息的Key,获取日期字符串;然后将数据存入相应位置。文件传输完毕之后重命名为.Done结尾,作为文件传输完毕的识别标志。定义输出流时开启独立的线程将内存中的数据刷写到hdfs,减少数据的丢失实现数据在hdfs的固化。
3.4.4 Hdfs到Hive
hdfs数据传入到Hive。实现方法是定义输入文件路径和指定hive table两个参数,取出输入目录下结尾是.Done的文件,解析出时间参数加载到Hive。
3.5 日志分析系统流程
图5展示了整个日志分析系统流程。日志采集以及传输使用Flume Kafka的方式。Flume设计思想是是数据的多样性、数据来源的多樣性、数据流向的多样性;Kafka设计目标是高吞吐量、高负载(topic下可以有多个partition);所以在日志分析系统使用Flume Kafka架构可以使系统更加高效,保证高性能。存储使用HDFS实现,实现分布式存储目的;查询使用Hive中的HQL语句,HQL语句查询过程是以mapreduce的方式实现。Sqoop具有数据传递的功能,利用Sqoop的特性将Hive中的数据导入MySQL实现SQL语句的实时查询。
4 结果分析
图6展示了数据在各个阶段的情况。下图分为六个部分,第一部分展示了模拟实时产生172万条搜索日志数据进入系统的情况;第二部分展示了日志数据通过Flume收集进入Kafka;第三部分展示了Kafka开始消费日志数据,并且将数据加载到hdfs;第四部分展示了数据从hdfs加载到Hive;第五部分展示了日志数据文件加载到hdfs之后存储的目录结构;第六部分展示了使用HQL语句完成查询的功能。整个系统启动之后172万条实时产生的日志数据的采集、传输、进入存储系统等过程自动开始运行,对于大量数据的采集、传输、与存储进行了分布式高效的处理,达到了本文研究的目的。
5 小结
大数据技术受到全世界开源社区的热烈支持,发展的越来越成熟,在未来的优势越来越明显。用大数据技术能很方便地在廉价机器上实现分布式数据处理架构,多个系统之间可以很好地协同工作,体现了系统协作与互联、经济性、性能和可伸缩性、容错性等很多方面的优点。以本文实例为基础可以进一步进行拓展,对大数据任务进行更深入和详细的分析和探索,为各个领域的大数据处理提供参考。
参考文献:
[1] 陈森博,陈张杰.基于Hadoop集群的日志分析系统的设计与实现[J].电脑知识与技术,2013,9(34): 7647-7650.
[2] Tom White.Hadoop权威指南[M].北京:清华大学出版社,2015.
[3] Hari Shreedharan.Flume构建高可用、可扩展的海量日志采集系统[M].北京:电子工业出版社,2015.
[4] Edward Capriolo,Dean Wampler,Jason Rutherglen .Hive编程指南[M].北京:人民邮电出版社,2013.
[5] Jonathan R Owens,Jon Lentz,Brian Femiano .Hadoop实战手册[M].北京:人民邮电出版社2014.