大数据技术
大数据
大数据的特征
大数据,通常指的是无法在一定时间范围内用常规软件工具进行捕捉、管理和处理的数据集合。它具有四大特征(4V):大量化(Volume)、快速化(Velocity)、多样化(Variety)和珍贵性(Value)。
- 大量化:指数据量庞大,无法用传统数据库进行管理。据统计,全球数据量正以每年 50%的速度增长,预计到 2025 年,全球数据量将达到 175ZB。
- 快速化:指大数据的处理速度非常快,需要在极短的时间内完成数据的收集、分析和处理,以满足实时决策的需求。
- 多样化:指大数据的形态丰富多样,包括结构化数据(如数据库中的表格数据)和非结构化数据(如社交媒体上的文本、图片、视频等)。
- 珍贵性:数据价值密度低,但是这些数据又很珍贵。随着互联网及物联网的广泛应用,信息量大,但价值密度较低。如何结合业务逻辑并通过强大的机器算法来挖掘数据价值,是大数据时代最需要解决的问题。
最近,IBM 提出了大数据“5V”的概念,即在“4V”的基础之上多了一个特征:真实性(Veracity)。
- 真实性:指大数据的质量要求高,必须保证数据的准确性和可靠性,以便为决策提供有力支持。
大数据的典型应用场景
大数据目前已经广泛应用在各行各业中,包括金融大数据、医疗大数据、零售大数据、电商大数据、交通大数据、智慧城市大数据等应用场景。
生活中的大数据应用场景有:
- 淘宝、天猫、京东等购物网站中的“猜你喜欢”功能。
- 百度地图、高德地图中的“实时路况”功能。
- 今日头条、抖音、直播平台中的“推荐”功能。
- 美团、饿了么等外卖平台中的“订单实时分配”功能。
大数据生态系统
在大数据领域,各种技术工具协同工作,形成了一个完整的生态系统。随着大数据行业的发展,大数据生态圈中相关的技术也在一直迭代进步,这些工具各自承担不同的角色,涵盖存储、计算、传输、展示以及协调管理等功能,大致分为 9 类:
- 数据采集技术框架:包括 Flume、Sqoop、Logstash、Filebeat、DataX、Canal、Maxwell 等。
- 数据存储技术框架:包括 Kudu、HBase、HDFS、Kafka、Redis 等。
- 分布式资源管理框架:包括 YARN。
- 数据计算技术框架:包括 MapReduce、Tez、Spark、Storm、Flink 等。
- 数据分析技术框架:包括 Hive、Impala、Kylin、Druid、ClickHouse、Doris 等。
- 任务调度技术框架:包括 Azkaban、Ooize、DolphinScheduler 等。
- 大数据底层基础技术框架:包括 Zookeeper。
- 数据检索技术框架:包括 Elasticsearch、ELK 等。
- 大数据集群安装管理框架:包括 CDH、HDP、CDP 等。

数据采集技术框架
数据采集也被称为数据同步。随着互联网、移动互联网、物联网等技术的兴起,产生了海量数据。这些数据散落在各个地方,我们需要将这些数据融合到一起,然后从这些海量数据中计算出一些有价值的内容。此时第一步需要做的是把数据采集过来。数据采集是大数据的基础,没有数据采集,何谈大数据!
日志数据采集工具
- Flume:Apache 开源的日志采集工具,它是一个高可用的、高可靠的、分布式的海量日志采集、聚合和传输的系统。
- Logstash:Elastic 公司旗下的一款日志采集工具,Logstash 属于 ELK(Elasticsearch + Logstash + Kibana)组件中的一员,主要负责日志数据采集。
- Filebeat:Elastic 公司开发的一款轻量级的日志采集工具,只能采集保存在文件中的日志数据。
数据库离线数据采集工具
- Sqoop:由 Apache 开源的一个可以将 Hadoop 和关系型数据库 中的数据相互转移的工具,可以将关系型数据库(例如 MySQL、Oracle 等)中的数据导入 Hadoop,也可以将 Hadoop 中的数据导出到关系型数据库中。
- DataX:由阿里巴巴开源的一个异构数据源离线同步工具,用于实现包括关系型数据库(例如 MySQL、Oracle)、HDFS、Hive、HBase、FTP 等各种异构数据源之间稳定且高效的数据同步。
数据库实时数据采集工具
- Canal:由阿里巴巴开源的一个基于 MySQL 数据库的增量日志(Binary Log)解析工具,可以提供增量数据订阅和消费,支持将 MySQL 中的增量数据采集到 Kafka、RabbitMQ、Elasticsearch 及 HBase 中。
- Maxwell:由 Zendesk 开源的一个基于 MySQL 数据库的增量日志(Binary Log)解析工具,可以将 MySQL 中的增量数据以 JSON 格式写入 Kafka、Kinesis、RabbitMQ 及 Redis 中。
数据存储技术框架
HDFS
- Hadoop 中的 HDFS(Hadoop Distributed File System,分布式文件系统),它可以解决海量数据存储的问题,但是其最大的缺点是不支持单条数据的修改操作,因为它毕竟不是数据库。
HBase
- 随着业务的发展,企业对海量数据的修改需求越来越多,此时急需一个可以支撑海量数据修改需求的存储系统。
- HBase 应运而生,它是一个 基于 HDFS 的分布式 NoSQL 数据库。这意味着,HBase 可以利用 HDFS 的海量数据存储能力,并支持修改操作。但 HBase 并不是关系型数据库,所以它无法支持传统的 SQL 语法。
Kudu
随着业务的继续发展,在数据修改的基础上,企业还希望能够提供基于 SQL 的统计分析功能。HDFS 不支持单条数据的修改操作,随机读写性能差,适合离线统计分析,在获取大批量数据时性能比较高。 HBase 支持数据修改操作,随机读写能力强,不支持基于 SQL 的统计分析,在获取大批量数据时性能较差。
Kudu 介于 HDFS 和 HBase 之间,支持数据修改,也支持基于 SQL 的统计分析。Kudu 不及 HDFS 批处理速度快,也不及 HBase 随机读写能力强。但是,在 SQL 统计分析场景下,Kudu 比 HBase 的批处理速度快;在实时写入或更新的场景下,Kudu 比 HDFS 的随机读写能力强。
目前 Kudu 的定位比较尴尬,属于一个折中的方案,在实际工作中应用有限。
Kafka
- Kafka 是一个高吞吐量、持久性的 分布式发布/订阅消息系统。常用于海量数据的临时缓冲存储,对外提供高吞吐量的读写能力。
Redis
- Redis 是基于内存的 NoSQL 数据库。它支持分布式集群,可以实现海量数据存储。其最大的特点是可以支持 100000 次/ s 的随机读写能力,常用于大数据的实时计算场景中。
分布式资源管理框架
- YARN
- YARN 是 Apache Hadoop 中的分布式资源管理系统,用于将作业(如 MapReduce,Spark 等)提交到计算机集群上,并管理资源。
- Mesos
- Mesos 是一种多个作业调度框架的资源管理系统,它可以分配资源,从而使集群上运行的不同应用程序之间共享计算机资源。
- Kubernetes
- Kubernetes 是一种集群管理系统,用于部署,运行和管理容器化应用程序。
数据计算技术框架
- MapReduce 可以称得上是大数据行业的第一代离线数据计算引擎,主要用于解决大规模数据集的分布式并行计算。MapReduce 计算引擎的核心思想是,将计算逻辑抽象成 Map 和 Reduce 两个阶段进行处理。
- Tez 计算引擎在大数据技术生态圈中的存在感较弱,实际工作中很少会单独使用 Tez 去开发计算程序。
- Spark 最大的特点就是内存计算:任务执行阶段的中间结果全部被放在内存中,不需要读写磁盘,极大地提高了数据的计算性能。Spark 提供了大量高阶函数(也可以称之为算子),可以实现各种复杂逻辑的迭代计算,非常适合应用在海量数据的快速且复杂计算需求中。
- Storm:Storm 可以称得上是大数据行业的第一代实时数据计算引擎,主要用于处理海量数据的实时计算需求。
- Spark Streaming:属于 Spark 生态圈,它在 Spark 离线计算的基础上实现了微批处理,可以实现“秒”级别延迟的近实时数据计算。在实际工作中,“秒”级别的延迟其实是可以满足大部分的实时计算需求的。
- Flink:Flink 是新一代的实时数据计算引擎,最近这几年在企业中应用得越来越多,它包含 Storm 和 Spark 的优点。它既可以实现真正意义上的实时数据计算,也有自己的生态圈,以及支持 ON YARN、高级 API 等特性。目前在实时数据计算领域,Flink 是最优的选择。
数据分析技术框架
离线 OLAP 数据分析引擎:
- Hive:主要提供通过 SQL 分析 HDFS 中海量数据的能力。HDFS 中存储的都是离线数据,所以 Hive 适合做海量数据的离线统计分析。Hive 的 SQL 语句在底层会被转化为 MapReduce 任务去执行,MapReduce 任务的特点是稳定和可靠。不过由于 MapReduce 是基于磁盘的,计算效率相对较低,所以如果你对计算速度要求不是特别高,但是对计算的稳定性要求比较高,那 Hive 是非常合适的。企业在构建离线数据仓库时,Hive 是首选的工具。在离线 OLAP 分析领域,Hive 是必不可少的。
- Impala:功能类似于 Hive,可以直接兼容 Hive 的元数据,即在 Hive 中创建的表可以在 Impala 中直接使用,两者可以无缝集成。
- Impala 的优点是:底层不需要经过 MapReduce,它自己实现了底层的计算引擎,主要是以内存的代价换取查询效率的提高。如果要在 Web 页面中提供一个海量数据统计分析功能,肯定希望在输入 SQL 语句后很快看到返回的结果,那对计算的效率要求就比较高了,使用 Hive 就不太合适了,比较适合使用 Impala 这种基于内存的计算引擎。
- Impala 也有缺点:因为它是基于内存的,所以稳定性相对比较差,如果查询的数据量比较大,则内存可能扛不住,最终导数内存溢出,无法计算出结果。
- Kylin:主要是为了解决 TB 级别数据的 SQL 分析需求。其核心是预计算,需要我们提前配置好计算规则,每天定时将计算结果存储在 HBase 中。在使用时,直接查询聚合后的结果数据,这样速度会很快(因为聚合后的数据量没有那么大了)。所以,Kylin 适合用于一些需求固定的报表类分析需求。如果需求灵活多变,则 Kylin 就无法发挥最优性能了。
实时 OLAP 数据分析引擎
- Druid:主要针对时间序列数据提供低延时的数据写入及快速交互式 SQL 查询,适合被应用在海量实时数据的交互式分析场景中。其可以基于时间维度对实时产生的明细数据自动实时聚合,提高查询效率。它有一个比较明显的缺点——对 SQL 支持有限。在 Druid 0.18 版本之前它是不支持 JOIN 操作的,从 0.18 版本开始它有限支持 JOIN 操作,目前主要支持 INNER JOIN、LEFT JOIN 和 CROSS JOIN。
- ClickHouse:可以提供海量实时数据的快速写入,以及基于 SQL 的快速实时查询,适合应用在海量实时数据的交互式分析场景中。其支持非标准 SQL,有限支持 JOIN 操作,目前在实时数据仓库领域应用得比较广泛。
- Doris:可以通过 SQL 实现实时数据分析,适合应用在海量实时数据的交互式分析场景中。其对 SQL 支持比较好,支持 JOIN 操作。Doris 和 ClickHouse 是比较类似的,但是 Doris 目前的成熟度暂时还不如 ClickHouse。
任务调度技术框架
- Azkaban:Azkaban 是由 Linkedin 开源的一个批量工作流任务调度器,用于在一个工作流内以一个特定的顺序运行一组工作和流程。
- Oozie:Oozie 是由 Cloudera 公司贡献给 Apache 的基于工作流引擎的开源框架,主要用于 Hadoop 平台的开源工作流调度。
- DolphinScheduler:DolphinScheduler(原 EasyScheduler)是由中国易观公司开源的一款分布式、去中心化、易扩展的可视化 DAG 工作流任务调度平台。该平台致力于解决数据处理流程中错综复杂的依赖关系,使调度系统在数据处理流程中“开箱即用”。DolphinScheduler 于 2021 年 3 月 18 日正式成为 Apache 顶级项目,中文名为“海豚调度”。
大数据底层基础技术框架
ZooKeeper 是一个分布式的,开放源码的分布式应用程序协调服务,是 Google 的 Chubby 一个开源的实现,大数据生态圈中的 Hadoop(HA)、HBase、Kafka 等技术组件的运行都会用到 Zookeeper。
数据检索技术框架
- Lucene 起步比较早,是 Java 家族中最为出名的一个开源搜索引擎,在 Java 世界中属于标准的全文检索程序,在全文检索领域属于标杆工具。它提供了全文检索的完整底层核心功能,功能短小精悍。但是,它提供的都是一些基础 API,使用起来比较烦琐,易用性较差。
- Solr 是一个高性能、采用 Java 开发、基于 Lucene 的全文搜索服务器。它对 Lucene 做了封装,使用起来更加的方便,并且对外提供类似于 WebService 的接口,可以通过 HTTP 请求进行操作。最初 Solr 仅支持单机模式,在 2013 年,Solr 也跟进了分布式架构,推出了 Solr Cloud,支持海量数据下的全文检索需求。
- Elasticsearch 是一个分布式的全文检素引擎。它同样对 Lucene 的功能做了封装,具有实时搜索、稳定、可靠、快速等特点。
大数据集群安装管理框架
一个完整的大数据平台需要包含数据采集、数据存储、数据计算、数据分析、集群监控等功能,这就意味着其中需要包含 Flume、Kafka、Haodop、Hive、HBase、Spark、Flink 等组件,这些组件需要部署到上百台甚至上千台机器中。如果依靠运维人员单独安装每一个组件,则工作量比较大,而且需要考虑版本之间的匹配问题及各种冲突问题,并且后期集群维护工作也会给运维人员造成很大的压力。
一体化的大数据平台,利用它可以快速安装大数据组件:
- HDP:全称是 Hortonworks Data Platform。它由 Hortonworks 公司基于 Apache Hadoop 进行了封装,借助于 Ambari 工具提供界面化安装和管理,并且集成了大数据中的常见组件, 可以提供一站式集群管理。HDP 属于开源版免费大数据平台,没有提供商业化服务;
- CDH:全称是 Cloudera Distribution Including Apache Hadoop。它由 Cloudera 公司基于 Apache Hadoop 进行了商业化,借助于 Cloudera Manager 工具提供界面化安装和管理,并且集成了大数据中的常见组件,可以提供一站式集群管理。CDH 属于商业化收费大 数据平台,默认可以试用 30 天。之后,如果想继续使用高级功能及商业化服务,则需要付费购买授权,如果只使用基础功能,则可以继续免费使用;
- CDP:Cloudera 公司在 2018 年 10 月份收购了 Hortonworks,之后推出了新一代的大数据平台产品 CDP(Cloudera Data Center)。CDP 的版本号延续了之前 CDH 的版本号。从 7.0 版本开始, CDP 支持 Private Cloud(私有云)和 Hybrid Cloud(混合云)。CDP 将 HDP 和 CDH 中比较优秀的组件进行了整合,并且增加了一些新的组件。
