Sohu-smc 数据处理平台基础架构图
如图,左侧是整个大数据处理流程中数据的流向。其中绿色部分是日常工作的重点,黑色部分推荐组做,灰色部分相对固定。
数据流程及说明:
1:源数据:
目前可能的数据来源,主要是一:nginx前端服务器日志(包括业务日志,和统计接口日志。 日志可以按接口做简单划分);二:上游应用服务器日志(通过scribe log集中获取分布式日志)。三:数据库日志。(因为用户创建激活的复杂性,目前主要是用作用户新增、激活的计算。)
2:数据源集成
数据源集成主要是指各种数据采集工具,将数据从各个源采集到数据缓存中心(kafka),目前主要是javanio来实现。部分源数据没有集成到数据缓存中心,直接etl入库到hadoop。
3:数据分拣
这个过程是基于发布-订阅的消息缓存(kafka)基础上来做的,最初的数据源(topic)经过很多个分拣节点进行数据格式化、数据分类过滤,最终生成多个可订阅的数据源(topic),topic的粒度可以根据数据分析的需求调整,进行拆分和组合。分拣后的数据源(各topic)有两种去向:一:供实时计算系统消费(主要是一些在线推荐,用户行为分析等);二:生成按时间分片的文件,入库到hadoop进行离线计算。
4:数据存储
数据存储主要是分拣后的数据源生成的按时间分片的文件, 基于性能的考虑,初始的文件片的数据可能会很粗糙,需要通过一些特定etl工具对数据进行加工生成特定格式(hive数据表)的最终文件,最终文件会定时的(crontab分/小时/天)load到hadoop分布式文件系统,并且数据支持hive的分布式计算任务。
5:数据分布式计算
源数据入库到hadoop集群中后(hive表的结构化数据),会有很多离线的计算任务,对源数据进行map-reduce分布式计算(基本都是hive,presto进行的封装)生成可以供前端展示的结果数据,结果数据按时间类型-时间值-数据类型的分区(如: partition (time_type=‘day’, time_value=‘20141021’, query_type=‘user_con’))进行组织存到hive表中。
6:数据预加载
结果数据会被预加载到内存(分布式)中,这样灵活支持不同前端的数据需求。
7:数据展示
目前数据展示主要有2中:数据平台web、报表邮件、第三方应用。
目前基础架构中的问题:
1:统计接口目前已经有所规范,不过细节上的可扩展性还需要推敲。Sdk化还没有做。
2:数据源分拣不够细,分拣的流程还需要明确,分拣节点部署还需要统一理一理,现在集群20个节点都可以拿来做分拣节点。
3:离线文件数据etl入集群的 脚本也需要规范,需要有个统一写法,另外入集群的脚本需要git管理起来,脚本也需要能过复用。
4:集群数据结构的设计在明确一次,主要是源表、结果表。
5:presto、hive等分布式计算,以及数据预加载的一些系统也需要了解下,展示平台web也大概介绍下。大家都多学习些。