2023年12月1日发(作者:)

大数据第三章课后作业

201708 2017152418 张明旭

1. 试述分布式文件系统设计的需求。

包括访问透明性、位置透明

性、性能和伸缩透明性;访问

透明性:用户不需要专门区分

哪些是本地文件,哪些是远程

文件。用户能够通过相同的操

作来访问本地和远程文件资

源;位置透明性:不改变路径HDFS 只能提供一定程度的

名的前提下,不管文件副本数1)透明性 访问透明性,完全的位置透明

量和实际存储位置发生何种性、性能和伸缩透明性。

变化,对用户而言都是透明

的;性能和伸缩透明性:系统

中节点的增加和减少以及性

能的变化对用户而言是透明

的,用户感觉不到什么时候节

点加入或退出;

客户端对于文件的读写不应HDFS机制非常简单,任何时

该影响其他客户端对同一文2)并发性 候只允许有一个程序写入某

件的读写; 个文件。

一个文件可以拥有不同位置

的多个副本

HDFS采用多副本机制。 3)文件复制

HDFS 采用JAVA具有很好的

跨平台性。

可以在不同的操作系统和计

4)硬件和操作系统异构性 算机上实现同样的客户端和

服务器端程序;

5)可伸缩性 支持节点的动态加入和退出; 上的分布式文件系统集群,

HDFS建立在大规模廉价机器

有良好的可伸缩性。

保证文件服务器在客户端或

服务器出现问题的时候能正6)容错

常使用;

保障系统的安全性; HDFS 安全性较弱。 7)安全

HDFS 具有多副本机制和故

障自动检测 恢复机制。

2. 分布式文件系统是如何实现较高水平的扩展的?

分布式文件系统把文件分布存储到多个计算机节点上,成千上万的计算机节点构成计算机

集群。

3. 试述HDFS中的块和普通文件系统中的块的区别。

HDFS中的块比普通文件系统中的块大很多。且在HDFS中如果一个文件小于数据块的大

小,它并不占用整个数据存储块的空间。

4. 试述HDFS中的名称节点和数据节点的具体功能。

名称节点:负责文件和目录的创建删除和重命名等,管理数据节点和文件块的映射关系。

数据节点:负责数据的存储和读取。

5. 在分布式文件系统中,中心节点的设计至关重要,请阐述HDFS是如何减轻中心节点的

负担的。

名称节点不参与数据的传输。

6. HDFS只设置唯一一个名称节点,在简化系统的同时也带来了一些明显的局限性,请阐

述局限性具体表现在哪些方面。

1)命名空间的限制:

名称节点是保存在内存中,因此名称节点能够容纳对象(文件,块)的个数受到内存空

间大小的限制

2)性能的瓶颈

整个分布式文件系统的吞吐量受限于单个名称节点的吞吐量

3)隔离问题

由于集群中只有一个名称节点,只有一个命名空间,因此无法为不同应用程序

进行隔离

4)集群的可用性

一旦唯一的名称节点发生故障,会导致整个集群不可用

7. 试述HDFS的冗余数据保存策略。

HDFS采用多副本方式对数据进行冗余存储,通常一个数据块的多个副本会被分不到不

同的数据节点上。

8. 数据复制主要是在数据写入和数据恢复的时候发生,HDFS数据复制是使用流水线复制

的策略,请阐述该策略的细节。

这个文件首先被写入本地,被切分成若干个块,每个块向HDFS集群中名称节点发起写

请求,名称节点会将各个数据节点的使用情况,选择一个数据节点列表返回给客户端,

当第一个数据节点接收块的时候,写入本地,并且向第二数据节点发起连接请求,把自

己的接收的块传给第二个数据节点,依次类推,列表中的对个数据节点形成一条数据复

制的流水线。最后数据写完后,数据复制同时完成。

9. 试述HDFS是如何探测错误发生以及如何进行恢复的。

1)名称节点出错:

1)把名称节点的元数据信息同步存储到其他文件系统;

2)可以把第二名称节点作为不就措施

一般会把两者结合使用,其他文件系统的元数据信息放到第二名称节点进行恢复,

并把第二名称节点作为名称节点使用(这样做仍然会有一部分数据丢失)

2)数据节点出错:

数据节点定期向名称节点发送心跳信息,向名称节点报告状态,如果名称节点没有

收到某些数据节点时,这时名称节点将这些数据节点标记为宕机,由于这些数据节点不

可用导致一些数据块的副本数据量小于冗余因子时,就会启动数据冗余复制,生成新的

副本

3)数据出错:

网络传输和磁盘错误等因数都会造成数据的错误,客户端读取数据后,会采用md5

对数据块进行校验,以正确读取到正确的数据。如果校验出错,客户端就会请求到另外

重新复制这个块

10. 请阐述HDFS在不发生故障的情况下读文件的过程。

1 使用HDFS提供供的客户端Client 向远程的Namenode发起RPC请求;

2 Namenode会视情况返回文件的部分或者全部block列表, 对于每个block

Namenode都会返回有该block拷贝的DataNode地址;

3 客户端Client会选取离客户端最近的DataNode来读取block 如果客户端本

身就是DataNode,那么将从本地直接获取数据;

4 读取完当前block的数据后, 关闭当前的DataNode链接, 并为读取下一个

block寻找最佳的DataNode

5)当读完列表block后, 且文件读取还没有结束, 客户端会继续向Namenode

取下一批的block列表;

6 读取完一个block都会进行checksum验证, 如果读取datanode时出现错误,

客户端会通知Namenode 然后再从下一个拥有该block拷贝的datanode继续读。

11. 请阐述HDFS在不发生故障的情况下写文件的过程。

1 使用HDFS提供的客户端Client 向远程的Namenode发起RPC请求

2 Namenode会检查要创建的文件是否已经存在, 创建者是否有权限进行操作,

成功则会为文件创建一个记录, 否则会让客户端抛出异常;

3 当客户端开始写入文件的时候, 客户端会将文件切分成多个packets 并在内

部以数据队列“data queue 数据队列) ”的形式管理这些packets 并向Namenode

申请blocks 获取用来存储replicas的合适的datanode列表, 列表的大小根据Namenode

replication的设定而定;

4 开始以pipeline 管道) 的形式将packet写入所有的replicas中。 开发库把

packet以流的方式写入第一个datanode datanode把该packet存储之后, 再将其

传递给在此pipeline中的下一个datanode 直到最后一个datanode 这种写数据的方

式呈流水线的形式。

5 最后一个datanode成功存储之后会返回一个ack packet 确认队列)

pipeline里传递至客户端, 在客户端的开发库内部维护着”ack queue 成功收到

datanode返回的ack packet后会从”ack queue”移除相应的packet

6 如果传输过程中, 有某个datanode出现了故障, 那么当前的pipeline会被关

闭, 出现故障的datanode会从当前的pipeline中移除, 剩余的block会继续剩下的

datanode中继续以pipeline的形式传输, 同时Namenode会分配一个新的datanode

replicas设定的数量。

7 客户端完成数据的写入后, 会对数据流调用close()方法, 关闭数据流;

8 只要写入了的复本数( 默认为1,写操作就会成功,

且这个块可以在集群中异步复制, 直到达到其目标复本数 dfs replication的默认值

3,因为namenode已经知道文件由哪些块组成, 所以它在返回成功前只需要等待

数据块进行最小量的复制。