1.什么是大数据
- 数据体量巨大:数据量规模庞大,通常以PB(拍字节)或EB(艾字节)来衡量,远远超出了传统数据库和数据处理工具的处理能力。
- 数据类型多样:大数据包括结构化数据、半结构化数据和非结构化数据。其中,非结构化数据占据了相当大的比例,如文本、音频、视频、图片、地理位置信息等。
- 价值密度低:在大量的数据中,真正有价值的信息可能只是很小的一部分。因此,如何从海量数据中快速提取有价值的信息是大数据处理的一个重要挑战。
- 处理速度快:大数据处理需要高效、实时的数据处理技术,以满足对数据价值的快速发现和利用的需求。
目前,有很多大数据处理系统可以处理大数据,如表
名称 | 类型 | 说明 |
Hadoop | 开源 | Apache基金会所开发的分布式系统基础架构。用户可以在不了解分布式底层细节的情况下,开发分布式程序。 |
Spark | 开源 | 类似Hadoop MapReduce的并行框架,用于快速处理大量数据。 |
Storm | 开源 | 实时的、分布式以及具备高容错的计算系统。 |
MongoDB | 开源 | 面向文档的NoSQL数据库,用于存储和检索键值对数据。 |
IBM PureData | 商用 | 基于Hadoop,属于IBM专家集成系统PureSystem家族中的组成部分,主要面向大数据应用。 |
Oracle Exadata | 商用 | Oracle的新一代数据库云服务器,提供高性能的数据查询功能。 |
SAP Hana | 商用 | 提供高性能的数据查询功能,用户可以直接对大量实时业务数据进行查询和分析。 |
Teradata | 商用 | 非结构化数据解决方案。 |
AsterData | 商用 | 未在图片中提供详细说明,但通常与大规模数据处理相关。 |
EMC GreenPlum | 商用 | 采用了大规模并行处理,支持50PB级海量存储与管理。 |
HP Vertica | 商用 | 列式大数据分析数据库,用于大型数据集的高效分析。 |
2.Hadoop体系结构
1:HDFS(Hadoop Distributed File System)
-
- 定义:Hadoop的分布式文件系统,是Hadoop体系结构中负责数据存储管理的基础。
- 结构:采用主从(Master/Slave)结构模型,由一个NameNode(主服务器)和若干个DataNode(从服务器)组成。NameNode管理文件系统的命名空间和客户端对文件的访问操作,DataNode则负责存储数据。
- 特点:
- 高容错性:能够自动检测并应对硬件故障。
- 高吞吐量:通过流式数据访问提供高吞吐量应用程序数据访问功能。
- 数据块存储:文件被分成若干个数据块(默认为128MB,用户可设置),并分散存储在多个DataNode上。
- 元数据管理:NameNode维护文件系统的元数据,如文件块位置、大小、拥有者信息等。
2 :MapReduce
-
- 定义:一种并行编程模型,用于大数据量的计算。
- 结构:由JobTracker(作业跟踪器,运行在NameNode上)和TaskTracker(任务跟踪器,运行在每个DataNode上)组成。JobTracker负责调度作业,将作业切割成多个小任务并分配给TaskTracker执行。TaskTracker负责执行具体的Map和Reduce任务。
- 特点:
- 分而治之:将大规模数据集的操作分发给多个节点共同完成,然后整合结果。
- 可靠性:自动处理节点故障,重新执行失败的任务。
- 高容错性:通过数据块副本机制提高数据的可靠性。
3:YARN(Yet Another Resource Negotiator)
-
- 定义:Hadoop 2.x版本中引入的资源管理系统,用于管理和调度集群中的计算资源。
- 结构:包括ResourceManager(资源管理器)、NodeManager(节点管理器)、ApplicationMaster(应用程序主)等组件。ResourceManager负责资源的分配和调度,NodeManager管理各个节点的资源,ApplicationMaster则负责应用程序的生命周期管理。
- 特点:
- 通用性:支持多种计算框架(如MapReduce、Spark等)在Hadoop集群上运行。
- 高效性:通过细粒度的资源管理和调度,提高集群的资源利用率。
其他组件
- Hadoop Common:支持其他模块的公用组件,包括文件系统操作、序列化、网络通信等。
- Hive:基于Hadoop的数据仓库工具,提供SQL查询功能,将SQL语句转换为MapReduce任务执行。
- Spark:另一种大数据处理框架,与MapReduce功能类似但性能更优,支持快速迭代和实时计算。
3、Hadoop生态圈
Hadoop不仅仅包括HDFS和MapReduce,还形成了一个庞大的生态圈,包括:
- Hive:建立在Hadoop上的数据仓库工具,提供SQL类查询语言。
- Pig:用于大规模数据集的查询和分析平台。
- HBase:基于Google BigTable的分布式、面向列的数据库。
- ZooKeeper:为分布式应用提供协调服务的系统。
- Sqoop:用于在Hadoop与传统数据库之间传输数据。
- Flume:日志采集系统。
- Spark:与Hadoop兼容的独立大数据处理框架。
4、MapReduce的原理和工作流程
原理:
MapReduce是一种编程模型,用于大规模数据集(大于1TB)的并行运算。它采用“分而治之”的策略,将复杂任务分解成多个子任务,在Hadoop集群的多个节点上并行执行,然后将结果合并得到最终答案。MapReduce的核心思想是将数据(或计算任务)的“Map(映射)”和“Reduce(归约)”两个过程分开,“Map”将数据分割成不相关的区块,便于并行处理;“Reduce”则将结果汇总输出。
如图是MapReduce的工作流程图
工作流程:
- 作业提交:客户端提交MapReduce作业到JobTracker(在Hadoop 2.x及以后版本中,JobTracker的功能被ResourceManager和ApplicationMaster取代)。
- 作业初始化:JobTracker(或ResourceManager)接收作业,进行初始化操作,包括创建作业ID、配置作业参数等。
- 任务分配:JobTracker(或ResourceManager)将作业分割成多个Map任务和Reduce任务,并将这些任务分配给空闲的TaskTracker(或NodeManager)执行。
- Map阶段:
-
- 每个Map任务读取输入数据(通常是一个HDFS上的数据块),并将其分割成多个键值对(key-value pairs)。
- 对每个键值对执行用户定义的Map函数,输出中间结果。
- 将中间结果写入本地磁盘,并通知Reduce任务拉取数据。
5.Shuffle阶段:
-
- Reduce任务从Map任务拉取中间结果,并进行排序和合并。
- Shuffle过程包括数据的分区、排序、合并等操作,以确保Reduce任务能够正确接收和处理数据。
6.Reduce阶段:
-
- Reduce任务对收到的数据进行归约操作,执行用户定义的Reduce函数。
- 将最终结果输出到HDFS或其他存储系统。
7.作业完成:所有Reduce任务完成后,作业结束。JobTracker(或ResourceManager)通知客户端作业已完成。
设计框架:
MapReduce的设计框架主要包括JobClient、JobTracker(或ResourceManager)、TaskTracker(或NodeManager)等组件。JobClient负责作业的提交和监控;JobTracker(或ResourceManager)负责作业的调度和资源管理;TaskTracker(或NodeManager)负责执行具体的Map和Reduce任务。
5、YARN的原理和工作流程
原理:
YARN(Yet Another Resource Negotiator)是Hadoop 2.x版本中引入的资源管理系统,用于管理和调度集群中的计算资源。YARN将资源管理和作业调度/监控的功能分离,使得Hadoop集群能够同时运行多种计算框架(如MapReduce、Spark等)。YARN采用主从结构,包括ResourceManager(主节点)和NodeManager(从节点)等组件。如图是YARN的工作流程图
工作流程:
- 作业提交:客户端提交应用程序到ResourceManager。
- 资源申请:ResourceManager为应用程序分配一个ApplicationMaster(AM),AM负责向ResourceManager申请资源(如CPU、内存等)。
- 资源分配:ResourceManager根据集群的资源情况和调度策略,为AM分配资源,并通知相应的NodeManager启动Container。
- 任务执行:AM在分配到的Container上启动应用程序的任务(如Map和Reduce任务),并监控任务的执行情况。
- 进度和状态更新:任务将其进度和状态信息返回给AM,AM再将这些信息汇总后报告给ResourceManager和客户端。
- 作业完成:所有任务完成后,AM向ResourceManager申请注销自己,作业结束。
设计框架:
YARN的设计框架主要包括ResourceManager、NodeManager、ApplicationMaster等组件。ResourceManager负责资源的全局管理和调度;NodeManager负责节点上资源的监控和管理;ApplicationMaster负责应用程序的生命周期管理。
配置文件:
配置文件 | 路径 | 主要作用 |
yarn-site.xml | $HADOOP_CONF_DIR(通常是 /etc/hadoop/conf${HADOOP_HOME}/etc/hadoop) | 定义YARN集群的全局配置,如ResourceManager的地址、NodeManager的配置、调度器类型(如Capacity Scheduler或Fair Scheduler)等。 |
capacity-scheduler.xml | $HADOOP_CONF_DIR | 专用于Capacity Scheduler的配置文件,定义了队列结构、资源限制、用户权限等。Capacity Scheduler是YARN默认的资源调度器之一,它允许将资源划分为多个队列,每个队列都有自己的容量和限制。 |
fair-scheduler.xml | $HADOOP_CONF_DIR | 专用于Fair Scheduler的配置文件,定义了队列的权重、优先级、资源限制等。Fair Scheduler是另一种资源调度器,它试图公平地分配资源给所有应用程序,无论它们何时提交。 |
container-executor.cfg | /etc/hadoop/conf(或类似路径) | 配置容器执行器的参数,容器执行器负责在YARN节点上安全地执行容器。这个文件通常包含安全相关的配置,如用户权限、组权限等。 |
nodemanager-env.sh | $HADOOP_CONF_DIR$HADOOP_HOME/etc/hadoop | NodeManager的环境配置文件,用于设置NodeManager启动时的环境变量。 |
resourcemanager-env.sh | $HADOOP_CONF_DIR$HADOOP_HOME/etc/hadoop | ResourceManager的环境配置文件,用于设置ResourceManager启动时的环境变量。 |
log4j.properties | $HADOOP_CONF_DIR | 配置YARN组件的日志级别和输出格式。这个文件允许你控制日志的详细程度,以便更好地监控和调试YARN集群。 |