hadoop面试常见问题及相关总结

1.       Map任务将其输出写入本地磁盘,而非HDFS,为什么?

答:因为map的输出是中间结果:该中间结果由reduce任务处理后才产生最终的结果。

而且一旦作业完成,map的输出结果就可以删除。因此如果把它存储在HDFS中并实现备份,难免有小题大做。

2.       为什么最佳分片大小应该和块(block)大小相同(hadoop2.x默认是128Mb,hadoop1.x是64Mb)?

答:因为它是确保可以存储在单个节点上的最大输入块的大小。如果分片跨越两个数据块,那么对于任何一个HDFS节点,基本上都不可能同时存储这两个数据块,因此分片中的部分数据需要数据通过网络传输到map任务节点。与本地数据运行整个map任务相比,这种方法显然效率更低。

3.       Combiner的作用是什么?

答:Combiner属于优化方案,把map的输出结果进行合并之后作为reduce的输入,减少map和reduce任务之间的数据传输,不管调用combiner多少次,reducer的输出结果都是一样的。

4.       为什么HDFS不适合存储小文件?

答:由于namenode将文件系统的元数据存储在内存中,因此该文件系统所能存储的文件的总数受限于namenode的内存容量,根据经验,每个文件、目录和数据块的存储信息大约占150个字节。所以大量的小文件会占用大量的namenode的内存空间,因此HDFS不适合存储大量的小文件。

5.       为什么HDFS中的块如此之大的好处和坏处?

答:首先是好处:HDFS中的块比磁盘中的块大,其目的是为了最小化寻址开销。如果块设置得足够大,从磁盘传输数据的时间会明显大于定位这个块开始位置所需的时间。因而,传输一个有多个块组成的文件的时间取决于磁盘传输速率。

         坏处:如果块(block)的大小过于大之后,有可能会造成在读取相关数据的时候队某个块同时产生大量的IO请求,导致阻塞。

6.       Hadoop为namenode容错提供的两套机制?

答:第一种机制备份那些组成文件系统元数据持久状态的文件。Hadoop可以通过配置使namenode在多个文件系统上保存数据的持久状态。这些写操作是实时同步的,是原子操作。一般的配置时,将持久的状态写入本地磁盘的同时,写入一个远程挂在的网络文件系统(NFS)。

         第二种可行的方法就是运行一个辅助的namenode,但它不能被用作namenode,这个辅助的namenode的重要作用是定期通过编辑日志合并命名空间镜像,以防止编辑日志过大。这个辅助的namenode一般在另外一台单独的物理计算机上运行,因为它需要占用大量的CPU时间与namenode相同容量的内存来执行合并操作。它会保存合并后的命名空间镜像的副本,并在namenode发生故障时启用。但是,辅助namenode保存的状态总是滞后于主节点,所以在主节点全部失效的时候,难免会丢失部分数据。在这个时候一般情况是,把存储在NFS上的namenode元数据复制到辅助namenode并作为新的主namenode运行。

7.       HDFS副本存放策略?

答:Hadoop默认的布局策略是在运行客户端的节点上放置第一个副本(如果客户端运行在集群之外,就随机选择一个节点,不过系统会避免挑选那些存储太满或太忙的节点)。第二个副本放在与第一个不同且随机另外选择的机架中的节点上,第三个副本与第二副本放在同一机架上,且随机选择另外一个节点。其他副本放在集群中随机选择的节点上,不过系统会尽量避免在同一个机架上放太多副本。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值