最近遇到一个比较怪异的问题:
一个从HDFS读取计算好的数据写入ES的任务,3E条(134.6G)左右的数据量,正常同步时间为36min左右,但是时不时出现同步时间翻了好几倍的情况
首先怀疑是hadoop集群或者spark资源分配问题,(因为之前出现过集群配置问题导致读取HDFS文件慢的问题)于是在同步任务同时间做了一些读取相同文件夹下相同文件注释掉写入ES操作的测试:
发现读取HDFS文件都是40s左右,排除读取文件的原因
同时观察到ES集群在写入的时间,
网络流量较高(左边框是1月29日慢的时候,右边框是1月30日正常情况)
IO很低
建立的TCP连接一直不释放,访问ES集群相应也很慢
在运维的协助下查看日志
发现任务线程有很多同步锁等待的情况,怀疑是多线程切换问题,
于是由原来的30个excutor 每个excutor 3核改为申请100个excutor 每个excutor 1核 (30个excutor就是开启30个yarn container = 开启30个JVM执行任务 3核就是每个JVM分配三个执行线程 共有90个task可以同时执行)