文章目录
一、体系概述
大数据开发处理体系是指通过一系列技术和工具,对海量、多样化、高速产生的数据进行收集、处理、分析和应用的过程。这个体系需要高效、可靠的技术支持,以满足企业对数据价值的深度挖掘和利用。
ETL(Extract, Transform, Load)是数据仓库中的重要环节,用于从不同的数据源抽取数据、进行转换和清洗,然后加载到数据仓库中。
1.1 狭义的Hadoop
主要由三个组件构成:
存储:HDFS(分布式文件系统)
计算: MapReduce (分布式计算框架)
资源调度: YARN (资源管理组件)
1.2 广义的Hadoop
指一个更宽泛的概念一Hadoop生态圈:
Zookeeper. Hive、HBase、Sqoop、
Flume、Oozie等组件。
-
ZooKeeper:是一个分布式应用程序协调服务。主要功能:
1.配置管理
Zookeeper作为分布式的配置中心,通用的全局配置,让集群所有机器共享配置信息。如HBase的配置信息存储在Zookeeper中。
2.名字服务
在分布式系统中,通过使用命名服务,客户端应用能够根据指定名字来获取资源或服务的地址,提供者等信息。类似DNS
3.分布式锁
分布式锁是控制分布式系统之间共同访问共享资源的一种锁实现,如果不同的系统的不同主机之间共享了某个资源时,往往需要互斥来防止彼此干扰来保证一致性。
4.选举机制
为保证节点之间的协调工作,集群会选一个Leader的角色,当Leader挂了的时候,由Follower们内部投票决定的新的Leader.Hadoop高可用由Zookeeper完成 -
Flume:是Cloudera提供的一个分布式、高可靠、高可用的海量日志聚合系统,支持在系统中定制各类Source,用于收集数女孩。
·Flume提供对数据的简单处理,并通过Sink写到各种数据接受方的能力。 -
Oozie:是一个基于工作流引擎的开源框架,提供对Hadoop中MapReduce和Pig Jobs的任务调度与协调。
-
Apache Ambari:是一种支持Apache Hadoop集群的安装、部署、配置和管理的工具。Ambari已支持大多数Hadoop组件,包括HDFS、MapRedduce、Hive、Pig、HBase、Zookeeper、Sqoop等。
1.3 主要特点
高可靠:Hadoop底层数据存储使用副本机制(默认为3个)。
高扩展: Hadoop集群支持热插拔,在增加或删除节点时无需重新启动集群,极大提高了集群扩展性能。
高效率: Hadoop提供MapReduce组件,支持分布式的并行计算,加快任务处理速度。
高容错:能够自动将失败的任务重新分配。
低成本:Hadoop可以运行在廉价的机器上。
二、主要环节
2.1 数据采集(Flume、Sqoop、Kafka、网络爬虫)
数据采集(DAQ)又称数据获取,是使用技术手段对离线数据和实时数据采集的过程,是数据分析中的重要环节。数据来源主要包含四个:系统日志数据,企业业务数据,网络数据,传感器数据。
Kafka是一种高吞吐量的分布式发布订阅消息系统.用于在线和离线消息的处理,支持与Flume、Spark、Flink、Stornn集成,用于实时流式计算。Kafka也是一种数据采集工具,一般对日志数据和实时数据进行采集。
功能: 日志收集,异步处理, 应用解耦, 流量削峰,大数据实时计算,消息系统
组成
- 生产者:Producer往Kafka生成数据
- 消费者:Consumer从Kafka中获取数据,Kafka的数据是由消费者自己去拉Consumer取
- 主题:Topic是数据记录发布和订阅的地方。不同类型或者业务各的数据,可以分为不同的主题
- 分区:Partition默认一个Topic有一个分区(Partition),自己可设置多个分区
优点:
分布式的
容错性强
解耦
持久性
削峰
支持多语言
高吞吐、低延时
易扩展
缺点:
消息丢失
重复消费
消息乱序
不支持事务
它们的区别如下:
- 2.1.1 数据来源和用途
* Flume 主要用于实时收集日志数据,常用于将大量的日志数据从各种数据源(如服务器、应用程序等)传输到集中的数据存储或处理系统。
* Sqoop 侧重于在关系型数据库(如 MySQL、Oracle 等)和 Hadoop 生态系统(如 Hive、HBase、HDFS 等)之间进行数据迁移。
* Kafka 则更通用,可用于采集各种类型的数据,不仅是日志,还包括业务数据、传感器数据等,并且常用于构建实时数据处理管道。
- 2.1.2 数据传输方式
* Flume 支持多种数据传输方式,如文件、Socket 等,并可以在传输过程中对数据进行过滤和转换。
* Sqoop 主要通过执行数据库的导出和导入操作来实现数据迁移。
* Kafka 基于发布/订阅模式,数据以消息的形式在生产者和消费者之间传递。
- 2.1.3 实时性
* Flume 可以实现准实时的数据采集。
* Sqoop 更侧重于批量数据的迁移,实时性相对较弱。
* Kafka 具有出色的实时处理能力,适用于对实时性要求很高的场景。
- 2.1.4 数据处理能力
* Flume 本身侧重于数据的传输,数据处理能力相对较弱。
* Sqoop 主要用于数据迁移,基本不涉及数据处理。
* Kafka 可以与其他处理框架(如 Spark、Flink 等)结合,实现强大的数据处理。
- 2.1.5 数据存储
* Flume 通常将数据传输到其他存储系统,如 HDFS 等。
* Sqoop 主要是在不同系统之间迁移数据,不负责最终的数据存储。
* Kafka 本身可以作为数据的临时存储,也可以与其他存储系统配合使用。
- 2.1.6 架构复杂性
* Flume 的架构相对简单,配置较为直观。
* Sqoop 的使用相对较为直接,主要是配置数据库连接和迁移参数。
* Kafka 的架构相对复杂,需要配置 Broker、Topic 等多个组件。
综上所述,选择使用哪种工具取决于具体的业务需求、数据特点和技术架构。
2.2 数据存储
存储海量的数据,常见的存储系统有 Hadoop 分布式文件系统(HDFS)、NoSQL 数据库(如 MongoDB、Cassandra、HBase 等)、数据仓库(如 Hive 等)。
这里提及的海量数据通常指数据量非常大,达到传统数据处理技术和存储系统难以有效管理和处理的程度,可能是数十亿条记录、数 TB 甚至 PB 级别的数据规模。以下是常见存储系统的区别:
2.2.1 Hadoop 分布式文件系统(HDFS)
- 设计目的:主要用于大规模数据的存储,支持数据的分布式存储和管理。
- 数据模型:基于文件系统,以大文件为主要存储单位。
- 主从结构:一个名字节点(NameNode)和多个数据节点(DataNode)组成。NameNode是一个管理文件命名空间和调节客户端访问文件的主服务器。数据节点(DataNode)是一个从服务器,主要完成数据的存储功能能。
- 扩展性:具有高度可扩展性,可以通过增加节点来扩展存储容量和计算能力。
- 高吞吐量:操作任务划分,多服务器并发执行
- 适用场景:适合存储大规模的静态数据,如日志文件、图像、视频等。
- 缺点: 1.高延迟:高吞吐量的设计,牺牲了低延迟.2.不适合小文件存取场景:小文件会占用更多元数据空间.3.不适合并发写入:同一个文件不能并发写操作.4.不支持随机修改:仅支持数据Append(追加)
2.2.2 NoSQL 数据库(MongoDB、Cassandra、HBase)
-
2.2.2.1 MongoDB
- 数据模型:文档型数据库,存储的是类似 JSON 的文档。
- 特点:支持丰富的查询语言,灵活的模式变更,适用于需要快速开发和迭代的应用。
- 适用场景:Web 应用、内容管理系统等。
-
2.2.2 Cassandra:
- 数据模型:宽列存储,强调分布式和高可用性。
- 特点:可扩展性强,能在多个数据中心之间进行复制,适合大规模分布式系统。
- 适用场景:实时性要求较高的大数据应用,如实时分析、社交网络等。
-
2.2.3 HBase:
HBase是一个分布式的、面向列的开源数据库。HBase可以存储海量数据,准实时查询。HBase适合存储半结构化与非结构化数据。特点
1.单表容量大:可以存储大批量的数据,百亿行与上百万列,小于百万行不适合用HBase来存储
2.列式存储:HBase表的数据是基于列族进行存储与权限控制,并支持列独立检索,可以动态增加列
3.扩展性:HBase底层文件存储依赖HDFS,磁盘空间不足,只需要动态增加服务器节点
4。稀疏性:HBase中为空的列并不占用存储空间,表的设计可以非常稀疏
5.高性能:HBase具备非常高的写入性能,在海量数据下具备一定的随机读取性能,针对RowKey的查询能够达到毫秒级别
2.2.3 数据仓库(Hive)
Hive是一个基于Hadoop平台的数据仓库ETL工具,完成数据提取、转换与加载的功能.Hive用于解决海量结构化数据的查询与统计.
特点:
- Hive不存储数据,数据的存储依赖Hadoop的HDFS来完成。
- Hive提供一种映射功能将HDFS上结构化的数据文件映射为一张表,并提供类SQL的查询功能,Hive中只保存表的元数据。
- Hive中内置了多个MapReduce模板,在Hive执行SQL查询时,利用模板将SQL转换成MapReduce任务交给Hadoop来执行。
- Hive中是读多写少,适合存储历史(离线)数据。
总的来说,选择哪种存储系统取决于具体的应用需求,包括数据量、读写模式、数据结构、扩展性要求、查询复杂性等因素。
2.3 数据预处理
数据预处理的主要流程包含:数据清洗、数据集成、数据变换与数据归约。
2.3.1 数据清洗
主要包括:
缺失值处理:是指由于调查、编码和录入的误差,数据中可能存在一些缺失值,需要给予适当的处理。
异常值处理:根据每个变量的合理取值范围和相互关系,检查数据是否合乎要求,发现超出正常范围、逻辑上不合理或者相互矛盾的数女孩
数据类型转换: 数据类型不一致往往会影响到后续的数据处理分析环节,因此,需要明确每个字段的数据类型,并做统一处理。
重复值处理: 由于各种原因,数据中可能存在重复记录或重复字段(列),对于这些重复项目(行和列)需要做去重处理、重复值的存在会
影响数据分析和挖掘结果的准确性,所以,在数据分析和建模之前需要进行数据重复性检验,如果存在重复值,还需要进行重复值的删除。
2.3.2 数据集成:
数据集成就是将互相有关联的多个异构数据源中的数据集成到一起,在逻辑上或物理地形成一个统一的、可靠的和高质量的数据集合,为企业
提供全面的数据共享,并让用户能够以统一的方式访问这些数据。
2.3.3 数据变换:
2.3.4 数据归约:
使用分布式计算框架进行数据处理和分析,如 MapReduce、Spark,flink 等。可以进行数据清洗、转换、聚合、关联等操作。它们的区别如下:
Hadoop MapReduce
- 设计目标:大规模数据集的并行运算,是专为离线数据处理和大规模数据分析而设计的
- 计算模型:MapReduce
- 内存使用:主要依赖磁盘I/O
- 特性:
- 成熟稳定:在大数据领域有较长的历史,经过了大量实践的检验。
- 批处理为主:擅长处理大规模的离线批处理任务。
- 数据存储:HDFS 提供了可靠的分布式数据存储。
- 缺点:
- 计算效率相对较低:MapReduce 模型的迭代计算效率不高。
- 实时性差:不太适合对实时性要求较高的场景
- 执行过程简介:
- 1.数据预处理:将输入文件分为多个分片;
- 2.任务分配:在集群中空闲的节点分配Map任务或Reduce任务;
- 3.Map阶段:读取自己所属的文件数据,Map将每一个条输入转换成<key,value>的形式,中间处理结果写入本地磁盘,并发给Reducer;
- 4.Reducer阶段:将同一个key所对应value的值进行合并,开彡成<key,list>,再由Reduce方法对合并的数据计算,得到最终结果,并输出到HDFS的文件中。
Spark
- 设计目标: 高速、通用分布式计算
- 计算模型: RDD(弹性分布式数据集),它是一个容错、并行的数据结构,可以让用户显式地将数据集分区、进行转换操作和行动操作。Spark还提供了DataFrame和Dataset等更高级别的API,以支持更丰富的数据处理和分析任务。
- 内存使用: 强调内存计算
- 架构组成:
- Driver Program(驱动程序):这是控制应用程序执行的主进程,负责创建SparkContext,协调任务的执行,并将作业转换为有向无环图(DAG)。
- Cluster Manager(集群管理器):如 Standalone、YARN、Mesos 等,负责资源的分配和管理。
- Executor(执行器):在工作节点上运行实际的计算任务,负责存储数据、执行任务,并将结果返回给 Driver Program。
- 执行流程:Driver Program 将用户的代码转换为一系列的 RDD 操作,并构建 DAG。然后,根据 DAG 切分成不同的阶段(Stage),每个阶段包含多个任务(Task)。这些任务被发送到集群中的 Executor 上执行, Executor进行实际的计算任务,存储数据和执行任务,并将结果返回给Driver Program。
- 特性:
- 内存计算: 通过RDD弹性分布式数据集方式编程,具备容错特征,能在并行计算中高效的进行数据共享,提升计算性能
- 多样化的计算模式:支持批处理、流处理Spark Streaming、交互式查询(Spark SQL)、机器学习MLlib、图计算GraphX等多种计算模式。
- DAG执行引擎:采用有向无环图(DAG)执行引擎,优化了任务调度和内存管理。
- 易用性:支持多种编程语言(如Java、Python、Scala)的API,以及丰富的算法库。
- 缺点:资源管理相对复杂, 在资源分配和调度方面需要更精细的配置。
Flink
·Flink软件是Apache基金会开发一个分布式处理引擎,用于对无界和有界数据流进行有状态计算。
- 架构组成:
- Client(客户端):负责将用户编写的 Flink 程序提交到集群,并与 JobManager 进行交互。
- JobManager:协调分布式执行,负责调度任务、协调检查点、故障恢复等。
- TaskManager:实际执行计算任务,管理内存、缓存等资源。
- 执行流程:客户端Client将作业提交给 JobManager,JobManager 对作业进行解析和优化,生成执行图。然后,将任务分配到 TaskManager 上执行,并通过检查点机制确保数据的一致性和容错性。
- 特性:
- 状态管理:提供精确一次(exactly-once)的状态一致性保证,检查点机制是一种轻量级的快照技术,它定期地对系统的状态进行快照,确保在故障恢复时数据的一致性。
- 支持事件时间:能够基于事件发生的实际时间进行处理,而不仅仅是系统处理时间。
- 批流一体:统一了批处理和流处理的 API 和执行引擎。
- 支持高吞吐,低延迟,高性能
- 缺点:学习曲线较陡:相对较新,技术生态不如 Hadoop 和 Spark 成熟。
2.4 数据分析
- 运用数据分析工具和算法,挖掘数据中的价值和洞察。
- 例如使用统计分析、Mahout机器学习算法(如分类、聚类、回归等)进行数据建模和预测。
- Pig: 基于Hadoop的大规模数据分析平台
主要特点
1.使用Pig Latin语言可以轻松实现MapReduce程序,比Java代码简洁
2.Pig提供了更丰富运算符操作,如Join,Sort,Filter,Ordering等
3.Pig Latin是类SQL语言,学习成本低
4.Pig使用了多查询方法,减少代码的长度
5.Pig中任务自动优化其执行,程序员只需要关注语言的功能
6.Pig可以开发自定义的功能来实现数据读取、处理与写入
7.Pig可以分析结构化与非结构的数据,结果存储在HDFS上
数据挖掘算法主要有:分类、聚类、回归分析、关联规则和协同过滤。
分类:分类就是根据数据集的特点生成一个目标函数,借助该目标函数,指将未知的数据集数据样本映射到一个预先定义的类别
中。这个类别必须是离散的(若为连续的,则属于回归算法)。属监督学习。
-
按算法原理:
基于统计:如贝叶斯算法
基于神经网络:如神经网络算法
基于规则:如决策树
基于距离:如KNN算法 -
按模型:
预测性模型:直接告诉你数据应被分到哪个类
概率性模型:不直接告诉你结果,但告诉你属于每个类的概率
聚类:聚类是将物理或抽象对象的集合分组为由类似的对象组成的
多个类的分析过程。聚类既能作为一个单独过程,用于找寻数据内部的分布结构,也可以作为分类等其他学习任务的前驱过程。属无监督学习。
回归分析:回归分析指的是确定两种或两种以上变量间相互依赖的
定量关系的一种统计分析方法。在大数据分析中,常用于预测分析,主要研究自变量与因变量的关系。属监督学习。
关联规则:关联规则是发现事物之间关联关系的分析过程,关联分析的目目的是找出数据中隐藏的关联网,挖掘发现大量数据中项集之间有趣的关联或相关联系。常见的关联规则算法有Apriori、FP-树频集算法等。
协同过滤:协同过滤简单来说是利用某兴趣相投、拥有共同经验之群体的喜好来推荐用户感兴趣的信息。分类:基于用户的协同过滤算法, 基于物品的协同过滤算法,基于模型的协同过滤算法
2.5 数据可视化
- 将分析结果以直观的图表、图形等形式展示给用户,帮助用户更好地理解数据。
- 常用的可视化工具包括 Tableau、PowerBI、Echarts 等。
2.6 数据治理
- 确保数据的质量、安全性、一致性和可用性。
- 包括数据质量管理、数据标准制定、数据安全策略等方面。
2.7 资源管理和调度
- 管理和分配计算资源,以高效执行大数据任务。
- 例如 YARN(Yet Another Resource Negotiator)用于 Hadoop 集群的资源管理和任务调度。
2.8 监控和优化
- 对整个大数据处理流程进行监控,包括数据流量、任务执行情况、系统性能等。
- 根据监控结果进行优化,如调整参数、优化算法、扩展资源等。