随着大数据技术的日益成熟,我们看到了大数据生态系统中涌现出的各种工具、技术和平台,其中包括用于处理所有形式数据的存储、处理、分析和可视化的解决方案。这些大数据技术框架可以根据其功能和用途进行分类,例如数据存储、数据计算分析、数据可视化等。
图1-2描述了一个典型的大数据分层模型,包括数据集成与传输层、数据存储与计算层、数据开发、数据服务以及数据消费层,每个层次涉及的一些常用技术。这个模型可以帮助我们理解大数据技术的组成部分,以及如何选择和使用这些技术来构建大数据解决方案。
技术框架简介
在数据集成传输层,通常使用到的技术有Sqoop、Kafka和Apache Flume:
- Sqoop主要用于Hadoop、Hive和传统数据库(例如MySql)之间的数据传输。它能够将关系型数据库中的数据导入到Hadoop的HDFS中,同时也支持将HDFS的数据导入到关系型数据库中。Sqoop已经于2021年6月被apache基金董事会宣布退役,移动到Attic中,Apache Attic依旧会提供代码库的下载;但是不会再修复任何的bug,发布新版本了,并且也不会再重启社区。但是目前仍然有部分公司在使用,但是由于正常场景都是从关系型数据库如MySQL采集数据到HDFS,而反向同步较少,所以现在一般使用JDBC也能够替代其部分功能,实现关系型数据库到数据仓库的数据同步。
- Kafka则是一个高吞吐量的分布式发布订阅消息系统。它通常结合Flink CDC等系统,将数据库等系统的实时数据变更以流式实时方式同步到各个目标数据库系统中。
- Apache Flume是一个分布式、可靠且高可用的日志收集服务,专门用于有效地收集、整合和传输大量的日志数据。Flume的工作核心在于从数据源(Source)收集数据,然后将这些数据传输到指定的目的地(Sink,如HDFS、Kafka、ElasticSearch)。
在数据存储计算层,各种技术框架眼花缭乱,这块也是一个大数据系统的核心所在,决定了一个大数据体系能够支撑的数据体量、性能、适用场景等,后续也会重点介绍这个层面的一些技术:
- HDFS(Hadoop Distributed File System)是Apache Hadoop项目中的一个分布式文件系统。它被设计为适应大规模数据集的处理,具有良好的容错性、高并发性和高吞吐量,并且可以在廉价的硬件上运行,可以存储和处理PB级别的数据集,例如在数据挖掘和机器学习中处理大量的输入数,可以作为其他存储计算引擎或者分布式数据库的(如HBase、Hudi等)的存储层。
- Hive是Apache Hadoop生态系统中的一个数据仓库工具,它可以将结构化的数据文件映射为一个数据库表,并提供类SQL查询功能(HiveQL)。它的设计初衷是让拥有SQL技能,但是不熟悉编程语言的人,也能进行大规模数据的分析(不需要写MapReduce代码)。
- HBase(Hadoop Database)是一个分布式的、面向列存储的数据库,解决了HDFS无法满足实时数据的随机存取的问题,是Google Bigtable(“Bigtable: A Distributed Storage System for Structured Data”)的实现,。
- Hudi(Hadoop Upserts delete and Incrementals)发音为“hoodie”,是下一代流式数据湖平台。Apache Hudi直接将数据仓库和数据库的核心功能引入数据湖中,Hudi通过分布式文件系统(HDFS或者对象存储如S3)来采集(Ingests)、管理(Manages)大型分析型数据集。通过Hudi,可以在数据湖中实现类似数据仓库的结构化数据管理和高性能查询。Hudi提供了与主流查询引擎(如Apache Spark、Flink、Presto、Hive等)的集成能力,以支持快速、高效的数据处理和分析。
- Kudu(条纹羚或捻角羚,一种非洲大羚羊,寓意灵活快速)作为一种新兴的存储引擎,提供了一种平衡实时随机读写和OLAP实时分析的解决方案。Kudu的定位是”Fast Analytics on Fast Data”,它能够同时支持随机读写和批量数据分析的需求。Kudu可以与上层的计算框架(如Impala、Spark等)紧密结合,提供高速的实时数据访问和分析能力。因此,Kudu被称为HDFS的原生存储替代方案,避免了数据同步和维护多个存储引擎的成本和复杂性。
- ClickHouse是由俄罗斯Yandex公司开发的开源列式数据库管理系统,主要用于联机分析处理(OLAP)。其主要特点是速度快,支持高并发查询,原生支持分布式处理,并且支持大部分的SQL标准,具备实时数据查询和插入的能力。ClickHouse采用列式存储、向量化执行和索引加速等技术,使其能够在大规模数据集上提供快速查询。ClickHouse广泛应用于实时数据分析、大数据处理和时序数据处理等场景,例如网站访问量统计、日志分析、用户行为分析、股票价格分析和气象数据分析等。需要注意的是,ClickHouse是面向分析的数据库,因此并不适合用于高并发的在线事务处理(OLTP)。
- Starrocks(原百度 Palo,开源版名为Apache Doris,Starrocks为Doris的商业版)是百度开源的MPP数据库,是一款高性能分析型数据仓库,使用向量化、MPP 架构、CBO、智能物化视图、可实时更新的列式存储引擎等技术实现多维、实时、高并发的数据分析,相比Clickhouse,StarRocks在处理实时的小范围查询时性能更优,但在处理大数据量的批量查询时性能稍逊,所以ClickHouse更适合用于大数据量的离线分析,例如日志分析、用户行为分析等。而StarRocks更适合用于实时数据分析和实时业务决策支持。
- InfluxDB是一个开源的时序数据库,用于处理大量的时间序列数,InfluxDB在DB-Engines的数据库月度流行度排名榜上常年高居第一,InfluxDB在处理大量的时间序列数据以及实时分析方面具有明显的优势。常用于物联网数据上报、系统性能监控、网络监控、实时业务指标分析等场景。但是不适用于大规模的离线数据分析,例如大数据量的日志分析、用户行为分析等。
- Elasticsearch简称ES,是一个开源的搜索和分析引擎,基于Apache Lucene构建,并设计为水平可扩展和实时可用。它支持全文搜索,并提供高度相关的搜索结果。相比于其他的搜索和分析引擎,Elasticsearch在处理实时搜索和分析时性能优异,特别适合需要快速返回相关结果的全文搜索场景。ES常用于网站的搜索、结合使用ELK(Elasticsearch + Logstash + Kibana)进行日志收集、搜索和分析等。
- YARN(Yet Another Resource Negotiator)作为一个独立的组件在Hadoop 2.0中被引入,负责管理计算资源和调度用户应用程序。YARN将Hadoop的资源管理和作业调度分离出来,使得Hadoop可以支持更多种类型的处理任务,这才有了后续的Spark On YARN、Flink On YARN等,提高了Hadoop的灵活性和可扩展性。
- Zookeeper是一个来自Yahoo!研究院的开源项目,是一个通用的、无单点故障的分布式协调框架。它被设计出来的初衷是为了解决分布式系统中的协调问题,使开发者可以将精力更多地集中在核心的业务逻辑处理上。Zookeeper在分布式系统中的应用非常广泛。例如,Hadoop使用Zookeeper实现NameNode的高可用;HBase利用Zookeeper保证只有一个活跃的HMaster服务,并将hbase:meta元数据表存储在Zookeeper节点上;Kafka等消息中间件则利用Zookeeper进行集群协调和元数据管理;微服务框架Dubbo使用Zookeeper进行服务发现。
- Impala是Cloudera开源的一个高性能、低延迟的SQL查询引擎,最初是为了解决Hive查询性能低下的问题,它允许用户直接在Hadoop上执行SQL查询,获取实时的查询结果。Impala支持Hadoop的所有常见文件格式(如Parquet、Avro、RCFile等),并且可以通过Hive元数据服务访问Hive表。Impala的低延迟查询性能优于Presto和Phoenix。
- Presto是一个由Facebook开源的用于交互式SQL查询的分布式系统,它对大规模数据集进行高效率的查询。Presto 支持多数据源,包括Hadoop HDFS、Cassandra、Kafka、MySQL、SQL Server、PostgreSQL等。Presto的设计目标是对海量数据进行快速查询,充分利用分布式系统的优势,实现高并行和低延迟的数据查询,其性能稍逊于Impala,但是在多数据源支持与集成上,远远超过Impala,并且也支持连接多个数据源,跨数据源连表查。
- Phoenix为HBase提供了SQL查询和事务处理的需求,使得用户无需编写HBase客户端程序语言(如Java等),而可以直接使用SQL语句来查询和操作HBase中的数据。Phoenix的主要特性包括:提供SQL查询能力,支持事务处理,提供二级索引功能,支持连接查询,通过优化和加速技术提供更高的查询性能和更低的延迟。过Phoenix可以在HBase上执行复杂的SQL查询,进行事务处理,创建和使用二级索引,进行跨表的连接查询等操作。Phoenix通过提供简单、高效的SQL引擎,极大地提高了HBase的数据查询和处理的灵活性、性能和效率。
- Spark是一个由加州大学伯克利分校AMPLab开发并于2010年成为Apache项目的开源大数据处理框架。它提供了一个快速、通用、易于使用、生态完善的大数据处理平台,适用于批处理、交互式查询、流处理和机器学习等多种数据处理方式。Spark的核心是一个计算引擎,擅长进行大规模数据集的分布式数据处理和计算,并因其内存计算技术而被广泛认可。Spark还提供了多种数据处理工具,包括用于处理结构化数据的Spark SQL,用于实时数据流处理的Spark Streaming,用于机器学习的Mllib和用于图计算的GraphX。在实际应用中,Spark广泛应用于大规模数据分析、机器学习、实时数据处理和图处理等场景。例如,Spark能够在大规模数据集上执行数据预处理、特征提取和统计分析等任务;MLlib库支持常见的机器学习算法,用于分类、回归、聚类和推荐等任务;Spark Streaming支持实时数据流处理,适用于实时监控和实时推荐等场景;GraphX库则可以处理大规模图数据,如社交网络分析和网页排名等。
- Apache Flink是一个由德国柏林的数据工艺技术大学在2014年开源的流处理框架。Flink主要特性包括高吞吐量、对事件时间处理的支持,以及在失败恢复时的精确一次处理语义,这使得它在处理实时数据流和事件驱动应用时,能保证高准确性和数据处理的正确性。相比Spark Streaming的流处理,但其实是微批处理模型。Flink是一个真正的流处理框架,它的核心是基于流处理模型的,并且可以在流处理的基础上进行批处理,在流处理方面,Flink性能通常优于Spark,在容错性方面,Flink提供了精确一次的处理语义,可以在发生故障时保证数据的正确性。而Spark Streaming提供的是至少一次的处理语义,可能会导致数据的重复处理。因此,对于需要高精度的应用,Flink可能会有更好的表现。Flink能够适用实时数据分析、实时监控、实时推荐系统、物联网数据处理、日志处理和分析等多种场景,比如使用Flink处理电商网站用户的实时购买、浏览等行为数据,实时分析用户行为和购买趋势,从而及时调整销售策略、使用Flink处理从各种物联网设备上收集的实时数据,进行设备状态监控、故障预测等。
- TensorFlow是一个由Google开发的开源机器学习库,适用于设计和实现各种机器学习和深度学习算法。它可以在各种设备和大规模分布式系统上运行,提供了多种编程语言的接口和易于使用的高级API。TensorFlow的应用场景广泛,包括图像识别、语音识别和处理、自然语言处理、预测和推荐,以及强化学习等。
结语
在实际的业务应用中,进行技术选型,选择适合的框架、存储方法或计算引擎,需要深入理解各种技术的原理和它们能解决的问题。同时,还需要考虑业务场景需求,预估数据量大小,考虑未来可能的扩展场景等多个因素。避免在后期发现当前选择无法满足需求,再进行更换,这样可能带来的成本是无法预测的。因此,我们常说“永远在最开始的时候掉头”。
在选择框架、存储和计算引擎时,确实需要深入理解其原理、能力和适用场景,以避免在后续发现不满足需求而需要更换引擎带来的不可控成本。以下是一些考虑因素:
- 原理和能力:了解各个框架、存储和计算引擎的原理和工作方式,以及其在数据处理、存储和计算方面的能力。考虑到数据量、数据类型和处理负载的特点,选择适合的引擎。
- 解决的问题:了解每个框架、存储和计算引擎能够解决的问题。不同的引擎可能擅长不同的任务,如实时查询、批量分析、流式处理等。根据业务需求,选择最适合解决问题的引擎。
- 业务场景需求:考虑业务场景的需求,例如实时性要求、数据一致性、数据可靠性和可扩展性等。根据业务需求选择能够满足这些需求的引擎。
- 数据量和扩展场景:考虑数据量的大小和增长趋势,以及未来的扩展场景。选择能够处理大规模数据和支持水平扩展的引擎,以便在数据量增加和业务需求变化时能够无缝扩展。
- 社区支持和生态系统:考虑引擎的社区支持和生态系统。选择有活跃社区和丰富生态系统的引擎,以便能够获得及时的技术支持和丰富的工具生态系统。
综上所述,选择适合的框架、存储和计算引擎需要综合考虑多个因素,包括原理、能力、解决的问题、业务场景需求、数据量和扩展场景等。在做出选择之前,进行充分的调研、评估和测试,以确保选择的引擎能够长期满足业务需求,并避免在后续需要更换引擎带来的不可控成本。
在接下来的部分,我们将深入探讨上述各种大数据技术框架的原理、适用场景和使用案例。