数据规模很大和工作负载密集的情况下, 比如说在处理Mapper, Reducer运行过程的数据时进行压缩, 以减少磁盘IO, 提高MR的运行速度
2. 如果想要使用压缩,Hadoop如何对某一种压缩编码格式进行取舍?从多方面来看, 首先判断是否属于Hadoop自带, 其次需要看其是否支持切分, 换成压缩格式后, 原来的程序是否需要修改, 然后就是看性能了, 压缩速度和解压速度.
3. 你们公司常用的压缩方式有哪些?Gzip
Bzip2
Lzo
Snappy…
一方面是看计算机性能, 如CPU, 内存, 磁盘健康, 网络等会影响MR的执行效率; 另一方面是靠I/O操作优化, 如果数据发生倾斜, Map和Reduce数设置不合理, 或者是Map运行时间太长, 导致Reduce等待时间过久, 又或者是MR需要处理的小文件过多, 还是处理大量的不可切片的超大压缩文件都会导致MR执行慢. 部分操作次数太多的话也会对MR的执行效率产生影响, 比如Spill次数过多, 或者是Merge次数过多都会影响效率.
5. 如果想对MR程序进行优化,应该从哪些方面入手以及可能用到的优化手段?我们可以从六个方面入手: 数据输入, Map阶段, Reduce阶段, IO传输, 数据倾斜问题和常用的调优参数.
在数据输入方面, 优化手段可以采用在执行MR任务前合并小文件和采用CombineTextInputFormat来作为输入; 在Map阶段通过减少溢写(Spill)次数以及减少合并(Merge)次数才进行优化, 换壳在Map之后, 不影响业务逻辑的前提下, 先进性Combine处理, 从而减少I/O; 在Reduce阶段, 我们可以通过合理设置Map和Reduce数以及设置Map和Reduce共存, 尽量规避使用Reduce, 也可以通过合理设置Reduce端的Buffer来对MR程序进行优化; 在IO传输的阶段我们可以采用数据压缩的方式(通常我们使用的是Snappy+Lzo)以及使用SequenceFile二进制文件进行优化.
我们在执行MR任务时, 会遇到很大合并小文件的场景, 我们需要在执行MR 任务之前将小文件进行合并, 大量的小文件会产生大量的Map任务, 增大Map任务装载次数, 而任务的装载比较耗时, 我们就需要在数据采集地时候, 就将小文件或小批数据合成大文件再上传HDFS; 我们也可以在业务处理之前进行优化, 再HDFS上使用MapReduce程序对小文件进行合并; 或者在MapReduce处理时, 采用CombineTextInputFormat来作为输入,进而提高效; 还有一种方法, 开启uber模式, 实现jvm重用.
7. 如何解决MR中Reduce的数据倾斜问题?最简单的就是使用Map Join, 尽量避免使用Reduce Join; 其次也可以通过对原始数据进行抽样得到的结果集预设分区边界值, 或者也可以通过自定义分区来实现; 当然使用Combiner也可以大量地减小数据倾斜问题
8. 大概简述一下 Hadoop每一代版本的新特性?Hadoop2.x新特性: 实现了集群间得的数据拷贝, 解决了小文件存档问题, 开启了回收站功能
Hadoop3.x新特性: 实现了多NN的HA架构, 提出了纠删码策略
所谓的HA(High Availablity), 就是高可用, 也就是7*24小时不中断服务
10. 描述一下HDFS-HA的工作机制?通过多个NameNode消除单点故障
11. 如何实现HA的集群搭建?(用话术描述即可!!!)先 在/opt/module/下创建文件夹ha, 然后将目前hadoop安装目录拷贝到/opt/module/ha下, 我们还需要删除一些多余的目录文件, 保证集群式一个初始化的状态, 需改相关的配置文件和每台机器的HADOOP_HOME的环境变量, 进行分发, 接着在三台机器的各个JournalNode节点上启动服务, 随即在hadoop102 的nn1上进行格式化, 并启动, 将nn1的元数据信息同分布到nn2和nn3上, 在另外两台机器上分别启动nn2和nn3, 我们可以通过web地址访问nn1 nn2 nn3, 最后在每台机器上启动DN, 将其中的一个nn切换成active状态, 查看是否切换成功, 如果成功的话, 就证明我们的高可用集群HDFS部分已经搭建完毕; 搭建Yarn高可用集群首先需要修改相关配置文件, 进行分发, 在任意的机器上启动Yarn, 通过访问web地址验证, 测试Yarn故障自动转移.
12. HDFS如何实现自动故障转移?HDFS 要想实现故障自动转移需要依靠两个新组件: Zookeeper和ZKFailoverController(ZKFC)进程. 自动故障转移主要依赖于Zookeeper的故障检测, 现役NN选择机制, 以及ZKFC的健康监测和Zookeeper的会话管理. 当HDFS的HA集群开启时, 每一台NN都会绑定一个ZKFC服务, 充当自己的经纪人, ZKFC负责访问ZK集群, 在ZK集群中创建一个临时的数据节点, 对外提供服务, 为Active状态, 其余机器为StandBy状态. 接下来当NN挂掉后, ZKFC就会监测到NN的健康状态异常, 随即于ZK集群断开连接, 并且通知其他状态为StandBy的机器准备开始对外提供服务, 当其接收到通知后就开始准备, 那台机器先准备好就切换为Active状态, 在这之前先将之前的Active状态的机器kill掉, 就可以正常对外提供服务了.
13. 什么是脑裂问题?HDFS-HA中如何解决的脑裂问题?出现了两台机器为Active状态, 在新节点正式成为Active状态之前, 远程登陆到之前状态为Active的机器上执行kill命令, 强行将之前Active状态的机器杀死., 然后新节点所在机器正常向外提供服务
14. YARN-HA 实现高可用的思路搭建Yarn高可用集群首先需要修改相关配置文件, 进行分发, 在任意的机器上启动Yarn, 通过访问web地址验证, 测试Yarn故障自动转移
15. 简单说一下 联邦架构(HDFS Federation) 架构设计思想。(了解)使用多个NameNode进行管理



