本文不依托于任何一家大厂的平台架构,用通俗的语言介绍一下大数据平台的整体架构。
总体来说,大数据平台可以分为四个部分:
数据采集、数据处理、数据输出和任务调度管理。
数据采集
按照数据源可以分为如下4点:
1. 数据库数据
目前比较常用的数据库导入工具有Sqoop和Canal
2. 日志数据
日志是大数据平台重要数据来源之一,应用程序日志一方面记录各种程序执行状况,一方面记录用户的操作轨迹。Flume 是日志收集常用的工具。
3. 前端程序埋点
所谓前端埋点,是应用前端为了进行数据统计和分析采集数据。
4. 爬虫系统
通过网络爬虫获取外部数据用于行业数据支撑,管理决策等。
数据处理
分为离线计算和实时计算两类:
1. 离线计算
由MapReduce、Hive、Spark 等进行的计算处理。
2. 实时计算
由Storm、SparkSteaming 等流式大数据引擎完成,可以在秒级甚至毫秒级时间内完成计算。
数据输出
大数据处理与计算产生的数据写入到 HDFS 中,但应用程序不会到 HDFS 中读取数据,所以必须要将 HDFS 中的数据导出到数据库中。
除了给用户提供数据,大数据平台还需要在一些后台系统中给运营和决策层提供各种统计数据,这些数据也写入数据库,被相应的后台系统访问。
任务调度管理
将上面三个部分有效整合和运转起来的是任务调度管理系统,它的主要作用是:
(1)合理调度各种 MapReduce、Spark 任务使资源利用最合理; (2)尽快执行临时的重要任务; (3)对作业提交、进度跟踪、数据查看等功能。
简单的大数据平台任务调度管理系统其实就是一个类似 Crontab 的定时任务系统,按预设时间启动不同的大数据作业脚本。复杂的大数据平台任务调度还要考虑不同作业之间的依赖关系。
开源的大数据调度系统有 Oozie,也可以在此基础进行扩展。