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已经知道文件由哪些块组成, 所以它在返回成功前只需要等待
数据块进行最小量的复制。


发布评论