HDFS面试题

HDFS面试题

1、Hdfs的block和spark的partition有什么区别吗?

  1. 在hdfs中的block是分布式存储的最小单元,等分,并且可以设置冗余,这样设计会出现一部分磁盘空间的浪费,但是整齐的block大小,便于快速找到,读取对应的内容,例如快手利用hdfs来进行存储视频。
  2. Spark中的parition是弹性分布式数据集中rdd的最小单元,rdd是由分布在各个节点上的partition组成的。partition是指在spark计算过程中,生成的数据在计算空间内的最小单元,同一份数据,parition 大小不一,数量不定,是根据app的算子和最初读取的数据分块数量来决定的,例如spark读取hdfs的数据,这个时候调用的是hadoop底层的inputformat所以,一个快就是一个partition。
  3. block位于存储,partition位于计算,block大小是固定的,parition的大小是不固定的。

2、Mapreduce和spark都是并行计算,他们之间有什么区别吗?

  1. mapreduce只有一个map和reduce方法,但是spark有很多多种多样的算子,表达性好
  2. spark可以进行迭代计算,mapreduce需要进行手动操作
  3. hadoop的一个作业叫做job,job分为maptask和reducetask,每个task都是在自己的进程中执行,当task结束的时候,进程也会结束
  4. spark的作业叫做application,一个app对应了一个sparkcontext,一个app中对应了多个job,每个action算子都会产生一个job,一个job中有多个stage,这些stage是根据划分shufflfle的stagescheduler来进行划分的,依据的是血缘关系,每个stage中有多个task然后把这些task组成taskset然后通过taskscheduler来发送到各个executor中进行执行,exector中生命周期是和app一样的,计算没有job执行,这些exector也是存在。
  5. spark的迭代计算的。可以通过dag来进行容错,但是mapreduce的迭代计算是需要手动的。

3、Spark比Mapreduce快?为什么快呢?快在哪里呢?

  1. 基于内存计算,减少低效的磁盘交互
  2. 高效的调度算法,基于DAG
  3. 容错机制Lingage,主要是DAG和Lianage,即使spark不适用内存技术,也大大快于mapreduce

4、HDFS写数据流程

  1. 往hdfs目录树中添加INodeFile
  2. 添加契约,也就是当前仅有一个客户端可以操作这个文件(后台会有一个线程来实时监控契约队列,会有一个续约操作)
  3. 启动DataStreamer来进行写数据的操作,启动续约线程。
  4. 然后将我们的文件是一个个的shunk的写入到packet里面,然后将packet放入到dataqueue里面等待发送
  5. 向namenode去申请block,也就是返回可用的datanode节点(数据的负载均衡,也就是机架感知和其他的一些策略)
  6. 建立datanode之间的数据管道
  7. 先把要写出的数据添加到ackqueue上,然后写数据,移除dataqueue中的packet,假如这个时候写数据失败了,就把ack中的数据添加到dataqueue上重新写
  8. 然后datanode会初始化一个packetResponder的线程,进行将我们的数据写入到ack队列,这个是datanode中的队列,同事会获取到其他datanode的处理结果,将数据写入磁盘,然后依次层层上报给我们的客户端,写失败了,还是有ack机制,重新发送。
  9. 如果数据管道建立失败了。就删除向namnode申请的block,然后重新建立block和建立数据管道
  10. 假如在datanode写数据流程中出问题,那么这个时候会分为两个流程,先判断是几个副本写失败了,如果是3个副本的情况下,》=2的时候这个时候就会删除block,然后重新建立管道,如果是一个的话,那么这个时候没事,重新建立管道,这个时候抛弃那一台坏的,好的留下。

5、有一个很大的文件,内存装不下,如何实现去重?

1、首先对每一行数据进行hash

2、将每行数据hash出来之后然后%1000。

3、针对每个文件进行去重这个时候应该就可以了。

6、HDFS的压缩算法

1、SNAPPY

优点:高速压缩速度和合理的压缩率

缺点:不支持split;压缩率比gzip要低;hadoop本身不支持,需要安装;当mapreduce作业的map输出的数据比较大的时候,作为map到reduce中间的数据的压缩格式,或者作为mareduce作业的输出和另外一个mapreduce作业的输入

2、LZO

优点:压缩/解压速度也比较快,合理的压缩率。支持split,是hadoop中最流行的压缩格式。可以再linux系统下安装lzop命令,使用方便

缺点:压缩率比gzip要低一些;hadoop本身不支持,需要安装;在应用中对lazo格式的文件需要做一些特殊处理(为了支持split需要建索引,还需要指定inputformat为lzo格式)。

应用场景:一个很大的文本文件,压缩之后还大于200M以上的可以考虑,而且单个文件越大的有点也越明显

7、datanode在什么情况下不会备份

如果设置副本数为1,则不会进行备份。

8、三个datanode当有一个datanode出现错误会怎么样?

出现错误的时候无法和namenode进行通信,namenode要去确认namenode是不是宕机了,这段时间称为超时时长,hdfs默认时间是10分钟30秒,确认该datanode宕机后,hdfs的副本数会减1,然后namenode会将宕机的datanode的数据复制到其他机器上

9、有一个200M的文件写入hdfs是先写128M复制完之后再写72M还是全部写完再复制?

HDFS上在写入数据的时候,首先会对数据切块,然后从客户端到datanode形成一个管道,在至少将一个文件写入hdfs上后,表示文件写入成功,然后进行复制备份操作,所以是全部写完再复制

10、HDFS里面的edits和fsimage作用?

  1. fsimage文件其实是hadoop文件系统元数据的一个永久性的检查点,其中包含hadoop文件系统所有目录和inode的序列化信息,也就是目录树
  2. edits文件存放的是hadoop文件系统的所有更新操作的路径,文件系统客户端执行的所以写操作会被记录到edits文件中。

fsimage和edits文件都是经过序列化的,在namenode启动的时候,它会将fsimage文件中的内容加载到内存中,之后再执行edits文件中的各项操作,使得内存中的元数据和实际的同步,存在内存中的元数据支持客户端的读操作。

namenode起来之后,hdfs中的更新操作会重新写到edits文件中,因为fsimage文件一般都很大(GB级别的很常见),如果所有的更新操作都会往fsimage文件中添加,这样会导致系统运行的十分缓慢,但是如果往edits文件里面写就不会这样,每次执行写操作之后,且在向客户端发送成功代码之前,edits文件都需要同步更新。如果一个文件比较大,使得写操作需要向多台机器进行操作,只有当所有的写数据都执行完毕之后,写操作才会返回成功,这样的好处是任何的操作都不会因为机器的故障而导致元数据的不同步。

11、当小文件数量过多时,如何解决小文件问题

当每个小文件数据量比较小的时候,可以通过命令的方式进行小文件的合并如:hadoop fs -cat

hdfs://cdh5/tmp/lxw1234/*.txt | hadoop fs -appendToFile - hdfs://cdh5/tmp/hdfs_largefile.txt,当

数据量比较大的时候建议使用MR进行小文件的合并

12、介绍一下hadoop中的rpc协议,以及底层采用什么来进行封装的

用户将用户请求中的参数或者应答转换成字节流以便跨机传输。

函数调用层:函数调用层主要功能是定位要调用的函数,并执行该函数,hadoop采用了java的反射机制和动态代理实现了函数的调用。

网络传输层:网络传输层描述了client和server之间消息的传输方式,hadoop采用了基于tcp/ip的socket机制。

13、hadoop出现文件块丢失怎么处理?

首先要定位到哪的文件块丢失,可以通过查看日志进行检查和排除,找到文件块丢失的位置后,如果文件不是很重要可以直接删除,如果删除不了,每个集群都会有备份,可以通过心跳来进行恢复

14、Namenode的职责

主节点,存储文件的元数据(文件名,目录树,文件属性,生成属性,副本数,文件权限)以及每个文件的块的对应关系,以及块在那些datanode上的信息等。周期性的接受心跳和快的状态报告信息。包含该datanode上所有数据块的列表

若接受到心跳信息,nn认为dn工作正常,如果10分30秒后海接受不到dn的心跳,那么nn认为dn已经宕机。这个时候nn准备要把dn上的数据进行重新的复制。块的状态报告包含了一个dn上所有数据块的列表,block report每个小时发送一次。

15、HDFS的存储机制

  1. 数据块

每个磁盘都有默认的数据块大小,这是磁盘进行读写的基本单位,构建于单个磁盘智商的文件系统通过磁盘块来管理文件系统中的块。该文件系统中的块,一般为磁盘块的整数倍,磁盘块一般为512字节,hdfs也有块的概念,默认为128M,HDFS上的数据被均匀分布到多个分块中。与其他文件系统不同的是,hdfs中小于一个快大小的文件不会占据整个块的空间。

HDFS用块存储带来的第一个明显的好处 一个文件的大小可以大于网络中任意一个磁盘的容量。数据块可以利用磁盘中任意一个磁盘进行存储,第二个简化了系统的设计,将控制单元设置为块,可简化存储管理,计算单个磁盘能存储多少块就相对容易,同时也消除了对元数据的顾虑,如权限信息,可以由其他系统单独管理。

  1. datanode节点

datanode是hdfs文件系统的工作节点,他们根据需要存储并且所数据块,受namenode节点调度,并且定期向namenode发送她们所存储的块的列表

  1. namenode节点

namenode管理hdfs文件系统的命名空间,它维护者文件系统树以及整棵树所有的文件和目录,这些文件一两种形式永久保存在本地磁盘上。

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值