重生之我要学HadoopHDFS和HadoopMapReduce

1、HadoopHDFS

Hadoop 分布式文件系统(HDFS)是 Apache Hadoop 生态系统的核心组件之一,专为在商用硬件集群上存储和处理海量数据而设计。其主要作用和设计目标如下:

1.1. 存储海量数据

  • 分布式存储:将数据分散存储在集群中的多个节点上,突破单机存储限制。例如,一个 PB 级数据集可分布在数千台服务器上。
  • 可扩展性:通过横向添加节点(Scale Out)轻松扩展存储容量,无需停机。

1.2. 高容错性

  • 数据冗余:默认将每个数据块(Block)复制 3 份,并存储在不同机架的节点上,确保部分节点故障时数据依然可用。
  • 自动恢复:当检测到节点或磁盘故障时,HDFS 会自动复制丢失的块到健康节点,保证数据冗余度。

1.3. 高吞吐量数据访问

  • 流式数据访问:优化顺序读写性能,适合批量处理(如 MapReduce),而非随机读写。
  • 数据本地化:计算任务(如 Map 任务)优先调度到存储数据的节点上执行,减少网络传输开销。

1.4. 简化硬件管理

  • 容错设计:不依赖昂贵的高可用硬件,而是通过软件机制(如数据复制、校验)在普通商用服务器上构建可靠存储系统。
  • 自动负载均衡:数据块的复制和迁移由系统自动管理,无需人工干预。

1.5. 与 MapReduce 协同设计

  • 切片支持:HDFS 的数据块为 MapReduce 提供天然的输入切片(Split),每个切片对应一个 Map 任务,便于并行处理。
  • 一致性模型:采用 “一次写入、多次读取” 的模型,适合批处理场景,简化数据一致性管理。

1.6. 异构数据存储

  • 支持多种数据格式:可存储结构化、半结构化和非结构化数据,如文本、图像、日志等。
  • 兼容多种上层应用:作为基础存储层,支持 Hive(数据仓库)、Spark(计算引擎)、HBase(分布式数据库)等组件。

1.7. 跨平台兼容性

  • 开源且跨平台:支持 Linux、Windows 等操作系统,可部署在公有云或私有云环境中。
  • 标准接口:提供 Java API、命令行工具及 REST 接口,便于集成和开发。

核心架构组件

  • NameNode:管理文件系统元数据(如目录结构、块位置),是系统的 “大脑”。
  • DataNode:负责实际数据存储和读写操作。
  • Secondary NameNode:辅助 NameNode 进行元数据检查点(Checkpoint),但不替代其角色。

典型应用场景

  • 日志分析:存储和处理海量服务器日志。
  • 数据仓库:作为 Hive 或 Impala 等数据仓库的底层存储。
  • 批处理 ETL:支持大规模数据的提取、转换和加载。
  • 机器学习训练:存储训练数据和模型参数。

2、HDFS基本框架

Hadoop—HDFS基本框架图

数据上传下载流程:

客户端上传\下载文件,文件超过128M被分块,询问ActiveNN文件上传到那个DN中或者我的文件从哪个DN中下载,返回信息后,文件和DN建立链接,通过返回的信息寻找DN具体的位置,进行上传和下载。

2.1客户端:

Client发送文件上传和下载的请求打ActiveNN中,ActiveNN会根据DN的资源情况、资源位置以及机架感知策略返回可用节点,或者下载资源的DN的位置。

直接和DN建立链接完成文件上传和下载

客户端的单个文件会设置分块阈值,例如超过128M就对文件进行切分成多个文件。

2.2ActiveNameNode(ActiveNN)

NN负责存储文件的元数据(映射关系,对文件描述的数据)也就是文件和块的映射关系,元素据如何存储。

为了元数据不丢失,比如ActiveNN宕机,那么映射关系就会消失,文件查找就会变得困难,会持久化存储到磁盘空间,但为了快速的响应客户端,会将元数据存到内存中。

Client发送文件上传和下载的请求打ActiveNN中,ActiveNN会根据DN的资源情况、资源位置以及机架感知策略返回可用节点,或者下载资源的DN的位置。

如果整个集群宕机,重启集群后,恢复数据流程如下:

1.先将本地 fsimage 文件读入内存

2.再将 QJM 中大于 fsimage 编号的 edits 文件读入内存

3.再将 QJM 中最大编号的 edits inprogress 文件读入内存

4.等待所有 DataNode 心跳

即可对外提供服务

2.3StandBy NameNode (StandBy NN)

1、作为ActiveNN的故障替代,当Active出故障后,立刻顶替。

2、内存存入的元数据和ActiveNN的元数据一致,当ActiveNN宕机后可以立刻替代。

3、磁盘存入和元数据和ActiveNN不一样,只有ActiveNN才会存入块到DN的映射数据。

4、DN需要没三秒向NN汇报自己的心跳,包含了磁盘存储情况,还有块与DN的映射。

5、Standby NameNode 需要对元数据进行压缩合井,为了方便快速的恢复元数据,具体如下:

a.时间维度:默认1小时合井一次

b.操作维度:默认 100W 操作合井一次

维度检查:默认1分钟执行一次C.

6.合井后的文件叫做 fsimage,例如fsimage0000000034合井后 Standby 会通知 Active 拷贝走合井 文件,该文件最多只存在最近两个版本

2.4QJM

元数据的命名为edits,分为正在进行的和已经生成的,

a.正在进行中的文件叫做ecits inproaress0000000007

b.已完成的文件叫做edits000000000000000000019、edits000000002000000000034、 edits000000003500000000060、dits000000006100000000070

2.5DataNode(DN)

NN和DN是主从关系,Client和DN建立连接完成上传和下载

默认三秒发送一次记录节点剩余资源和块到DN映射关系的信息

当DN宕机时(NN10分30秒未收到心跳),里面存储的文件导致无法满足三份备份,NN会让其他资源充足的节点DN,去存储了当前宕机的文件的其他DN中拷贝。

2.6Zookeeper

解决了Hadoop集群的单点故障问题,帮助选主,切换主备NN(Active和Standby)

NN向Zookeeper临时注册了Znode,谁先注册谁就是主,Standby检测Active

当Active宕机时,Standby通过监听重新注册为Active,Active重启之后降级为Standby

当集群发生脑烈现象时(Active是假宕机,比如网络波动)ZooKeeper先通过 ZKFC 调用转换为Standby 的方法,调用失败(转换失败)时,会根据配置文件中配置的解决方案,例如 ssh 登录至当前机器将其进程杀死。

2.7Federation联邦机制

1.联邦机制是为了解压 NaemNode 压力问题,防止 NaemNode 出现 OOM(内存溢出异常)

2.底层 DataNode 公用,上层 NameNode 是联邦的,解决了 NameNode 的请求压力问题

3.DataNode 底层磁盘存储格式是按照 NameNode 的 BlockPoolID 构建目录分别存储的,心跳也是只汇报对应的块池文件块信息

2.8机架感知策略:

客户端上传数据,会产生三份副本,保持高可用性,第一份副本再离客户端最近的机房中的机架中的服务器,第二份和第一份时相同机房不同机架,且有着充足资源的服务器,第三份和第二份相同机架的中的任意服务器。

2.HadoopMapReduce

HadoopMapReduce工作流程图

2.1简单概述流程:

1、客户端将1T的全国百家姓的数据传输到HDFS集群中,这个集群会将原来的数据划分块,

2、这些块又会被split切片,切片会产生计算任务MapTask,切片的数量和MapTask的工作区的数量一致。

3、KeyValue方式再将Split中的文件进行kv值对应,k表示偏移量,V表示一行数据,用的是map方法的键值对思想。

4、KV数据传入MapTask中的环形缓冲区,该区域的作为内存的空间,默认大小为100M,达到80%溢写,溢写出来的数据会根据K值产生分区,由后面的ReduceTask数量决定该分区的数量,通过sort快速排序来存储同类型的分区数据,比如hashCode%3决定了只有三种类型的数据,从而进行不同的分区。

5、每次缓冲区达到阈值时会溢出一个80M的文件,名称叫 spill次数.out,对应还会生成一个spill次数.out.index 的索引文件用于描述数据文件中各分区的起始以及长度。

6、内存和磁盘中可以自定义Combiner组合器,再spill溢出时调用,或者合并文件数到达3个时调用。

7、溢写文件 spill次数.out会写入磁盘,由于溢出是一段段持续的,所以会有不同的分区,每个分区会有多个spill次数.out文件。

8、conbiner组合器又能将相同分区的文件合并,使得一个磁盘中一个分区只有一个file.out文件,同时还会产生一个file.out.index文件索引对应。

9、之后ReduceTask的内存开始从MapTask中根据key值决定的分区进行拉取数据,一个ReduceTask只有存储一个分区,那么每个MapTask分区会将每个分区的file.out文件分发到对应的ReduceTask中的内存。

10、ReduceTask内存也会产生溢出,溢出后的文件又可以通过Combiner组合器进行合并,合成一个分区唯一的最终的文件。

11、分组决定这最终的文件分别去什么空间,比如每个datanode的空间只有128G,但是最终的文件却有几百G,那么他们就得由分组决定他们要去那些datanode中。

12、用户重写reduce方法,对数据进行统计计算等。

13、将数据写出output到HDFS或者数据库中。

3、YARN

MapReduce2.x YARN工作流程图

3.1工作流程

1、Client对Resource发送作业申请

2、Resouce返回JobID(ApplicationID)和保存的数据资源(作业的 Jar 文件,配置文件,计算所得输入分片, 资源信息等)的临时目录(使用 JobID 命名的目录,hdfs://xxx/staging/xxx);

3、Client计算分片,拷贝资源(作业的 Jar 文件,配置文件,计算所得输入分片,资源信息等)到 HDFS,最后用 submitApplication 函数提交 Job 给 ResouceManager;

4、ApplicationManager 接收 submitApplication 方法提交的 Job,并将其交ResourceScheduler(调度器)处理;

5、ResourceScheduler 选择一台 NodeManager 分配一个 Container,在 Container 中开启 ApplicationMaster 进程;

6、首先 ApplicationMaster 向 ResourceManager 进行注册,这样用户可以直接通过ResourceManager 查看应用程序的运行状态;

7、然后 ApplicationMaster 收集计算后的输入分片情况来向 ResouceManager 申请对应的资源以运行 Task;

8、最后 ApplicationMaster 初始化一定数量的记录对象(bookkeeping)来跟踪 Job 的运行进度,并收集每个 Task 的进度和完成 情况,直到运行结束;

9、应用程序运行完成后,ApplicationMaster 向 ResourceManager 注销并关闭自己。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值