第3章 分布式文件系统HDFS作业
单选题
- (单选题, 2分)分布式文件系统指的是什么?
A 把文件分布存储到多个计算机节点上,成千上万的计算机节点构成计算机集群
B 用于在Hadoop与传统数据库之间进行数据传递
C 一个高可用的,高可靠的,分布式的海量日志采集、聚合和传输的系统
D 一种高吞吐量的分布式发布订阅消息系统,可以处理消费者规模的网站中的所有动作流数据
正确答案: A
- (单选题, 2分)下列哪一项不属于HDFS采用抽象的块概念带来的好处?
A 简化系统设计
B 支持大规模文件存储
C 强大的跨平台兼容性
D 适合数据备份
正确答案: C
- (单选题, 2分)下面对SecondaryNameNode第二名称节点的描述,哪个是错误的?
A SecondaryNameNode一般是并行运行在多台机器上
B 它是用来保存名称节点中对HDFS元数据信息的备份,并减少名称节点重启的时间
C SecondaryNameNode通过HTTPGET方式从NameNode上获取到FsImage和EditLog文件,并下载到本地的相应目录下
D SecondaryNameNode是HDFS架构中的一个组成部分
正确答案: A
- (单选题, 2分)下面哪一项不属于计算机集群中的节点?
A 主节点(Master Node)
B 源节点(SourceNode)
C 名称结点(NameNode)
D 从节点(Slave Node)
正确答案: B
- (单选题, 2分)在HDFS中,NameNode的主要功能是什么?
A 维护了block id 到datanode本地文件的映射关系
B 存储文件内容
C 文件内存保存在磁盘中
D 存储元数据
正确答案: D
- (单选题, 2分)下面对FsImage的描述,哪个是错误的?
A FsImage文件没有记录每个块存储在哪个数据节点
B FsImage文件包含文件系统中所有目录和文件inode的序列化形式
C FsImage用于维护文件系统树以及文件树中所有的文件和文件夹的元数据
D FsImage文件记录了每个块具体被存储在哪个数据节点
正确答案: D
- (单选题, 2分)在HDFS中,默认一个块多大?
A 64MB
B 32KB
C 128KB
D 16KB
正确答案: A
- (单选题, 2分)HDFS采用了什么模型?
A 分层模型
B 主从结构模型
C 管道-过滤器模型
D 点对点模型
正确答案: B
- (单选题, 2分)下列关于HDFS的描述,哪个不正确?
A HDFS还采用了相应的数据存放、数据读取和数据复制策略,来提升系统整体读写响应性能
B HDFS采用了主从(Master/Slave)结构模型
C HDFS采用了冗余数据存储,增强了数据可靠性
D HDFS采用块的概念,使得系统的设计变得更加复杂
正确答案: D
- (单选题, 2分)在Hadoop项目结构中,HDFS指的是什么?
A 分布式文件系统
B 流数据读写
C 资源管理和调度器
D Hadoop上的数据仓库
正确答案: A
多选题
- (多选题, 2分)HDFS要实现以下哪几个目标?
A 兼容廉价的硬件设备
B 流数据读写
C 大数据集
D 复杂的文件模型
正确答案: ABC
- (多选题, 2分)HDFS特殊的设计,在实现优良特性的同时,也使得自身具有一些应用局限性,主要包括以下哪几个方面?
A 较差的跨平台兼容性
B 无法高效存储大量小文件
C 不支持多用户写入及任意修改文件
D 不适合低延迟数据访问
正确答案: BCD
- (多选题, 2分)HDFS采用抽象的块概念可以带来以下哪几个明显的好处?
A 支持大规模文件存储
B 持小规模文件存储
C 适合数据备份
D 简化系统设计
正确答案: ACD
- (多选题, 2分)在HDFS中,名称节点(NameNode)主要保存了哪些核心的数据结构?
A FsImage
B DN8
C Block
D EditLog
正确答案: AD
- (多选题, 2分)数据节点(DataNode)的主要功能包括哪些?
A 负责数据的存储和读取
B 根据客户端或者是名称节点的调度来进行数据的存储和检索
C 向名称节点定期发送自己所存储的块的列表
D 用来保存名称节点中对HDFS元数据信息的备份,并减少名称节点重启的时间
正确答案: ABC
- (多选题, 2分)HDFS的命名空间包含什么?
A 磁盘
B 文件
C 块
D 目录
正确答案: BCD
- (多选题, 2分)下列对于客服端的描述,哪些是正确的?
A 客户端是用户操作HDFS最常用的方式,HDFS在部署时都提供了客户端
B HDFS客户端是一个库,暴露了HDFS文件系统接口
C 严格来说,客户端并不算是HDFS的一部分
D 客户端可以支持打开、读取、写入等常见的操作
正确答案: ABCD
- (多选题, 2分)HDFS只设置唯一一个名称节点,这样做虽然大大简化了系统设计,但也带来了哪些明显的局限性?
A 命名空间的限制
B 性能的瓶颈
C 隔离问题
D 集群的可用性
正确答案: ABCD
- (多选题, 2分)HDFS数据块多副本存储具备以下哪些优点?
A 加快数据传输速度
B 容易检查数据错误
C 保证数据可靠性
D 适合多平台上运行
正确答案: ABC
- (多选题, 2分)HDFS具有较高的容错性,设计了哪些相应的机制检测数据错误和进行自动恢复?
A 数据源太大
B 数据节点出错
C 数据出错
D 名称节点出错
正确答案: BCD
填空题
- (填空题, 2分)与普通文件系统类似,分布式文件系统数据读写的基本单元是(),只是分布式文件系统中这一基本读写单元比操作系统中的大很多。
正确答案:(1) 块
- (填空题, 2分)HDFS只允许一个文件有一个写入者,不允许多个用户对同一文件执行写操作,而且只允许对文件执行()操作,不能执行随机写操作。
正确答案:(1) 追加
- (填空题, 2分)HDFS是一个部署在集群上的分布式文件系统,因此很多数据需要通过网络进行传输。HDFS通信协议是构建上()协议基础之上的。
正确答案:(1) TCP/IP
- (填空题, 2分)HDFS文件系 统在物理结构上是由计算机集群中的多个节点构成的。这些节点分为两类,一类叫(),另一类叫()。
正确答案:(1) 主节点;Master Node;NameNode;名称节点(2) 从节点;Slave Node;DataNode;数据节点
- (填空题, 2分)HDFS采用“()”的简单文件模型。
正确答案:(1) 一次写入,多次读取
- (填空题, 2分)HDFS不支持多用户写入及任意修改文件,只允许对文件执行()操作,不能执行()操作。
正确答案:(1) 追加(2) 随机写
- (填空题, 2分)HDFS采用大文件块设计是为了最小化()。
正确答案:(1) 寻址开销
- (填空题, 2分)在HDFS的设计中,第二名称节点只是起到了名称节点的()作用,并不能起到()的作用。
正确答案:(1) 检查点;checkpoint(2) 热备份
- (填空题, 2分)HDFS的数据复制策略采用()。
正确答案:(1) 流水线复制
- (填空题, 2分)HDFS名称节点保存的数据信息中最核心的两大数据结构是()和()。
正确答案:(1) FsImage(2) EditLog
简答题
- (简答题, 5分)试述HDFS中的名称节点和数据节点的具体功能。
正确答案:(1)在HDFS中,名称节点负责管理分布式文件系统的命名空间,保存了两个核心的数据结构FsImage和EditLog。FsImage用于维护文件系统树以及文件树中的所有文件和文件夹的元数据,EditLog中记录所有针对文件的操作。名称节点记录每个文件中各个块所在的数据节点的位置信息,但并不持久化地存储这些信息,而是在系统每次启动时扫描所有数据节点并重构,得到这些信息。(2)数据节点是分布式文件系统HDFS的工作节点,负责数据的存储和读取,会根据客户端或者是名称节点的调度进行数据的存储和检索,并向名称节点定期发送自己所存储的块的列表信息。每个数据节点中的数据保存在各自节点的本地Linux文件系统中。
- (简答题, 5分)在分布式文件系统中,中心节点的设计至关重要,请阐述HDFS是如何减轻中心节点的负担的。
正确答案:HDFS的中心节点就是名称节点(NameNode),HDFS采用以下设计减轻名称节点的负担:(1)HDFS的文件块为大小为64MB,比普通文件系统中512B大小的数据块大得多,该设计使得名称节点的元数据较少,减少了元数据占用NameNode的内存容量;(2)HDFS集群只有一个名称节点,该节点负责所有元数据的管理,这种设计大大简化了分布式文件系统的结构,从而保证数据不会脱离名称节点的控制;(3)HDFS的数据块数据不会经过名称节点,大大减轻名称节点的负担,也方便了数据管理。
- (简答题, 5分)HDFS只设置一个名称节点,在简化系统设计的同时也带来了一些明显的局限性,请阐述局限性具体表现在哪些方面。
正确答案:HDFS仅设置一个名称节点,其局限性具体表现在以下几个方面:(1)命名空间的限制。名称节点是保存在内存中的,因此名称节点能够容纳对象(文件、块)的个数受到内存空间大小的限制。(2)性能的瓶颈。整个分布式文件系统的吞吐量受限于单个名称节点的吞吐量。(3)隔离问题。由于集群只有一个名称节点,只有一个命名空间,困此无法对不同应用程序进行隔离。(4)集群的可用性。一旦此唯一的名称节点发生故障,会导致整个集群变得不可用。
- (简答题, 5分)数据复制主要是在数据写入和恢复的时候发生,HDFS数据复制是使用流水线复制的策略,请阐述该策略的细节。
正确答案:HDFS数据复制使用流水线复制策略,大大提高了数据复制过程的效率。具体策略如下:(1)当客户端要往HDFS中写入一个文件时,此文件首先被写入本地,并被切分为若干个块,每个块的大小由HDFS的设定值来决定。(2)每个块都向HDFS集群中的名称节点发起写请求,名称节点会根据系统中各个数据节点的使用情况,选择一个数据节点列表返回给客户端,然后客户端就将数据首先写入列表中的第一数据节点,同时将列表传给第一个数据节点,当第一个数据节点接收到4KB数据时,写入本地,并且向列表中的第二个数据节点发起连接请求,将自己已经接收到的4KB数据和列表传给第二个数据节点,当第二个数据节点接收到4KB数据时,写入本地,并且向列表中的第三个数据节点发起连接请求,依次类推。列表中的多个数据节点形成一条数据复制贩流水线。(3)当文件写完时,数据复制也同时完成。
- (简答题, 5分)试述HDFS是如何探测错误发生以及如何进行恢复的。
正确答案:HDFS检错和恢复主要包括如下3种情形:(1)名称节点出错。Hadoop提供两种机制确保名称节点的安全:一是将名称节点上的元数据信息同步存储到其他文件系统(如远程挂载的网络文件系统NFS)中,二是运行一个第二名称节点,当名称节点宕机后,可将第二名称节点作为一种弥补措施,利用第二名称节点中的元数据信息进行系统恢复。一般会将上述两种方式结合使用,当名称节点发生宕机时,首先到远程挂载的远程网络文件系统中获取备份的元数据信息,放到第二名称节点上进行恢复,并将第二名称节点作为名称节点来使用。(2)数据节点出错。每个数据节点会定期向名称节点发送“心跳”信息,向名称节点报告自己的状态。当数据节点发生故障,或者网络发生断网时,名称节点就无法收到来自一些数据节点的“心跳”信息,这时这些数据节点会被标记为“宕机”,节点上面的所有数据都会被标记为为“不可读”,名称节点不会给再它们发送任何I/O请求。此时,有可能出现一种情形,即一些数据块的副本数量小于冗余因子。名称节点定期检查这种情况,一旦发现某个数据块的副本数量小于冗余因子,就启动数据冗余复制,为其生成新的副本。(3)数据出错。客户端读到数据后采用MD5和SHA-1进行数据校验,以确定读取到正确的数据。在文件创建时,客户端会对每一个文件块进行信息摘要,并将此摘要写入同一路径的隐藏文件里面。当客户端对数据校验时发现数据错误,就会请求到另外一个数据节点读取该文件,并向名称节点报告这个文件块有错误,名称节点会定期检查并重新复制该文件块。
- (简答题, 5分)请阐述HDFS在不发生故障的情况下读文件的过程。
正确答案:(1)客户端通过FileSystem.open()打开文件,相应地,在HDFS文件系统中DistributedFileSystem具体实了FileSystem。调用open()方法后,DistributedFileSystem会创建FSDataInputStream,对于HDFS而言,具体的输入流就是DSFInputStream。(2)在DSFInputStream的构造函数中,输入流通过ClientProtocol.getBlockLocations()远程调用名称节点,获得文件开始部分数据块的保存位置。对于该数据块,名称节点返回保存该数据的所有节点地址,同时根据距离客户远近对数据节点进行排序;然后,DistributedFileSystem利用DSFInputStream实例化FSDataInputStream,返回给客户端,同时返回数据块的数据节点地址。(3)获得输入流FSDataInputStream后,客户端调用read()函数开始读取数据。输入流根据前面排序结果,选择距离客户最近的数据节点建立连接并读取数据。(4)数据从该数据节点读书 到客户端。当该数据块读取完毕时,FSDataInputStream关闭和数据节点的连接。(5)输入流通过getBlockLocations()方法查找下一个数据块(如果客户端缓存中已经包含了该数据块的位置信息,就不用调用该方法)。(6)找到该数据块的最佳数据节点,读取数据。 (7)当客户端读取完毕数据时,调用FSDataInputStream的close()函数关闭输入流。
- (简答题, 5分)请阐述HDFS在不发生故障的情况下写文件的过程。
正确答案:(1)客户端通过调用FileSystem.create()创建文件,相应地,在HDFS文件系统中DistributedFileSystem具体实现FileSystem。调用create()方法后,DistributedFileSystem创建输出流FSDataOutputStream,对于HDFS而言,具体的输出流就是DFSOutputStream。(2)DistributedFileSystem通过RPC远程调用名称节点,在文件系统的命名空间中创建一个新的文件。名称节点执行相关检查,如文件是否已经存在、客户端是否有权限创建文件等。检查通过后,名称节点构造一个新文件,并添加文件信息。远程方法调用结束后,DistributedFileSystem利用DFSOutputStream实例化FSDataOutputStream,返回给客户端,客户端使用该输出流写入数据。(3)获得输出流FSDataOutputStream后,客户端调用输出流的write()方法向HDFS中对应的文件写入数据。(4)客户端向输出流FSDataOutputStream中写入的数据首先被分成一个个的分包,它们被放入DFSOutputStream对象的内部队列。输出流FSDataOutputStream向名称节点申请保存文件和副本数据块的若干个数据节点,这些节点形成一个数据管道流。队列中的分包最后被打包成数据包,发往数据管道的第一个数据节点,第一个数据节点将数据包发送给第二个数据节点,第二个数据节点将数据包发送给第三个数据节点,依次类推,数据包将流经管道上的各个数据节点。(5)因各个数据节点位于不同的机器上,数据需要通过网络发送。所以为保证所有数据节点的数据都是准确的,接收到数据的数据节点要向发送者发送“确认包(Ack packet)”。确认包沿着数据管道逆流而上,从数据管道依次经过各个数据节点并最终发往客户端,当客户端收到应答时,它将对应的分包从内部队列移除。不断执行(3)-(5)步,直到数据全部写完。 (6)客户端调用close()方法关闭输出流,此时后,客户端不再向输出流写入数据,所以,当DFSOutputStream对象内部队列中的分包都收到应答后,即可使用ClientProtocol.complete()方法通知名称节点关闭文件,完成一次正常的写入文件过程。
- (简答题, 5分)试述HDFS的冗余数据保存策略。
正确答案:HDFS采用多副本方式对数据进行冗余存储。通常一个数据块的多个副本会被分配到不同的数据节点上,从而带来加快数据传输速度、易检查数据错误和保证数据的可靠性3个方面的优点。具体来说:1、第一个副本放置在上传文件的数据节点,如果是集群外提交,则随机挑 选一台磁盘不太满、CPU不太忙的节点。2、第二个副本放置在与第一个副本不同的机架的节点上。3、第三个副本与第一个副本相同机架的其他节点上 。4、更多副本的放置节点随机选取。