问题分析报告--读取ORC文件报seek错误
来源:互联网 发布:3g软件开发了解 编辑:程序博客网 时间:2024/06/08 11:42
1、问题描述
1.1 基本信息[Basic Information]
- 集群规模:37+3台物理机,每台128G内存;CPU:2*16C;SATA磁盘,2T*12
- hadoop社区版本:**
- 商业版本:FusionInsight_HD_V100R002C60U10
- MetaStore:高斯数据库(Postgresql)
1.2 问题描述[Problem Description]
- C60U10版本YARN集群在高并发任务状态下运行2天左右可能导致NM资源本地化性能下降,进而导致任务整体执行效率下降。
2、问题分析[Problem Analysis]
1.分析job性能变慢,主要体现为Container localized执行变慢
Task Slow logs:
Task Quick logs:
通过分析日志发现, container 执行变慢主要卡在ResourceLocalizationService锁的竞争上:
下图为随机挑选出来的一个container运行慢的时候的jstack打印信息,发现这个container等待这个锁等待了22s之久:
2. 分析锁内代码执行慢的原因:
通过获取操作系统的统计数据osinfo,发现在container localized过程中会调用ls命令获取本地目录的文件基本信息出现了X状态(Linux process state: X (TASK_DEAD - EXIT_DEAD), the exit status, the process is about to be destroyed.),该状态被捕捉多次,说明这个命令执行在os层占用时间较长。
3.排查ls变慢的原因,发现NM的堆外内存持续增长
1)NM的内存使用持续增长:
2)通过打印NM的堆外内存使用,发现大部分堆外内存使用均来自leveldb,内存分析截图如下:
利用pmap命令将NM使用的内存信息dump下来,然后用gdb将指定寻址空间的堆外内存dump到本地:
通过将二进制内存文件转化为可见字符,可知,当前的堆外内存主要来自leveldB。
4. NM堆外内存的持续上涨到一定程度后,会导致NM内部调用os的命令执行变慢,从而导致YARN的NM的container本地化锁竞争加剧,最终导致业务性能下降。最后,通过在生产环境上将NM的recovery特性关闭,消除了levelDB导致堆外内存持续上涨的问题,从而解决了业务执行48小时后会出现性能下降的问题。
3、根本原因[Root Cause]
分析为YARN的recovery特性会依赖leveldb,而leveldb的数据存储会占用堆外内存,从而导致堆外内存上涨,当堆外内存的堆积会导致os占用内存无法及时的释放,而在大量任务并发时,业务也需要占用大量内存,内存的紧张会导致任务在资源本地化的过程中执行os的“ls -ld” 命令变慢;同时每个contaienr的localized地方存在锁的竞争,命令执行变慢,会使该锁的竞争恶化,从而表现在业务运行一段时间后,性能逐渐变慢。
4、解决措施[Corrective Action]
4.1 最终解决措施[Solution]
- 通过关闭YARN的NodeManager的recovery特性,即配置yarn.nodemanager.recovery.enabled参数为:false
4.2 最终解决措施[Solution]
- 解决leveldb堆外内存上涨(C60U10SPC003补丁)
- 优化container 本地化锁(C60U10SPC003补丁)
- 将leveldb的数据目录规划到数据盘,不挂载到系统盘上(磁盘规划)
5、解决措施[Corrective Action]
4.1 最终解决措施[Solution]
- 问题分析报告--读取ORC文件报seek错误
- presto源码分析(hive orc读取)
- Java API 读取Hive Orc文件
- presto对orc文件的读取
- Java API 读取Hive Orc文件
- 读取XML文件时,总报“前言中不允许有内容”错误-分析
- python之文件读取seek(),tell()函数
- ORC格式文件读取
- MapReduce 读取ORC格式文件
- Python问题:求助,在使用seek函数时,发现文件若有汉字,出现错误
- HDFS 读取、写入、遍历目录获取文件全路径、append文件创建或者写入报错问题分析
- MapReduce读写orc文件
- .net 大文件分页读取示例(seek,read)
- Python3--文件读取、写入、追加及seek()方法的使用
- python 读取文件时next和seek的应用
- 关于Xml文件读取报错的问题
- 今天编译的时候遇到问题 报告R文件错误..
- orc
- EntityFramework 生成MySQL模型出错
- 论文笔记 —— SRCNN
- Struts2学习7-(验证码)
- test
- Copy Control and Resource Management(valuelike or pointerlike)
- 问题分析报告--读取ORC文件报seek错误
- Jupyter Notebook的使用
- V4L2(三)编写虚拟摄像头驱动
- Ubuntu系统信息查询
- 动态规划(一):动态规划的基本概念和基本方程
- C# UDP接收和发送
- Js function参数判断
- 【DAY.3】PHP数据结构与算法_排序_选择排序
- 最后复习之最小生成树