既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上大数据知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新
2006年2月:MapReduce和HDFS(NDFS重新命名为HDFS)成为Lucene的一个子项目,称为Hadoop,Apache Hadoop项目正式启动。
2008年1月:Hadoop升级成为Apache顶级项目。此时,Hadoop发展到0.15.3版本。
Hadoop 生态圈
广义上来说,Hadoop是指大数据的一个生态圈,包括很多软件框架。
Sqoop主要用于传统关系型数据库和Hadoop之间传输数据。
Flume是海量日志收集系统,提供对日志数据进行简单处理的能力,如过滤、格式转换等,能够将日志写往各种数据目标。
HDFS是Hadoop体系中数据存储管理的基础,它是一个分布式文件系统,具有高容错性,提供高吞吐率的数据访问,能够有效处理海量数据集。
HBase是一个建立在HDFS之上,面向列的针对结构化和半结构化数据的动态数据库。HBase提供了对大规模数据的随机、实时读写访问, HBase中保存的数据可以使用MapReduce来处理,它将数据存储和并行计算完美地结合在一起。
Kafka是一种高吞吐量的分布式消息系统,它主要用于处理活跃的流式数据。这些数据通常以日志的形式记录下来,然后每隔一段时间进行一次统计处理。YARN是通用资源管理系统,为上层应用提供统一资源管理调度。
MapReduce是面向大型数据处理的并行计算模型和方法,仅适合离线数据处理。
Spark提供一个通用并行计算框架用于处理各种有着不同性质(文本数据、图表数据等)的数据集和数据源(批量数据或实时的流数据)的大数据处理需求。
Hive是一种数据仓库技术,用于查询和管理存储在分布式环境下的大数据集,通常用于离线分析。
Mahout是一个开源的数据挖掘算法库,实现了一些可扩展的机器学习领域经典算法。
Storm是一个分布式的、容错的实时处理系统。可用于“流处理”之中,实时处理消息并更新数据库。Storm也可用于“连续计算”,对数据流做连续查询,在计算时就将结果以流的形式输出给用户。
Oozie是 Hadoop 平台的一种工作流调度引擎,用于协调多个Hadoop作业的执行。
Azkaban是一个批量工作流任务调度器,用于在一个工作流内以一个特定的顺序运行一组工作和流程。
ZooKeeper是一个分布式数据管理和协调框架,保证分布式环境中数据的一致性,是Hadoop组件的一个监管系统。
Hadoop 的运行模式
单机模式
(1)Hadoop的默认模式,安装时不需要修改配置文件。
(2)Hadoop运行在一台计算机上,不需要启动HDFS和YARN。
(3)MapReduce运行处理数据时只有一个JAVA进程,使用本地文件系统进行数据的输入输出。
(4)用于对MapReduce程序的逻辑进行调试,确保程序的正确。
伪分布式模式
(1)Hadoop安装在一台计算机上,需要修改相应的配置文件,用一台计算机模拟多台主机的集群。
(2)需要启动HDFS和YARN,是相互独立的Java进程。
(3)MapReduce运行处理数据时是每个作业一个独立进程,输入输出使用分布式文件系统。
(4)用来进行学习和开发测试Hadoop程序的执行是否正确。
完全分布式模式
(1)在多台计算机上安装JDK和Hadoop,组成相互连通的集群,需要修改相应的配置文件。
(2)Hadoop的守护进程运行在由多台主机搭建的集群上。
真正的生产环境。
Hadoop 优点
(1)扩容能力强:Hadoop是在可用的计算机集群间分配数据并完成计算任务,这些集群可以方便地扩展到数以千计的节点。
(2)成本低:通过普通廉价的计算机组成服务器集群来分发以及处理数据,相比使用大型机乃至超级计算机成本低很多。
(3)高效率:通过并发数据,Hadoop可以在节点之间动态并行处理数据,使得处理速度非常快。
(4)高可靠性:能自动维护数据的多份复制,并且在任务失败后能自动地重新部署计算任务。
Hadoop的核心组件——HDFS
HDFS 定义
HDFS(Hadoop Distributed File System),它是一个文件系统,用于存储文件,通过目录树来定位文件;其次,它是分布式的,由很多服务器联合起来实现其功能,集群中的服务器有各自的角色。适合一次写入,多次读出的场景,不支持文件修改,可以过来做数据分析。
优点:
(1)容错性高:主要有多个副本
(2)适合处理大数据:数据规模 可达到 PB级别,文件量能够处理百万这个量级
(3)可构建在廉价机器上
缺点:
(1)数据访问有延时,做不到毫秒级别的
(2)大量小文件不能高效存储,NameNode会占用大量内存
(3) 可追加写入,不可随机修改,不支持并发写入(不支持多线程写入)
HDFS架构图
相关组件的介绍
NameNode
名称节点,HDFS的管理者。
(1)管理HDFS的名字空间,维护管理所有文件的元数据。
(2)管理DataNode上的数据块,决定文件数据块存储到哪个DataNode。
(3)处理客户端的读写请求。
(4)按用户确定的副本策略管理HDFS中数据的副本
DataNode(数据节点)
负责存储数据。
(1)存储实际的数据块,每个HDFS数据块默认大小为128MB,存储在本地文件系统的单独文件中。
(2)处理客户端的读写请求,执行数据块的读和写。
(3)向 NameNode 定期汇报数据块信息,并定时向 NameNode 发送心跳信号保持联系。
FSImage和edits文件
(1)FSImage文件存储文件的元数据,HDFS运行时会将该文件加载到内存中。
(2)edits文件记录对文件的写操作(修改)。
(3)写文件操作只会对内存中的元数据进行修改,不会对FSImage文件进行修改。
SecondaryNameNode
用于合并元数据文件FSImage。
(1)将NameNode上的FSImage和edits文件复制到本地,并将两者合并生成新的FSImage文件,再将新的FSImage文件复制回NameNode。
(2)不是NameNode的备份,但可以帮助恢复NameNode,因为其上保存了大部分的元数据信息。
SecondaryNameNode,用于合并元数据文件FSImage。
(1)将NameNode上的FSImage和edits文件复制到本地,并将两者合并生成新的FSImage文件,再将新的FSImage文件复制回NameNode。
(2)不是NameNode的备份,但可以帮助恢复NameNode,因为其上保存了大部分的元数据信息。
Client
就是客户端。
(1)文件切分。文件上传HDFS的时候,Client将文件切分成一个一个的Block,然后进行上传;
(2)与 NameNode 交互,获取文件的位置信息;
(3)与 DataNode 交互,读取或者写入数据;
(4) Client提供一些命令来管理 HDFS,比如 NaneNode 格式化;
(5) Client可以通过一些命令来访问 HDFS,比如对 HDFS 增删查改操作;
HDFS - 优缺点
优点:
(1)适合处理大数据:HDFS能够处理TB级甚至PB级的数据,文件数量也可达百万以上。
(2)高容错性:自动保存数据的多个副本,当某一副本丢失,可以自动重备。
(3)低成本运行:HDFS可以运行在廉价的商用计算机上。通过多副本机制提高可靠性。
缺点:
(1)不适合处理低延时的数据访问。
(2)不适合处理大量的小文件:小文件太多会消耗NameNode的内存。同时小文件的寻址时间超过读取时间,也违背了HDFS的设计目标。
(3)不支持并发写入和文件随机修改:HDFS的文件同时只能有一个用户进行写操作,也仅支持文件的数据追加。
二、MapReduce的特点及运行架构
MapReduce是一种用于处理大规模数据集的编程模型和处理框架,最初由Google开发,在后来由Apache Hadoop项目采用,并被广泛应用于分布式计算环境中。它的主要特点和运行架构如下:
MapReduce的特点:
- 简单易用:MapReduce模型提供了简单的抽象,使得开发人员可以专注于编写处理数据的逻辑,而不必关注底层的并行和分布式处理细节。
- 分布式处理: MapReduce适用于大规模数据集的并行处理。它将输入数据分割成小块,并在多个计算节点上进行并行处理,以加速数据处理过程。
- 容错性: MapReduce具有高度的容错性,能够处理计算节点故障。当一个节点失败时,MapReduce会重新调度任务到其他节点上,确保整个作业的完成。
- 可扩展性: 可以通过简单地添加更多的计算节点来扩展MapReduce系统的处理能力,使其适应不断增长的数据规模。
- 简化编程模型: MapReduce采用了一种简单而灵活的编程模型,将数据处理任务分解为两个主要阶段:Map阶段和Reduce阶段,简化了大规模数据处理的复杂性。
- 自动数据分片: MapReduce会自动将输入数据切分为小的数据块,并分配给不同的计算节点进行处理,使得处理任务能够更加均衡地分布在整个集群中。
- 并行化处理:MapReduce将任务分解为独立的Map和Reduce阶段,并行处理输入数据集的不同部分,从而有效利用了集群中的计算资源。
- 适用于各种类型的计算任务:MapReduce模型适用于各种类型的数据处理任务,包括数据清洗、数据转换、数据分析等。
MapReduce的运行架构:
- JobTracker和TaskTracker: 在Hadoop中,MapReduce作业通常由一个主节点(JobTracker)和多个工作节点(TaskTracker)组成。JobTracker负责作业的调度和任务分配,而TaskTracker则在各个计算节点上执行具体的任务。
- Map阶段: 输入数据被切分为多个数据块,然后通过一系列的Map任务并行处理。每个Map任务对输入数据执行用户定义的映射函数,生成一组中间键值对(Intermediate key-value pairs)。
- 分区和排序: 中间键值对被分区为一组,并在每个分区内进行排序。这一过程的目的是将相同键的所有值都聚集在一起,以便更有效地进行Reduce操作。
- Shuffle阶段: 在Shuffle阶段,Map的输出被重新分配到Reduce任务。这一阶段包括数据的排序、分区和传输,确保相同键的所有值被发送到相同的Reduce任务。
- Reduce阶段: Reduce任务按照键对相应的值进行聚合和处理。用户定义的Reduce函数被应用于每个键的所有值,生成最终的输出。
- 持久化和输出: Reduce任务的输出被写入HDFS(Hadoop分布式文件系统)或其他指定的存储系统,作为MapReduce作业的最终结果。
总体而言,MapReduce通过将大规模数据处理任务分解为独立的Map和Reduce阶段,并允许这些阶段在分布式环境中并行运行,实现了高效的大规模数据处理。
三、spark的特点与MapReduc的区别
spark的特点
快速:
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上大数据知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新
spark的特点
快速:
[外链图片转存中…(img-Z8My3hZl-1714869991341)]
[外链图片转存中…(img-PZnkbMJk-1714869991341)]
[外链图片转存中…(img-nPz7eWqG-1714869991342)]
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上大数据知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新