离线数据分析是一种非实时数据分析,主要是分析日志、用户操作历史或者对已有历史数据分析。本文将以最常见的日志分析作为介绍,其他类似,只是数据收集方式可能不一样。
数据来源主要依赖于分析系统服务于哪些业务。如,需要分析用户购物习惯或者分析各个区域热销商品,则需要依赖于购物网站的操作日志或者销售日志。而如果是分析各个地区某一时段通话、上网高峰,则数据来源则是运营商监控系统等。
一般情况,数据来源分为一下两类:
- 互联网行业:网站、app、交易系统等
- 传统行业:电信、上网、电话、发短信等
无论是传统行业还是互联网行业,我们执行的每一个动作,网站(app)都会与后台服务器进行交互,短信、电话等也会与运营商基站、服务器进行交互。所以,我们就可以在服务器端完成日志记录。
后台服务器分类(传统bs或者cs服务,包括app):
- 非集群等小型项目:Tomcat、Jetty等通过配置可以将log记录到指定目录。也可以在操作业务中实现日志记录功能。
- 集群等高并发应用:Nginx,apache等,一般是通过Nginx等配置记录session等日志。当然最终服务也是具体的tomcat等,也可以在tomcat以及业务中记录日志。
服务器将日志写到固定目录中,可能是一个也可能是多个文件,而且对于集群一般都是多态服务器,所以需要将多份日志进行整理。我们可以通过一个日志转移工具以及一个定时任务完成整理合并。该步骤主要是将当天所有日志数据采集进行合并处理,最终整理为一份日志,以便后续传输。
日志转移工具可以用python,java等实现。
日志整理后,就需要专门的收集工具,将其上传到HDFS或者其他文件系统,统一管理,并便于后续MapReduce或者Spark等进行分析。flume就是比较流程的日志收集工具,电商用户行为分析大数据平台相关系列6-flume安装中已经将flume配置完成,通过实时监控/usr/local/logs目录,如果其中产生新文件,然后flume会将新文件上传到对应的HDFS集群。
大数据分析的日志信息一般都要保存到分布式文件系统,如HDFS等。具体原因如下:
- 大型应用生成的日志量交大,可能一个大型网站每天日质量将达到几百G或者1T,一般单文件存储很难满足这种类型的大文件量存储。
- 分布式文件系统容易扩充容量,而且可以做到近似无感知扩容。
- 分布式文件系统更安全,具有很好的容灾能力。分布式文件系统每一个文件都具有多份备份,且至少有一个备份远离当前机架或者机房。
- 分布式文件系统可以很好的支持各种数据仓库或者分布式计算框架。如hive或者spark,mapreduce。
flume等收集工具收集的日志信息可能有些不符合预期,我们称之为脏数据,清洗的主要目的就是过滤掉这部分脏数据,在HDFS上保存一份经过清洗的数据。
一般是自己开发MapReduce作业,并且使用定时任务来调度。也可以使用Oozie来进行定时调度。
将清洗后结果写入到HDFS的另外一个文件
HDFS数据清洗后,需要导入到Hive的某个表中,可以是动态分区或者使用Hive分区表,每个分区放一天数据。
通常来说,数据分析系统会针对Hive中数据进行分析和开发。这也就意味着Spark的数据来源是Hive中的某些表。根据这些表,我们可以开发特殊的,符合自己业务的大数据平台,并通过平台服务数据分析师、管理人员等。
实时数据分析其实应该叫做类实时数据分析,因为暂时还不能将系统产生日志信息交由数据分析系统分析,还是需要将日志信息收集到数据分析平台,然后进行分析。只不过收集频率不再是一天,而是以分钟作为单位收集日志。
实时数据分析数据来源与离线日志分析数据来源基本相同。但是,非常重要的一点,就是埋点。也就是说,在网站/app的哪个页面的哪些操作发生时,前端的代码(网站,JavaScript;app,android/IOS),就通过网络请求,(Ajax;socket),向后端的服务器发送指定格式的日志数据。
实时数据分析服务端写日志与连线分析相同,都是Nginx或者Tomcat等写日志信息。
实时分析系统日志传输有两条同时并行路径:
- 同离线日志分析,定期将文件保存到HDFS进行清洗、分区,以便后续连线分析。
- 使用flume以很短的时间片收集日志信息,如每隔1分钟收集一次,并将收集内容写入Kafka等消息队列,以供实时分析。
- 可以在业务中通过API将日志信息直接写入flume,由flume写入后续环节。
实时数据一般都是写入到分布式消息队列中,如Kafka。实时数据、日志实时写入到消息队列,后端分析程序可以从消息队列中获取具体分析数据进行分析。
大数据实时计算系统,比如说用Storm、Spark Streaming开发的,可以实时的从Kafka中拉取数据,然后对实时的数据进行处理和计算,这里可以封装大量复杂的业务逻辑,甚至调用复杂的机器学习、数据挖掘、智能推荐的算法,然后实现实时的车辆调度、实时推荐。
电商用户行为分析大数据平台系列已发布笔记列表