- 首次启动Namenode时怎么格式化?为什么要格式化?非首次启动时,是否只要成功启动了Namenode 和Datanode ,HDFS就能立刻对外提供服务?
- 1 会生成namenode文件目录结构
- 2 确定了三个ID namespace cluster blockpool
- 3 生成了fsimage_000
不会立刻对外提供服务,
namenode启动过程 :
- 开启安全模式
- 加载fsimage
- 逐个执行所有的Edits文件中的每一条操作讲操作合并到fsiamge,完成后生成一个空的edits
- 接受datanode提供的块信息和心跳信息
- 根据以上信息确定文件系统的状态
- 退出安全模式
退出安全模式的条件:
- 达到最小可用的datanode数量
- 副本数达到最小要求的block占系统总block的百分比
- 稳定时间 30s
调整HDFS上的数据块大小分别会造成哪些影响?可能出现的问题的解决方案
- 设置小数据块的影响:存放大量小文件会占用namenode中大大量内存来存储元数据,会增加寻址时间
- 设置大数据块的影响:磁盘传输数据的时间明显大于寻址时间,导致程序处理这块数据变得非常慢
大量小文件问题 :
- 从源头减少小文件
- 使用archive 打包
- 使用其他储存方式,如Hbase,ES等
简述Capacity Scheduler资源调度器算法启动具体到container的流程
Capacity Scheduler : 容量调度器
- 1 选择队列
- 从跟队列开始 ,使用深度优先算法找出资源占用率最低的叶子节点
- 2 选择作业
- 默认按照作业优先级和提交时间顺序选择
- 3 选择Container
- 取该作业中最高优先级的Container
如果优先级相同会选择满足 本地性的Container
node Local > Rack Local > Diffrent Rack
- 取该作业中最高优先级的Container
Capacity Scheduler 和 Fair Scheduler 不同点:前者不支持为每个队列单独设置调度策略,而后者支持
简述每个Container是如何决定启动的,并说明Container里面包含哪些内容?
-
container 包括的内容:
- 可使用的CPU 资源和内存资源
- 执行命令
- 环境变量
- 外部资源
-
1 用户向yarn提交应用程序 ,其中报告用户程序,相关文件,启动applicationMaster命令
-
2 ResourceManager 为该应用程序分配一个Container,并且与Container 所在的NodeManager 通信,要求NodeManager在这个Container中启动应用程序对应的applicationMaster
-
3 applicationMaster首先会向ResourceManager注册 ,用户可以直接通过ResourceManager查看应用程序状态,然后为它准备该应用程序各个任务申请资源,并监控他们的运行状态直到运行结束 重复4-7步骤
-
4 applicationMaster 采取轮询的方式通过RPC协议向ResourceManager申请和领取资源
-
5 一旦applicationMaster申请到资源后,便会与申请到的Container所对应的nodeManager进行通信,并且要求它在该Container中启动任务
-
6 任务启动,nodeManager为要启动的任务配置好环境,包括环境变量,jar包,二进制程序
-
7 各个任务通过RPC 协议向其对应的applicationMaster汇报自己的运行状态和进度,以让applicationMaster随时掌握各个人物的运行状态,从而可以再任务运行失败是重启任务
-
8 运行完毕后,applicationMaster会向ResourceManager要求注销自己
MapReduce性能瓶颈在哪,如何优化?
- 执行任务的时间很长 瓶颈 计算机性能
- I/O操作
- 1 数据倾斜
- 2 Map Reduce 数设置不合理
- 3 小文件过多
- 4 spill次数过多
- 优化 :
- 数据输入
- Map任务。特别大的文件和特别小的文件都会影响Map任务的性能。性能低下的代码也会有影响。(combiner )
- Reduce任务。数据倾斜(data skew),reduce的数量,未经优化的代码都会影响reduce的性能。
- IO传输
- 数据倾斜问题
- 常见的调优参数
yarn中的资源为什么要进行抽象?对集群的横向扩展有什么影响?
- 为了提升集群的利用率、资源统一管理, 使用YARN为上层应用提供统一的资源管理和调度的平台。