网站使用Apache服务器,对于请求网站资源的事件被记录到日志中,我们需要基于该日志文件的数据进行实时监控统计,通过读取IP库数据可以得到每个访问IP的所属地域(国内按城市,国外按国家,IP库中没有的按未知处理)。其实,整个流程我们可以通过Flume收集聚合多个子站日志文件数据,并写入到下游的Kafka消息中间件集群中,然后可以直接从Kafka中进行消费,实现实时监控统计,最后结果更新到Redis中去。 为了简单,我们这里只是通过输入的日志文件作为数据源,下游直接通过Apache Beam来进行实时分析处理,结果输出到多个按时间分组的文件中。我们实现的实时监控功能目标,如下所示: 输入事件日志文件,以及IP库文件; 基于日志文件中的事件时间,每间隔5分钟输出一个统计文件,结果文件中包含“地域”和“访问次数”。 下面是文件格式示例。 事件日志文件的格式,示例如下所示: 113.246.155.26 - - [10/Dec/2017:01:03:28 +0800] "GET /wp-content/themes/media-maven/library/images/bg.jpg HTTP/1.1" 200 8113 "http://shiyanjun.cn/archiv
按标签浏览文章: Beam/Crunch
Apache Beam:一个开源的统一的分布式数据处理编程库
Apache Beam 是一个开源的数据处理编程库,由 Google 贡献给 Apache 的项目,前不久刚刚成为 Apache TLP 项目。它提供了一个高级的、统一的编程模型,允许我们通过构建 Pipeline 的方式实现批量、流数据处理,并且构建好的 Pipeline 能够运行在底层不同的执行引擎上。刚刚接触该开源项目时,我的第一感觉就是:在编程 API 的设计上,数据集及其操作的抽象有点类似Apache Crunch(MapReduce Pipeline编程库)项目;而在支持统一数据处理模型上,能够让人想到 Apache Flink 项目。如果深入了解 Apache Beam,你会发现未来 Apache Beam 很可能成为数据处理领域唯一一个能够将不同的数据应用统一起来的编程库。 Apache Beam 架构概览 Apache Beam 目前最新版本为 0.5.0-SNAPSHOT,最新的 Release 版本为 0.4.0,很多特性还在开发中。在网上找到一个由 Andrew Psaltis 在 2016 年 6 月份演讲的《Apache Beam: The Case for Unifying Streaming API’s》,引用了其中一个 Apache Beam 的架构图,如下图所示: 上图中,我们可以看到,Apache Beam 核心的主要有两层: