
# ALM-19039 RegionServer平均单Store下StoreFile数量超阈值
#### 告警解释
系统每30秒周期性检测HBase RegionServer实例的StoreFile数量和Store数量，进行相除求平均，并把结果与阈值相比较，默认当连续5次检测到请求数超出告警阈值（默认为20）时产生该告警。
当HBase RegionServer实例上平均单Store下StoreFile数量小于或等于阈值时，告警恢复。
本章节仅适用于MRS 3.6.0-LTS及之后版本。
#### 告警属性
| 告警ID  | 告警级别 | 是否可自动清除 |
|:---|:---|:---|
| 19039 | 重要   | 是       |
   
#### 告警参数
| 类别   | 参数名称      | 参数含义       |
|:---|:---|:---|
| 定位信息 | 来源        | 产生告警的集群名称。 |
| 定位信息 | 服务名       | 产生告警的服务名称。 |
| 定位信息 | 角色名       | 产生告警的角色名称。 |
| 定位信息 | 主机名       | 产生告警的主机名。  |
| 附加信息 | Threshold | 产生告警的阈值。   |
   
#### 对系统的影响
RegionServer平均单Store下StoreFile数量超过阈值，表示该RegionServer存在单Store下StoreFile数量过多的情况，会对HBase业务读操作造成压力，导致读性能下降和Compaction任务压力较大，最终可能导致写入反压。
#### 可能原因
- 集群写入压力过大，Compaction队列积压。
- Compaction任务未正常执行，例如关闭了自动Major Compaction，且未人工保证定时执行Major Compaction或关闭了Compaction动作。
- HBase Region分区不合理，写操作数据集中到某几个Region中或RegionServer上。
 
#### 处理步骤
1. 登录Manager界面，选择"运维 \> 告警 \> 告警"，选择"告警ID"为"19039"的告警，查看"定位信息"中产生该告警的HBase服务实例和主机名。
**检查HBase Compaction任务压力**。
2. 观察上报告警的相同节点是否存在"ALM-19018 HBase合并队列超阈值"告警。 
   - 是，执行[步骤 3]。
   
   - 否，执行[步骤 5]
   
   
   
   
3. 参考"ALM 19018 HBase合并队列超阈值"的处理步骤处理该故障。
4. 等待几分钟后检查本告警是否恢复。 
   - 是，处理完毕。
   
   - 否，执行[步骤 5]。
   
   
   
   
**检查HBase Compaction任务是否正常执行**。
5. 在Manager首页，选择"集群 \> 服务 \> HBase\> 配置"，在搜索框中搜索"hbase.hregion.majorcompaction"，并查看该参数值是否为"0"。
   
   - 是，执行[步骤 6]。
   
   - 否，执行[步骤 8]。
   
   
   
   
6. "hbase.hregion.majorcompaction"参数值为"0"表示自动Major Compaction被禁用。需要业务运维侧自行对齐执行Major Compaction时间，优先选择业务低峰期，以保证Major Compaction任务定期正常执行。
   
   其中，Major Compaction操作可在**hbase shell** 中通过以下命令查看不同合并对象的具体命令示例，再手动执行**major_compact**操作：
   ```
   help 'major_compact'
   ```
   
   
7. Major Compaction任务执行完成后，等待几分钟检查本告警是否恢复。 
   - 是，处理完毕。
   
   - 否，执行[步骤 8]。
   
   
   
   
8. 在Manager首页，选择"集群 \> 服务 \> HBase\> 配置"，在搜索框中搜索"hbase.hstore.compaction.min"，并查看该参数值是否大于告警上报阈值（默认值为20）。
   
   - 是，执行[步骤 9]。
   
   - 否，执行[步骤 11]。
   
   
   
   
9. Minor Compaction将因单Store下的StoreFile没有达到触发阈值而不执行，业务运维侧需评估业务风险以及参数配置合理性。根据实际需求调整相关配置，并重启RegionServer使配置生效。
10. 等待一段时间后检查本告警是否恢复。 
    - 是，处理完毕。
    
    - 否，执行[步骤 11]。
    
    
    
    
11. 选择"集群 \> 服务 \> HBase \>实例"，单击上报告警的RegionServer实例，选择"图表"，在"图表分类"中选择"队列"，查看"队列大小"监控图表，确认"Compaction操作队列大小"是否为"0"。
    
    - 是，执行[步骤 12]。
    
    - 否，执行[步骤 14]。
    
    
    
    
12. 确认当前集群资源能够正常执行Minor Compaction操作，并在**hbase shell** 中执行以下命令：
    
    ```
    compaction_switch 'true'
    ```
    该命令将返回各RegionServer的Compaction线程池之前状态，若返回"Servername 'false'"， 即表示此前对应RegionServer上的Compaction任务被关闭。
    
    
13. 执行完手动命令后，等待一段时间后检查本告警是否恢复。 
    - 是，处理完毕。
    
    - 否，执行[步骤 14]。
    
    
    
    
**检查HBase Region分区是否存在不合理**。
14. 在Manager首页，选择"集群 \> 服务 \> HBase"，在"概览"页面单击"HMaster Web UI"右侧的超链接进入HBase WebUI页面，在"Home"页面的" Region Servers"区域单击上报告警的RegionServer名称进入详细信息页面，在"Regions"区域选择"Storefile Metrics"页签，对指标中的"Num.Storefiles"进行排序，查看并记录该值超过"20"的"Region Name"列中的表名，"Region Name"的格式为"*表名* ,*startkey* ,*时间戳* ,*encodedRegionName*"。
15. 返回HBase WebUI的"Home"页面，在"Tables"区域单击查看到的表名称进入对应表信息页面，在"Table Regions"区域对"Num.Storefiles"进行排序，确认是否存在某几个Region下StoreFile数量突出，且数据量远大于其余Region。 
    - 是，执行[步骤 16]。
    
    - 否，执行[步骤 18]。
    
    
    
    
16. 在**hbase shell** 中执行以下命令对Region进行分裂操作，以均衡该Region数据分布：
    
    ```
    split 'RegionName'
    ```
    
    
17. 执行完手动命令后，等待一段时间后检查本告警是否恢复。 
    - 是，处理完毕。
    
    - 否，执行[步骤 18]。
    
    
    
    
**收集故障信息**
18. 在Manager界面，选择"运维 \> 日志 \> 下载"。
19. 在"服务"中勾选待操作集群的"HBase"。
20. 单击右上角的时间编辑按钮，设置日志收集的"开始时间"和"结束时间"分别为告警产生时间的前后10分钟，单击"下载"。
21. 请联系运维人员，并发送已收集的故障日志信息。
 
#### 告警清除
此告警修复后，系统会自动清除此告警，无需手工清除。
#### 参考信息
不涉及。
