最近遇到一个比较怪异的问题:
一个从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可以同时执行)
调整后仍然出现了卡顿问题
于是去查看ES日志,发现出问
ES自动映射异常导致数据丢失与性能下降

在同步HDFS数据到ES时,发现同步时间异常增长,经排查,问题出在ES的TCP客户端自动映射上。当数据字段`s23`为空时,ES会将其解析为date类型,导致写入异常。解决方案是预先指定索引mapping,避免数据丢失和性能影响。问题初期因TCP API错误日志未在客户端显示,造成排查困难。
最低0.47元/天 解锁文章
8386

被折叠的 条评论
为什么被折叠?



