【面试题篇-1】HDFS面试题
1.HDFS是什么?
答:HDFS是一个分布式文件存储系统,用来满足对用户的行为数据或者业务数据存储以及数据获取的一个系统,里面数据是以块来进行存储的。
2.你刚才提到了块的概念,HDFS中块的大小以及设计成块的好处是什么?
答:在Hadoop1.0,块一般是64M,但在Hadoop2.0,块一般是128M,但是块的大小是可以通过配置参数dfs.blocksize设置的,块的设计有三点好处
1)支持大规模文件存储
2)简化系统设计
3)数据备份非常方便
3.你刚才提到块设置成64M或者128M,为什么这么设计?
答:主要好处有两点:
1)增大数据的存储,因为本身就是针对大数据来进行存储,如果设置太小的话,这涉及到里面nameNode以及dataNode寻址的时间
2)当然第二个好处就是降低寻址所需要用的时间
4.你刚才说了寻址,寻址是什么能简单介绍一下吗?
答:对于一个用户来获取数据,首先HDFS需要找到元数据的存放的目录也就是存放在nameNode中,这是一级寻址,其次通过该目录找到相应的数据节点,也就是存放在dataNode中,最后才是到相应的数据节点上获取到相应数据,还是上面那个问题所提到的,如果块设计的太小了,在这nameNode中会有非常多的块,设置太小了只会增大它的寻址时间,但是也不能设置太大,太大了会影响MapReduce的操作效率。
5.你刚才说了nameNode和dataNode,这两个东西分别用来做什么的?
答:首先简单介绍一下他们的概念,nameNode见名知意,叫名称节点,和dataNode叫数据节点,实际上他们是主从的关系,nameNode主要有以下几个功能:
1)文件是什么
2)文件被分为了多少块
3)文件与块之间的映射关系
4)每个块被存放到了哪个服务器上面
nameNode起到了目录的作用,而dataNode主要的功能是存放具体的数据,数据一般存放到磁盘当中也就是本地的linux系统中
6.你刚才说了nameNode这么多功能,难道我数据如果有增量或者其他操作,就直接在这个nameNode上做处理吗?会不会消耗太多时间了?
答:从大体来说是这么理解的,但是nameNode有细分的两个子模块,分别为FSImage和EditLog,是通过这两个子模块实现数据的增量操作
7.那你简单介绍一下FSimage和EditLog的内容吧
答:Fsimage主要是用来存储元数据,什么是元数据呢?就是用来描述数据的一些相关信息的数据称为元数据,具体有如下几点功能:
1)文件的复制等级
2)修改和访问时间
3)块大小以及组件文件的块
4)访问权限
而EditLog见名知意,主要是用来记录数据进行存储如创建、删除、重命名等操作的数据
8.你刚才说了FSimage和editLog这么多功能,但是你一开始说nameNode有目录的作用,为什么没有看到你刚才介绍的这两个内容有目录的作用,我怎么知道哪个数据块存放到了哪个节点上呢?
答:是的,首先这一部分的信息是存放在内存当中的,块的存放信息主要是通过nameNode和dataNode交互来实现的,具体来讲就是在当数据节点nameNode加入到一个集群当中,它会向nameNode汇报自己节点存放了哪些数据,然后nameNode会构建一个目录清单,然后保存到内存当中,在运行的过程中,nameNode也是通过不定期的汇报,达成数据块存放信息的快速更新操作
9.小伙子对基本概念还是了解的挺透彻的嘛,那你讲一讲nameNode每次启动,底层链路都做了哪些事情?
答:首先咱们可以通过shell命令start启动nameNode,然后FSImage会从磁盘中加载到内存当中,同理Editlog也一样,然后两者会进行合并操作,得到新的FSImage,而此时就会保存新的FSImage,而旧的FSImage会被删除,然后再创建一个新的Editlog用来存放新的操作信息。
10.为什么要设计成FSImage和EditLog呢?我直接在FSImage上面进行操作不可以吗?
答:从实现性来讲当然可以,但是我们都知道HDFS保存的可是非常大量的数据,而nameNode又是存放元数据的地方,如果每次有增量或者其他操作,都是围绕着它进行,会使得系统性能降低,所以才使用一个editLog来存放对数据的一些操作的行为数据
11.那也有一个问题啊,editLog越来越大该咋办?
答:(卧槽,能咋办,当然是消费掉,内心bb)这里就引伸到了第二名称节点这个玩意了,也就是secondaryNameNode,这个secondaryNameNode会定期去通知nameNode暂停对editLog的存储,那么当secondaryNameNode发送了这个请求后,nameNode会立刻暂停对editLog的操作,生成edits.new,用来保存新的操作行为,然后secondaryNameNode通过http请求就会去磁盘中将FSimage和旧的EditLog给拉到自己的服务器本地中,将两个文件进行合并处理,再发送给NameNode,然后此刻nameNode就会将刚才的Edit.new文件改为EditLog文件,进行如上的循环操作。
12.你上面说了HDFS那么多好处,那么它有什么局限性吗,能简单介绍一下吗?
答:主要有以下几点局限性
1)命名空间的限制:因为nameNode名称节点是存放到内存当中的,所以节点能够存放的对象是会受到服务器内存空间大小的限制的
2)性能瓶颈:上面其实也说到了,整个分布式文件系统都是通过这个nameNode和外界进行一系列交互,当然吞吐量局限于单个nameNode的吞吐量
3)隔离问题:由于集群只有一个nameNode,只有一个命名空间,因此无法对不同的应用程序进行隔离
4)集群的可用性:这个主要是发生在hadoop1.0版本中,因为1.0版本采用了一个节点nameNode来存放,所以一旦这个服务器节点挂掉了,会导致整个服务瘫痪,整个集群不可用,也就是常说的单点问题。
13.你刚才说的这个集群的可用性问题,你之前不是说了有secondaryNameNode吗?既然是第二名称节点,为啥不能顶替nameNode继续进行工作呢?
答:这个secondaryNameNode实际上是冷备份存放数据的,什么是冷备份呢?就是当nameNode挂掉了,需要有一定的时间来完成数据的同步,但是在这段时间内,集群依然是不可用的状态的,也就是还是停止的状态,所以secondaryNameLode满足不了集群可用性的问题,但是在hadoop2.0当中,就不止一个nameNode,而是有两个nameNode分布在不同的节点上,以及数据也是热备份,可以很好的解决上述的问题。
今天就到这里,下文介绍hdfs存储以及访问相关面试题,感谢大家观看!