我们首先来探讨一个典型的互联网大数据平台的架构。该架构可以分为三个主要部分:数据采集、数据处理、以及数据输入与展现。
数据采集是指将应用程序产生的数据和日志同步到大数据系统中。因为数据源不同,数据同步系统实际上是由多个相关系统组合而成。例如,数据库同步通常采用Sqoop,日志同步可以选择Flume。采集的数据经过格式化和转换后,通过Kafka等消息队列进行传输。
数据质量因数据源的不同而有所差异。数据库中的数据可以直接导入大数据系统,而日志和爬虫产生的数据则需要大量的清洗和转换才能有效利用。
数据处理是大数据存储与计算的核心部分。数据同步系统导入的数据存储在HDFS中,MapReduce、Hive、Spark等计算任务从HDFS读取数据进行计算,并将结果写回HDFS。
MapReduce、Hive、Spark等计算称为离线计算,HDFS存储的数据被称为离线数据。在大数据系统中,离线计算通常针对整体数据进行处理,如分析历史订单数据以挖掘商品关联性,这类计算通常需要较长的时间。
除了离线计算,还有实时计算的需求。例如,电商平台需要实时统计每秒产生的订单数以进行监控和营销。这种实时计算通常使用Storm或Spark Streaming等流式处理引擎,在秒级甚至毫秒级时间内完成计算。
大数据计算的结果仍存储在HDFS中,但应用程序无法直接访问HDFS中的数据,因此需要将数据导出到数据库中。数据同步导出相对简单,计算产生的数据通常较为规范,稍作处理即可通过Sqoop等工具导出到数据库。
此时,应用程序可以直接访问数据库中的数据,实时展示给用户。此外,大数据还需要为运营和决策层提供各种统计报告,这些数据同样写入数据库,并由后台系统访问。许多运营和管理人员每天上班后,都会登录后台系统查看前一天的数据报表,以评估业务状态。
任务调度管理系统负责协调不同数据的同步时间,以及合理调度MapReduce、Spark等任务,以优化资源利用率,避免等待时间过长,同时确保重要任务可以尽快执行。
Lambda架构由Twitter工程师南森·马茨提出,旨在构建大规模分布式数据处理系统。Lambda架构包含三层:批处理层、速度处理层和服务层。
批处理层:存储和管理主数据集(不可变的数据集)及预先计算好的视图。它通过处理所有历史数据来确保数据准确性,可以修复错误并更新现有数据视图。
速度处理层:实时处理新数据,提供最新数据的实时视图,尽管不如批处理层的数据准确,但几乎在数据到达后立刻可用。
服务层:存储和响应查询,结合批处理层和速度处理层的结果。
Lambda架构常用于推荐系统,如广告投放预测。通过使用Alternating Least Squares(ALS)算法或协同过滤算法,可以得出与用户兴趣相符的广告类型。
尽管Lambda架构非常灵活,适用于多种场景,但它也有维护复杂的问题。需要维护两个复杂的分布式系统,并确保它们生成一致的结果。这使得Lambda架构在实际操作中较为复杂。
Kappa架构由LinkedIn的前首席工程师杰伊·克雷普斯提出,旨在改进Lambda架构。Kappa架构保留了速度处理层,取消了批处理层,通过Apache Kafka等流处理平台实现数据的永久保存和历史数据的重新处理。
Kappa架构的主要步骤包括: 1. 部署Apache Kafka并设置数据日志保留期。 2. 当需要改进逻辑算法时,重新启动Apache Kafka作业实例,处理历史数据。 3. 当新数据视图处理进度赶上旧数据视图时,切换到新数据视图。 4. 停止旧版本作业实例并删除旧数据视图。
Kappa架构的优势在于简化了维护工作,但也存在数据更新错误的风险,且不适用于批处理和流处理逻辑不同的场景。
Lambda架构和Kappa架构各有优劣,应根据实际需求选择合适的架构。Lambda架构适合需要高准确性的场景,而Kappa架构更适合实时性要求较高的场景。