HNUST 大数据技术与应用期末复习
HNUST 大数据技术与应用期末复习

HNUST 大数据技术与应用期末复习

第3章 分布式文件系统HDFS作业

单选题

  1.                (单选题, 2分)分布式文件系统指的是什么?

A 把文件分布存储到多个计算机节点上,成千上万的计算机节点构成计算机集群

B 用于在Hadoop与传统数据库之间进行数据传递

C 一个高可用的,高可靠的,分布式的海量日志采集、聚合和传输的系统

D 一种高吞吐量的分布式发布订阅消息系统,可以处理消费者规模的网站中的所有动作流数据

正确答案: A

  1.                (单选题, 2分)下列哪一项不属于HDFS采用抽象的块概念带来的好处?

A 简化系统设计

B 支持大规模文件存储

C 强大的跨平台兼容性

D 适合数据备份

正确答案: C

  1.                (单选题, 2分)下面对SecondaryNameNode第二名称节点的描述,哪个是错误的?

A SecondaryNameNode一般是并行运行在多台机器上

B 它是用来保存名称节点中对HDFS元数据信息的备份,并减少名称节点重启的时间

C SecondaryNameNode通过HTTPGET方式从NameNode上获取到FsImage和EditLog文件,并下载到本地的相应目录下

D SecondaryNameNode是HDFS架构中的一个组成部分

正确答案: A

  1.                (单选题, 2分)下面哪一项不属于计算机集群中的节点?

A 主节点(Master Node)

B 源节点(SourceNode)

C 名称结点(NameNode)

D 从节点(Slave Node)

正确答案: B

  1.                (单选题, 2分)在HDFS中,NameNode的主要功能是什么?

A 维护了block id 到datanode本地文件的映射关系

B 存储文件内容

C 文件内存保存在磁盘中

D 存储元数据

正确答案: D

  1.                (单选题, 2分)下面对FsImage的描述,哪个是错误的?

A FsImage文件没有记录每个块存储在哪个数据节点

B FsImage文件包含文件系统中所有目录和文件inode的序列化形式

C FsImage用于维护文件系统树以及文件树中所有的文件和文件夹的元数据

D FsImage文件记录了每个块具体被存储在哪个数据节点

正确答案: D

  1.                (单选题, 2分)在HDFS中,默认一个块多大?

A 64MB

B 32KB

C 128KB

D 16KB

正确答案: A

  1.                (单选题, 2分)HDFS采用了什么模型?

A 分层模型

B 主从结构模型

C 管道-过滤器模型

D 点对点模型

正确答案: B

  1.                (单选题, 2分)下列关于HDFS的描述,哪个不正确?

A HDFS还采用了相应的数据存放、数据读取和数据复制策略,来提升系统整体读写响应性能

B HDFS采用了主从(Master/Slave)结构模型

C HDFS采用了冗余数据存储,增强了数据可靠性

D HDFS采用块的概念,使得系统的设计变得更加复杂

正确答案: D

  1.            (单选题, 2分)在Hadoop项目结构中,HDFS指的是什么?

A 分布式文件系统

B 流数据读写

C 资源管理和调度器

D Hadoop上的数据仓库

正确答案: A

多选题

  1.            (多选题, 2分)HDFS要实现以下哪几个目标?

A 兼容廉价的硬件设备

B 流数据读写

C 大数据集

D 复杂的文件模型

正确答案: ABC

  1.            (多选题, 2分)HDFS特殊的设计,在实现优良特性的同时,也使得自身具有一些应用局限性,主要包括以下哪几个方面?

A 较差的跨平台兼容性

B 无法高效存储大量小文件

C 不支持多用户写入及任意修改文件

D 不适合低延迟数据访问

正确答案: BCD

  1.            (多选题, 2分)HDFS采用抽象的块概念可以带来以下哪几个明显的好处?

A 支持大规模文件存储

B 持小规模文件存储

C 适合数据备份

D 简化系统设计

正确答案: ACD

  1.            (多选题, 2分)在HDFS中,名称节点(NameNode)主要保存了哪些核心的数据结构?

A FsImage

B DN8

C Block

D EditLog

正确答案: AD

  1.            (多选题, 2分)数据节点(DataNode)的主要功能包括哪些?

A 负责数据的存储和读取

B 根据客户端或者是名称节点的调度来进行数据的存储和检索

C 向名称节点定期发送自己所存储的块的列表

D 用来保存名称节点中对HDFS元数据信息的备份,并减少名称节点重启的时间

正确答案: ABC

  1.            (多选题, 2分)HDFS的命名空间包含什么?

A 磁盘

B 文件

C 块

D 目录

正确答案: BCD

  1.            (多选题, 2分)下列对于客服端的描述,哪些是正确的?

A 客户端是用户操作HDFS最常用的方式,HDFS在部署时都提供了客户端

B HDFS客户端是一个库,暴露了HDFS文件系统接口

C 严格来说,客户端并不算是HDFS的一部分

D 客户端可以支持打开、读取、写入等常见的操作

正确答案: ABCD

  1.            (多选题, 2分)HDFS只设置唯一一个名称节点,这样做虽然大大简化了系统设计,但也带来了哪些明显的局限性?

A 命名空间的限制

B 性能的瓶颈

C 隔离问题

D 集群的可用性

正确答案: ABCD

  1.            (多选题, 2分)HDFS数据块多副本存储具备以下哪些优点?

A 加快数据传输速度

B 容易检查数据错误

C 保证数据可靠性

D 适合多平台上运行

正确答案: ABC

  1.            (多选题, 2分)HDFS具有较高的容错性,设计了哪些相应的机制检测数据错误和进行自动恢复?

A 数据源太大

B 数据节点出错

C 数据出错

D 名称节点出错

正确答案: BCD

填空题

  1.                (填空题, 2分)与普通文件系统类似,分布式文件系统数据读写的基本单元是(),只是分布式文件系统中这一基本读写单元比操作系统中的大很多。

正确答案:(1) 块

  1.                (填空题, 2分)HDFS只允许一个文件有一个写入者,不允许多个用户对同一文件执行写操作,而且只允许对文件执行()操作,不能执行随机写操作。

正确答案:(1) 追加

  1.                (填空题, 2分)HDFS是一个部署在集群上的分布式文件系统,因此很多数据需要通过网络进行传输。HDFS通信协议是构建上()协议基础之上的。

正确答案:(1) TCP/IP

  1.                (填空题, 2分)HDFS文件系 统在物理结构上是由计算机集群中的多个节点构成的。这些节点分为两类,一类叫(),另一类叫()。

正确答案:(1) 主节点;Master Node;NameNode;名称节点(2) 从节点;Slave Node;DataNode;数据节点

  1.                (填空题, 2分)HDFS采用()的简单文件模型。

正确答案:(1) 一次写入,多次读取

  1. (填空题, 2分)HDFS不支持多用户写入及任意修改文件,只允许对文件执行()操作,不能执行()操作。

正确答案:(1) 追加(2) 随机写

  1.                (填空题, 2分)HDFS采用大文件块设计是为了最小化()。

正确答案:(1) 寻址开销

  1.                (填空题, 2分)在HDFS的设计中,第二名称节点只是起到了名称节点的()作用,并不能起到()的作用。

正确答案:(1) 检查点;checkpoint(2) 热备份

  1.                (填空题, 2分)HDFS的数据复制策略采用()。

正确答案:(1) 流水线复制

  1.                (填空题, 2分)HDFS名称节点保存的数据信息中最核心的两大数据结构是()和()。

正确答案:(1) FsImage(2) EditLog

简答题

  1.                (简答题, 5分)试述HDFS中的名称节点和数据节点的具体功能。

正确答案:(1)在HDFS中,名称节点负责管理分布式文件系统的命名空间,保存了两个核心的数据结构FsImage和EditLog。FsImage用于维护文件系统树以及文件树中的所有文件和文件夹的元数据,EditLog中记录所有针对文件的操作。名称节点记录每个文件中各个块所在的数据节点的位置信息,但并不持久化地存储这些信息,而是在系统每次启动时扫描所有数据节点并重构,得到这些信息。(2)数据节点是分布式文件系统HDFS的工作节点,负责数据的存储和读取,会根据客户端或者是名称节点的调度进行数据的存储和检索,并向名称节点定期发送自己所存储的块的列表信息。每个数据节点中的数据保存在各自节点的本地Linux文件系统中。

  1.                (简答题, 5分)在分布式文件系统中,中心节点的设计至关重要,请阐述HDFS是如何减轻中心节点的负担的。

正确答案:HDFS的中心节点就是名称节点(NameNode),HDFS采用以下设计减轻名称节点的负担:(1)HDFS的文件块为大小为64MB,比普通文件系统中512B大小的数据块大得多,该设计使得名称节点的元数据较少,减少了元数据占用NameNode的内存容量;(2)HDFS集群只有一个名称节点,该节点负责所有元数据的管理,这种设计大大简化了分布式文件系统的结构,从而保证数据不会脱离名称节点的控制;(3)HDFS的数据块数据不会经过名称节点,大大减轻名称节点的负担,也方便了数据管理。

  1.                (简答题, 5分)HDFS只设置一个名称节点,在简化系统设计的同时也带来了一些明显的局限性,请阐述局限性具体表现在哪些方面。

正确答案:HDFS仅设置一个名称节点,其局限性具体表现在以下几个方面:(1)命名空间的限制。名称节点是保存在内存中的,因此名称节点能够容纳对象(文件、块)的个数受到内存空间大小的限制。(2)性能的瓶颈。整个分布式文件系统的吞吐量受限于单个名称节点的吞吐量。(3)隔离问题。由于集群只有一个名称节点,只有一个命名空间,困此无法对不同应用程序进行隔离。(4)集群的可用性。一旦此唯一的名称节点发生故障,会导致整个集群变得不可用。

  1.                (简答题, 5分)数据复制主要是在数据写入和恢复的时候发生,HDFS数据复制是使用流水线复制的策略,请阐述该策略的细节。

正确答案:HDFS数据复制使用流水线复制策略,大大提高了数据复制过程的效率。具体策略如下:(1)当客户端要往HDFS中写入一个文件时,此文件首先被写入本地,并被切分为若干个块,每个块的大小由HDFS的设定值来决定。(2)每个块都向HDFS集群中的名称节点发起写请求,名称节点会根据系统中各个数据节点的使用情况,选择一个数据节点列表返回给客户端,然后客户端就将数据首先写入列表中的第一数据节点,同时将列表传给第一个数据节点,当第一个数据节点接收到4KB数据时,写入本地,并且向列表中的第二个数据节点发起连接请求,将自己已经接收到的4KB数据和列表传给第二个数据节点,当第二个数据节点接收到4KB数据时,写入本地,并且向列表中的第三个数据节点发起连接请求,依次类推。列表中的多个数据节点形成一条数据复制贩流水线。(3)当文件写完时,数据复制也同时完成。

  1.                (简答题, 5分)试述HDFS是如何探测错误发生以及如何进行恢复的。

正确答案:HDFS检错和恢复主要包括如下3种情形:(1)名称节点出错。Hadoop提供两种机制确保名称节点的安全:一是将名称节点上的元数据信息同步存储到其他文件系统(如远程挂载的网络文件系统NFS)中,二是运行一个第二名称节点,当名称节点宕机后,可将第二名称节点作为一种弥补措施,利用第二名称节点中的元数据信息进行系统恢复。一般会将上述两种方式结合使用,当名称节点发生宕机时,首先到远程挂载的远程网络文件系统中获取备份的元数据信息,放到第二名称节点上进行恢复,并将第二名称节点作为名称节点来使用。(2)数据节点出错。每个数据节点会定期向名称节点发送心跳信息,向名称节点报告自己的状态。当数据节点发生故障,或者网络发生断网时,名称节点就无法收到来自一些数据节点的心跳信息,这时这些数据节点会被标记为宕机,节点上面的所有数据都会被标记为为不可读,名称节点不会给再它们发送任何I/O请求。此时,有可能出现一种情形,即一些数据块的副本数量小于冗余因子。名称节点定期检查这种情况,一旦发现某个数据块的副本数量小于冗余因子,就启动数据冗余复制,为其生成新的副本。(3)数据出错。客户端读到数据后采用MD5和SHA-1进行数据校验,以确定读取到正确的数据。在文件创建时,客户端会对每一个文件块进行信息摘要,并将此摘要写入同一路径的隐藏文件里面。当客户端对数据校验时发现数据错误,就会请求到另外一个数据节点读取该文件,并向名称节点报告这个文件块有错误,名称节点会定期检查并重新复制该文件块。

  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()函数关闭输入流。

  1.                (简答题, 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()方法通知名称节点关闭文件,完成一次正常的写入文件过程。

  1.                (简答题, 5分)试述HDFS的冗余数据保存策略。

正确答案:HDFS采用多副本方式对数据进行冗余存储。通常一个数据块的多个副本会被分配到不同的数据节点上,从而带来加快数据传输速度、易检查数据错误和保证数据的可靠性3个方面的优点。具体来说:1、第一个副本放置在上传文件的数据节点,如果是集群外提交,则随机挑 选一台磁盘不太满、CPU不太忙的节点。2、第二个副本放置在与第一个副本不同的机架的节点上。3、第三个副本与第一个副本相同机架的其他节点上 。4、更多副本的放置节点随机选取。

 

 

starry0214

订阅评论
提醒
guest

0 评论
最新
最旧 最多投票
内联反馈
查看所有评论