博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ES TCP客户端方式自动映射mapping写入异常
阅读量:4129 次
发布时间:2019-05-25

本文共 924 字,大约阅读时间需要 3 分钟。

最近遇到一个比较怪异的问题:

一个从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日志,发现出问题的日期日志文件都很大:
在这里插入图片描述

里面大量在打:

在这里插入图片描述
然后发现原先结果应该为3.1E的数据,写入ES后变为1.9E
查看ES的字段"s23" 为"网站首次上架时间"
然后去查询index的mapping 发现有问题的index的s23的数据类型为"date",没问题的数据类型为text :
在这里插入图片描述
在这里插入图片描述
由于创建索引的时候没有对索引指定mapping,都是在数据写入的时候自动生成
所以当一天的第一条数据的s23不为空时,ES根据数据"yyyy-MM-dd"自动将这个字段解析成date格式,导致数据中s23为空的数据写入失败,既造成了数据丢失,又导致了在同步数据时一直在处理异常,JVM频繁发生FullGC
而第一条写入的数据为空时,ES将s23解析为text,则不会有问题

解决方案: 创建索引时 指定mapping

这个问题难以排查的原因是TCP的API报错日志都打在了服务器端,在任务客户端测难以排查,还是早日废除掉官方不建议的这种API比较好!

转载地址:http://mjzvi.baihongyu.com/

你可能感兴趣的文章
在GitHub上创建版本库并上传本地文件
查看>>
Python爬虫 百度新闻列表20条的标题、链接、日期
查看>>
Python解析json方法学习
查看>>
Pycharm学生免费专业版-安装教程
查看>>
Python爬虫学习笔记
查看>>
如何确定自己浏览器的User-Agent信息
查看>>
VS2015配置darknet项目时遇到MSB3721的解决办法
查看>>
leetcode刷题 1 两数之和 Two Sum(简单) Python Java
查看>>
leetcode刷题 7 反转整数 Reverse Integer(简单) Python Java
查看>>
Python中[ : n]、[m : ]、[-1]、[:-1]、[::-1]、[2::-1]和[1:]的含义
查看>>
Python小括号、中括号、大括号和尖括号的含义
查看>>
leetcode刷题20 有效的括号 Valid Parentheses(简单) Python Java
查看>>
leetcode刷题9 回文数 Palindrome Number(简单) Python Java
查看>>
leetcode刷题14 最长公共前缀 Longest Common Prefix(简单) Python
查看>>
leetcode刷题21 合并两个有序链表 Merge Two Sorted Lists(简单) Python Java
查看>>
leetcode刷题26 删除排序数组中的重复项 Remove Duplicates from Sorted Array(简单) Python Java
查看>>
leetcode刷题53 最大子序和 Maximum Subarray(简单) Python Java
查看>>
leetcode刷题70 爬楼梯 Climbing Stairs(简单) Python Java
查看>>
python的range()函数用法
查看>>
leetcode刷题88 合并两个有序数组 Merge Sorted Array(简单) Python Java
查看>>