绊脚石乃是进身之阶。

请教各位一个问题 bulk接口后接1000个30m大的文件 ES报SSL错误码5961

Elasticsearch | 作者 luxx | 发布于2018年09月05日 | 阅读数:4632

输入如下命令,curl –XPOST –negotiate –k –v –u : ‘IP/_bulk’ –H ‘Content-Type:application/jscon’ –data-binary @/data/
其中data下是1000个30多m大小的文件 之前可以正常执行,昨天突然报错
SSL read: errno -5961 (PR_CONNECT_RESET_ERROR)

现在怀疑是文件太大导致MTU超时,但是之前都是可以正常执行的。请教各位大神。
已邀请:

luxx

赞同来自:

解决了,是因为30M的文件大小过大。官方推荐的文件大小是5到15M 
http请求虽然没有限制请求体长度  但是应用程序有必要根据实际情况限制这个大小,30M是肯定不合理的
优秀的客户端应用程序都会在请求的时候附加header内容  注明最大请求体长度
因此只需要将文件切割为较小的分片即可正常传输。
 

laoyang360 - 《一本书讲透Elasticsearch》作者,Elastic认证工程师 [死磕Elasitcsearch]知识星球地址:http://t.cn/RmwM3N9;微信公众号:铭毅天下; 博客:https://elastic.blog.csdn.net

赞同来自:

1、注意大小参考:http.max_initial_line_length

The max length of an HTTP URL. Defaults to 4kb
 
https://www.elastic.co/guide/e ... .html
 
2、默认是4kb ,但是可以更改
修改方法: elasticsearch.ymlhttp.max_initial_line_length: "8k"
 

zqc0512 - andy zhou

赞同来自:

这个是HTTP头 长度限制的,和文件大于没有多少关系。 不过 通过bulk方式,太大的有性能问题,一般会测试取一个合适的值。

luxx

赞同来自:


这个是HTTP头 长度限制的,和文件大于没有多少关系。 不过 通过bulk方式,太大的有性能问题,一般会测试取一个合适的值。


后来改成小文件后,通过脚本控制用bulk这种方式循环导入文件(总大小约为40G),很快就会报堆内存溢出的错,现在还没有找到问题的根源,猜测是循环的脚本会将这些文件逐一读入缓存,shell方式是非阻塞的,导致文件在不断侵占内存,ES可用内存越来越少,最终导致无法处理。您说的这个测试取合适的值,怎么样的情况,就算是比较合适的情况呢?

luxx

赞同来自:


1、注意大小参考:http.max_initial_line_length

The max length of an HTTP URL. Defaults to 4kb
 
2、默认是4kb ,但是可以更改
修改方法: elasticsearch.ymlhttp.max_initial_line_length: "8k"


也就是说,尽管bulk这种接口支持文件的导入,但是最好小一些,是KB级别的文件?    我看到在6.4的文档中,已经没有对bulk上传文件大小的说明。

luxx

赞同来自:


zqc0512 • 23 分钟前

你直接curl bulk啊?通过程序走啊,这玩意创建连接的,可以用logstash或者自己通过java client方式吧


@zqc0512:是客户这样做的...我想知道为什么curl bulk这种方式不适合大文件,以及上面报错的原因

要回复问题请先登录注册