文章目录
- HadoopHA问答题
- 一、Hadoop中的压缩作为一种常用的优化手段,经常被用在什么场景下?
- 二、如果想要使用压缩,Hadoop如何对某一种压缩编码格式进行取舍?
- 三、你们公司常用的压缩方式有哪些?
- 四、从哪些方面定位MR执行的效率
- 五、如果想对MR程序进行优化,应该从哪些方面入手以及可能用到的优化手段?
- 六、在Hadoop针对小文件的处理方案有哪些?
- 七、如何解决MR中Reduce的数据倾斜问题?
- 八、大概简述一下 Hadoop每一代版本的新特性?
- 九、什么是Hadoop的HA?
- 十、描述一下HDFS-HA的工作机制?
- 十一、如何实现HA的集群搭建?
- 十二、HDFS如何实现自动故障转移?
- 十三、什么是脑裂问题?HDFS-HA中如何解决的脑裂问题?
- 十四、YARN-HA 实现高可用的思路
- 十五、简单说一下联邦架构(HDFS Federation) 架构设计思想。
HadoopHA问答题
一、Hadoop中的压缩作为一种常用的优化手段,经常被用在什么场景下?
执行MR任务时Mapper结束的时候对落盘的结果文件压缩,从而减轻Reduce任务的压力,进而提升整个MR的执行效率
MR执行前直接读压缩好的文件,也会提升效率,但是要注意压缩格式能不能切片的问题
在Reduce阶段结束的时候压缩,提升磁盘使用率
二、如果想要使用压缩,Hadoop如何对某一种压缩编码格式进行取舍?
根据业务需要综合考虑压缩率、压缩速度、是否支持切片、是否Hadoop自带
三、你们公司常用的压缩方式有哪些?
不经常使用、长久存储的情况,使用Bzip2压缩
MR中Mapper阶段落盘文件压缩的情况,使用Snappy(考虑压缩、解压缩速度)
四、从哪些方面定位MR执行的效率
硬件:
服务器配置
软件:
小文件场景、数据倾斜、不可切片压缩文件、shuffle阶段环形缓冲区配置不合理、文件合并次数过多
五、如果想对MR程序进行优化,应该从哪些方面入手以及可能用到的优化手段?
主要考虑优化IO和内存,可能用到以下手段:
-
读数据的阶段,如果面临大量小文件的场景,可以用CombineTextInputFormat来解决
-
Mapper阶段,减少溢写次数:
修改环形缓冲区比例 通过配置减少合并次数 不影响业务的情况下加入Combiner
-
Reduce阶段:
合理设置Reduce的Buffer--->减少落盘操作
六、在Hadoop针对小文件的处理方案有哪些?
- 数据输入阶段使用Hadoop专门针对小文件场景的CombineTextInputFormat实现
- uber模式实现JVM重用,但是一般不用这个方案,局限性比较大
- 在存储之前就合并小文件
七、如何解决MR中Reduce的数据倾斜问题?
需要join的场景下,尽量不用Reduce Join
对倾斜的业务数据,可以用一些手段打乱其输出分区,也可以根据业务自己自定义分区
八、大概简述一下 Hadoop每一代版本的新特性?
一代和二代间最大的新特性就是二代多了yarn
二代和和三代最大的新特性就是三代支持多NN,从而支撑HA高可用集群的实现
九、什么是Hadoop的HA?
HA高可用的愿景是让Hadoop集群在任何情况下都能正常提供服务,二代Hadoop的实现是搭建两台NN,一台Active对外服务,一台Standby替补,而三代可以搭建多台NN,一台Active,多台Standby
十、描述一下HDFS-HA的工作机制?
思想是通过多NameNode消除单点故障
1. 改变元数据管理方式:
1. 不同NN间各自保存一份元数据
2. 编辑日志只能Active状态的NN写,但是所有NN都能读
2. 实现一个状态管理功能模块
1. zk负责切换状态
3. NN隔离:同一时间有且仅有一台NN对外服务
4. 保证NN之间ssh免密登录
5. 实现自动故障转移
十一、如何实现HA的集群搭建?
搭建zookeeper集群、改hdfs-site.xml配置文件,改core-site.xml配置文件,改yarn-site.xml配置文件,配置HDFS-HA自动故障转移
十二、HDFS如何实现自动故障转移?
集群中的每台NN都绑定一个ZKFC服务,用于监视自己的健康状态,如果自己挂了, 由ZKFC告诉ZK,从而把ZK中保存自己健康状态的临时数据节点干掉,此时ZK通知其他Standby状态的NN,让他们来ZK里边抢着创建节点
这个临时节点谁先创建到,谁就是Active状态,那么没创建到临时节点的NN就只能是Standby状态
十三、什么是脑裂问题?HDFS-HA中如何解决的脑裂问题?
Active状态的NN假死,ZK通知其他NN来创建节点,但是假死的NN又活了,导致ZK不知所措的情况,就是脑裂问题
为了防止脑裂问题,如果遇到Active状态的NN挂掉,不管是真死还是假死,ZK都会通知其他NN来创建健康状态的临时数据节点,在其他NN成为新的Active状态之前,先远程登录到之前那个挂掉的NN上执行kill命令,让它死的彻底,然后新的NN上位,成为Active状态对外提供服务
十四、YARN-HA 实现高可用的思路
Active状态的RM向ZK集群写自己的状态,如果写入失败,启动Standby状态的RM,再次向ZK集群注册,注册成功后ZK同步RM的状态信息
十五、简单说一下联邦架构(HDFS Federation) 架构设计思想。
为了水平扩展名称服务,Federation使用多组独立的Namenodes/Namespaces。所有的Namenodes是联邦的,也就是说,他们之间相互独立且不需要互相协调,各自分工,管理自己的区域。Datanode被用作通用的数据块存储设备,每个DataNode要向集群中所有的Namenode注册,且周期性的向所有Namenode发送心跳和块报告,并执行来自所有Namenode的命令。