历史版本的SmartData(3.0.x~3.5.x)服务存在已知缺陷可能会造成缓存数据出现损坏,导致读取数据内容发生异常。本文为您介绍缺陷影响,缺陷方案以及缺陷修复流程。
缺陷影响
- 缺陷影响的组件:打开SmartData数据缓存功能的所有组件。
重要 如果集群部署了SmartData,但确定不会使用缓存可以忽略本缺陷。
SmartData支持JindoFS Cache模式和JindoFS Block模式两种缓存模式。
- 缺陷影响的版本:
- EMR版本:3.30.x、4.5.x、3.32.x、4.6.x、3.33.x、4.7.x、3.34.x、4.8.x、3.35.x、4.9.x。
- SmartData版本:3.0.x、3.1.x、3.2.x、3.3.x、3.4.x、3.5.x。
- 缺陷级别:严重,建议修复,概率性发生时会出现数据正确性问题。
- 缺陷发生现象:如果集群启用JindoFS Cache模式(即设置数据缓存参数jfs.cache.data-cache.enable为true)或者使用了JindoFS Block模式(Block模式默认启用缓存),则数据缓存会出现小概率数据污染的情况,从而导致作业读取数据时报错。例如,作业对源数据读取报数据内容不正确的错误(ORC或Parquet文件格式无法解析)或HBase报HFile格式错误等。
缺陷修复方案
由于历史版本缓存损坏问题是由于Storage Service的小文件合并(compaction)流程的缺陷导致,通过修改compaction配置关闭该优化路径并重启SmartData服务,即可避免该问题的产生。如果已发生该问题,优先关闭缓存开关及时止损,以消除缓存数据的影响,尽快恢复线上业务;如果您仅启用了Cache模式,没用使用Block模式,则可以使用工具对集群全部缓存进行全量清理,彻底格式化缓存系统,从而清除集群中所有可能损坏的缓存块,清理完成后可以重新启用缓存。
修复流程
常规修复
如果所在集群尚未发生该问题,则可以通过关闭小文件合并的优化路径,彻底避免该问题。
- 在EMR控制台SmartData服务页面,添加自定义配置。
- 重启Jindo Storage Service。
紧急修复
对于已发生该问题的情况,请按以下步骤及时恢复业务,并进行缓存修复: